Harjoitus – Luettelon ominaisuuksien käyttäminen

Valmis

Oletetaan, että olet kehittäjä satunnaisessa peliyrityksessä. Sinua on pyydetty kirjoittamaan aloituskoodia korttipeliä varten. Ensimmäinen tehtäväsi on luoda korttipakka ja luoda sitten funktio, joka voi piirtää kortteja kannesta yksi kerrallaan.

Korttipakan luominen

Korttikannessa on 52 korttia, mutta konsolin tulostuksen lukemisen helpottamiseksi pienennämme kannen viideksi kortiksi. Voit luoda lukusarjan lisäämällä kaksi pistettä (..), välilyönnit ympäröityinä luettelon ensimmäisen ja viimeisen luvun välissä.

  1. Luo konsolissa uusi projekti suorittamalla dotnet new:

    dotnet new console --language F# -o Cards
    cd Cards
    
  2. Jos haluat luoda luettelon, joka sisältää kortit, lisää Program.fs -tiedostoon seuraava koodi:

    let cards = [ 0 .. 5 ]
    

    Tämä koodi luo lukujen luettelon 0:sta 5:een.

Piirrä kortit kannesta

Nyt kun olet luonut kannen, voit luoda menetelmän korttien piirtämiseen siitä. Voit tehdä tämän käyttämällä sisäisiä ominaisuuksia Head ja Tail.

  1. Luo seuraavaksi funktio drawCard():

    let drawCard (list:int list) = 
        printfn "%i" list.Head
        list.Tail 
    

    Käyttämällä Head-ominaisuutta luet luettelon ensimmäisen kohteen ja palauttamalla Tailsimuloit kortin ottamista luettelon yläosasta ja palautat loput kortit kannessa.

  2. Kokeile toteutusta lisäämällä seuraava koodi main()-menetelmään:

    let result = cards |> drawCard |> drawCard // 0 1
    
  3. Suorita projekti kutsumalla dotnet run:

    Näet nyt, 0 ja 1 tulostetaan konsolissa.

Onnittelen! Olet ottanut käyttöön kannen, josta voit piirtää kortteja.

Korttien piirtäminen käteen

Mahdollisuus piirtää kortteja kannesta on hyvä alku, mutta korttipelit tarvitsevat yleensä kaksi tai useampia pelaajia noutamaan nämä kortit. Kuten tiedät, jokaisen pelaajan arvottu korttikokoelma on nimeltään käsi. Seuraavaksi sinun on otettava käyttöön koodi, jotta jokainen arvottu kortti lisätään käteen.

  1. Lisää seuraava koodi koodiin, jossa cards luettelon olet ilmoittanut:

    let hand = []
    
  2. Muokkaa sitten drawCard() -menetelmää hyväksymään monikko, joka koostuu kahdesta luettelosta, joista toinen edustaa esitystä ja toinen esittää kättä:

    let drawCard (tuple: int list * int list) = 
        let deck = fst tuple
        let draw = snd tuple
        let firstCard = deck.Head
        printfn "%i" firstCard
    
        let hand = 
            draw
            |> List.append [firstCard]
    
        (deck.Tail, hand)
    

    fst()-funktiolla käytetään monikko-kohdan ensimmäistä ominaisuutta (eli esitystäsi). snd-funktiota käytetään käteen pääsyyn. Muokkasit myös palautustyyppiä siten, että se palauttaa monikkosen, joka koostuu kannesta ja kädestäsi (deck.Tail, hand), mutta lisätyllä kortilla firstCard.

  3. Muokkaa päämenetelmän koodia siten, että kortit piirretään käteen:

    let d, h = (cards, hand) |> drawCard |> drawCard
    
    printfn "Deck: %A Hand: %A" d h // Deck: [2; 3; 4; 5] Hand: [1; 0]
    
  4. Suorita projekti kutsumalla dotnet run:

    dotnet run
    

    Konsolissa pitäisi näkyä seuraava tuloste:

    Deck: [2; 3; 4; 5] Hand: [1; 0]
    

Onnittelen! Olet onnistunut simuloimaan sitä, että käytössäsi on soitin, hand, joka kerta, kun piirrät kortin.