Blackjack

Blackjack

Άσκηση εκμάθησης

Εισαγωγή

Όπως και άλλες γλώσσες, η Go παρέχει επίσης μια εντολή switch. Οι εντολές switch είναι ένας πιο σύντομος τρόπος για να γράψεις μεγάλες εντολές if ... else if. Για να φτιάξεις ένα switch, ξεκινάς χρησιμοποιώντας τη λέξη-κλειδί switch ακολουθούμενη από μια τιμή ή μια έκφραση. Στη συνέχεια δηλώνεις καθεμία από τις συνθήκες με τη λέξη-κλειδί case. Μπορείς επίσης να δηλώσεις μια περίπτωση default, που θα εκτελεστεί όταν καμία από τις προηγούμενες συνθήκες case δεν ταιριάζει:

operatingSystem := "windows"

switch operatingSystem {
case "windows":
    // do something if the operating system is windows
case "linux":
    // do something if the operating system is linux
case "macos":
    // do something if the operating system is macos
default:
    // do something if the operating system is none of the above
} 

Ένα ενδιαφέρον στοιχείο των εντολών switch είναι ότι η τιμή μετά τη λέξη-κλειδί switch μπορεί να παραλειφθεί, και μπορείς να έχεις boolean συνθήκες για κάθε case:

age := 21

switch {
case age > 20 && age < 30:
    // do something if age is between 20 and 30
case age == 10:
    // do something if age is equal to 10
default:
    // do something else for every other case
}

Οδηγίες

Σε αυτή την άσκηση θα προσομοιώσουμε τον πρώτο γύρο ενός παιχνιδιού Blackjack.

Θα λάβεις δύο φύλλα και θα μπορείς να δεις το ανοιχτό φύλλο του ντίλερ. Όλα τα φύλλα αναπαρίστανται με μια συμβολοσειρά όπως "ace", "king", "three", "two" κ.λπ. Οι τιμές κάθε φύλλου είναι:

φύλλο τιμή φύλλο τιμή
ace 11 eight 8
two 2 nine 9
three 3 ten 10
four 4 jack 10
five 5 queen 10
six 6 king 10
seven 7 other 0

Σημείωση: Συνήθως, οι άσσοι μπορούν να πάρουν την τιμή 1 ή 11, αλλά για απλότητα θα υποθέσουμε ότι μπορούν να πάρουν μόνο την τιμή 11.

Ανάλογα με τα δύο φύλλα σου και το φύλλο του ντίλερ, υπάρχει μια στρατηγική για τον πρώτο γύρο του παιχνιδιού, στην οποία έχεις τις εξής επιλογές:

  • Σταμάτημα (S)
  • Τράβηγμα φύλλου (H)
  • Μοίρασμα (P)
  • Αυτόματη νίκη (W)

Αν και δεν είναι ακόμα βέλτιστη, θα ακολουθήσεις τη στρατηγική που έχει αναπτύξει ο φίλος σου ο Alex, η οποία έχει ως εξής:

  • Αν έχεις ένα ζευγάρι άσσους, πρέπει πάντα να τους μοιράζεις.
  • Αν έχεις Blackjack (δύο φύλλα που αθροίζουν σε τιμή 21), και ο ντίλερ δεν έχει άσσο, φιγούρα (Jack/Queen/King) ή δεκάρι, τότε κερδίζεις αυτόματα. Αν ο ντίλερ έχει κάποιο από αυτά τα φύλλα, τότε θα πρέπει να σταματήσεις και να περιμένεις να αποκαλυφθεί το άλλο φύλλο.
  • Αν τα φύλλα σου αθροίζουν σε τιμή εντός του εύρους [17, 20], θα πρέπει πάντα να σταματάς.
  • Αν τα φύλλα σου αθροίζουν σε τιμή εντός του εύρους [12, 16], θα πρέπει πάντα να σταματάς εκτός αν ο ντίλερ έχει 7 ή μεγαλύτερο, οπότε θα πρέπει πάντα να τραβάς φύλλο.
  • Αν τα φύλλα σου αθροίζουν σε 11 ή λιγότερο, θα πρέπει πάντα να τραβάς φύλλο.

1. Υπολόγισε την τιμή οποιουδήποτε φύλλου

Υλοποίησε μια συνάρτηση για να υπολογίζεις την αριθμητική τιμή ενός φύλλου:

value := ParseCard("ace")
fmt.Println(value)
// Output: 11

2. Υλοποίησε τη λογική απόφασης για τον πρώτο γύρο

Γράψε μια συνάρτηση που υλοποιεί τη λογική απόφασης όπως περιγράφηκε παραπάνω:

func FirstTurn(card1, card2, dealerCard string) string

Ακολουθούν μερικά παραδείγματα για τα αναμενόμενα αποτελέσματα:

FirstTurn("ace", "ace", "jack") == "P"
FirstTurn("ace", "king", "ace") == "S"
FirstTurn("five", "queen", "ace") == "H"
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Go Exercism

Έτοιμος να ξεκινήσεις την άσκηση Blackjack;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις Go με 35 έννοιες167 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.