Tracks
/
Go
Go
/
Übungen
/
Blackjack
Blackjack

Blackjack

Lernübung

Einführung

Wie andere Sprachen bietet auch Go eine switch-Anweisung. Switch-Anweisungen sind ein kürzerer Weg, lange if ... else if-Anweisungen zu schreiben. Um eine Switch-Anweisung zu erstellen, beginnen wir mit dem Schlüsselwort switch, gefolgt von einem Wert oder Ausdruck. Dann deklarieren wir jede der Bedingungen mit dem Schlüsselwort case. Wir können auch einen default-Fall deklarieren, der ausgeführt wird, wenn keine der vorherigen case-Bedingungen zutrifft:

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
} 

Interessant an Switch-Anweisungen ist, dass der Wert nach dem Schlüsselwort switch weggelassen werden kann und wir für jedes case boolesche Bedingungen angeben können:

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
}

Anleitung

In dieser Übung simulieren wir den ersten Zug eines Blackjack-Spiels.

Du erhältst zwei Karten und kannst die offene Karte des Dealers sehen. Alle Karten werden durch einen String wie „ace“, „king“, „three“, „two“ usw. dargestellt. Die Werte der einzelnen Karten sind:

Karte Wert Karte Wert
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

Hinweis: Üblicherweise können Karten mit dem Wert „ace“ den Wert 1 oder 11 haben, aber der Einfachheit halber nehmen wir an, dass sie nur den Wert 11 haben können.

Je nach deinen zwei Karten und der Karte des Dealers gibt es eine Strategie für den ersten Zug des Spiels, bei der du die folgenden Optionen hast:

  • Stehen (S)
  • Ziehen (H)
  • Splitten (P)
  • Automatisch gewinnen (W)

Obwohl sie noch nicht optimal ist, wirst du die Strategie befolgen, die dein Freund Alex entwickelt hat. Sie sieht wie folgt aus:

  • Wenn du zwei „ace“-Karten hast, musst du sie immer splitten.
  • Wenn du einen Blackjack hast (zwei Karten, die zusammen den Wert 21 ergeben) und der Dealer weder eine „ace“-Karte, eine Bildkarte (Jack/Queen/King) noch eine „ten“-Karte hat, gewinnst du automatisch. Wenn der Dealer eine dieser Karten hat, musst du stehen bleiben und warten, bis die andere Karte aufgedeckt wird.
  • Wenn deine Karten zusammen einen Wert im Bereich [17, 20] ergeben, solltest du immer stehen bleiben.
  • Wenn deine Karten zusammen einen Wert im Bereich [12, 16] ergeben, solltest du immer stehen bleiben, es sei denn, der Dealer hat eine 7 oder höher; in diesem Fall solltest du immer ziehen.
  • Wenn deine Karten zusammen 11 oder weniger ergeben, solltest du immer ziehen.

1. Berechne den Wert einer beliebigen Karte

Implementiere eine Funktion, um den numerischen Wert einer Karte zu berechnen:

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

2. Implementiere die Entscheidungslogik für den ersten Zug

Schreibe eine Funktion, die die oben beschriebene Entscheidungslogik implementiert:

func FirstTurn(card1, card2, dealerCard string) string

Hier sind einige Beispiele für die erwarteten Ergebnisse:

FirstTurn("ace", "ace", "jack") == "P"
FirstTurn("ace", "king", "ace") == "S"
FirstTurn("five", "queen", "ace") == "H"
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Go Exercism

Bereit, mit Blackjack zu starten?

Melde dich bei Exercism an, um Go mit 35 Konzepte167 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.