Harjoitus – Suorita luettelotoimintoja

Valmis

Joukkueesi on tyytyväinen koodiin, jonka olet kirjoittanut korttipeliä varten. Tiimi haluaa, että kehität koodia edelleen ja alat toteuttaa pelisääntökohtaista logiikkaa, kuten laskea käden arvon.

Käytä tässä harjoituksessa joitakin luettelomoduulin funktioita.

Laske käsi pelille 31

Korttipelissä "31" kummallekin pelaajalle jaetaan käsi, joka koostuu kolmesta kortista. Pelaaja voittaa, jonka kortin pistesumma on lähimpänä 31:ttä. Jokaisella kortilla on oma nimellisarvonsa, paitsi että jakki, kuningatar ja kuningas ovat 10 pisteen arvoisia ja ässät 11 pisteen arvoisia. Pelaajalla, jolla on hallussaan esimerkiksi 10, jack ja ässä, olisi 31 pistettä, ja se käsi olisi voittaja.

Loit aiemmassa osiossa korttipakan, joista jokainen on esitetty numerona 0:sta 51:een. Jos haluat aloittaa käden laskemisen, sinun on käännettävä nämä luvut sellaiseksi, joka on järkevää korttitoimialueella. Voit esimerkiksi korvata luvun "0" nimellä "Hertta-ässä".

Onneksi yksi työtovereistasi on jo kirjoittanut kyseisen koodin:

// 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

Kopioi edellä oleva koodi, jota käytetään seuraavien ohjeiden vaiheessa 2.

Sinun tehtäväsi on ottaa kortti käsi ja laskea sen arvo käyttämällä sumBy()-funktiota.

  1. Luo uusi projekti kutsumalla dotnet new tyhjässä hakemistossa:

    dotnet new console --language F# -o CardGame
    cd CardGame
    
  2. Lisää päämenetelmän yläpuolelle työtoverisi koodi, jonka kopioit hetki sitten.

  3. Jos haluat luoda kortin, lisää seuraava koodi:

    let hand = [0; 25; 31]
    
  4. Nyt kun olet luonut käden, lisää sumBy() funktio:

    let sum = List.sumBy(fun card -> cardValue card) hand
    printfn "%i" sum
    
  5. Suorita koodi kutsumalla dotnet run:

    dotnet run
    

    Sinun pitäisi nyt nähdä seuraava tuloste:

    26 
    

Onnittelen! Olet onnistunut arvioimaan korttipelin pelille 31. Siitä tuli 26, joka ei ole aivan 31, mutta se on hyvä summa.