Übung: Ausführen von Vorgängen für Listen
Ihrem Team gefällt der bisherige Code, den Sie für das Kartenspiel geschrieben haben. Nun sollen Sie den Code weiterentwickeln und mit der Implementierung von spezifischer Logik für die Spielregeln beginnen, wie etwa der Berechnung des Werts einer Hand.
Für diese Übung verwenden Sie einige der Funktionen im Listenmodul.
Berechnen einer Hand für das Spiel 31
Für das Kartenspiel mit dem Namen „31“ wird jedem der zwei oder mehr Spieler eine Hand aus drei Karten ausgeteilt. Der Spieler, dessen summierte Kartenpunkte dem Wert 31 am nächsten kommen, gewinnt. Jede Karte besitzt ihren jeweiligen Wert, nur Bube, Dame und König zählen jeweils 10 Punkte, ein Ass 11 Punkte. Ein Spieler mit einer 10, einem Buben und einem Ass käme also z. B. auf 31 Punkte und hätte gewonnen.
In einer vorherigen Einheit haben Sie einen Kartenstapel mit Karten von 0 bis 51 erstellt. Für die Berechnung einer Hand müssen Sie diese Zahlen in etwas übersetzen, das im Kontext eines Kartenspiels Sinn ergibt. So können Sie etwa die Zahl „0“ durch die Bezeichnung „Herzass“ ersetzen.
Einer Ihrer Kollegen hat bereits den folgenden Code geschrieben:
// 0 = 11, 11, 12, 13 = 10, else the actual number
let cardValue card =
let value = card % 13
if value = 0 then 11
elif value = 10 || value = 11 || value = 12 then 10
else value
Kopieren Sie den vorherigen Code, und verwenden Sie ihn in Schritt 2 der folgenden Anweisungen.
Ihre Aufgabe besteht nun darin, eine Kartenhand aufzunehmen und ihren Wert mithilfe der Funktion sumBy() zu berechnen.
Erstellen Sie ein neues Projekt, indem Sie
dotnet newin einem leeren Verzeichnis aufrufen:dotnet new console --language F# -o CardGame cd CardGameFügen Sie den zuvor kopierten Code Ihres Kollegen über der Hauptmethode hinzu.
Zum Erstellen Ihrer Kartenhand fügen Sie den folgenden Code hinzu:
let hand = [0; 25; 31]Nachdem Sie die Hand erstellt haben, fügen Sie die Funktion
sumBy()hinzu:let sum = List.sumBy(fun card -> cardValue card) hand printfn "%i" sumRufen Sie
dotnet runauf, um den Code auszuführen:dotnet runJetzt sollte die folgende Ausgabe angezeigt werden:
26
Herzlichen Glückwunsch! Sie haben eine Spielrunde für das Kartenspiel „31“ ausgewertet. Mit 26 als Ergebnis haben Sie zwar nicht ganz 31 Punkte erreicht, doch es ist ein gutes Ergebnis.