Übung: Ausführen von Vorgängen für Listen

Abgeschlossen

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.

  1. Erstellen Sie ein neues Projekt, indem Sie dotnet new in einem leeren Verzeichnis aufrufen:

    dotnet new console --language F# -o CardGame
    cd CardGame
    
  2. Fügen Sie den zuvor kopierten Code Ihres Kollegen über der Hauptmethode hinzu.

  3. Zum Erstellen Ihrer Kartenhand fügen Sie den folgenden Code hinzu:

    let hand = [0; 25; 31]
    
  4. Nachdem Sie die Hand erstellt haben, fügen Sie die Funktion sumBy() hinzu:

    let sum = List.sumBy(fun card -> cardValue card) hand
    printfn "%i" sum
    
  5. Rufen Sie dotnet run auf, um den Code auszuführen:

    dotnet run
    

    Jetzt 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.