Harjoitus – Luettelon ominaisuuksien käyttäminen
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ä.
Luo konsolissa uusi projekti suorittamalla
dotnet new:dotnet new console --language F# -o Cards cd CardsJos 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.
Luo seuraavaksi funktio
drawCard():let drawCard (list:int list) = printfn "%i" list.Head list.TailKäyttämällä
Head-ominaisuutta luet luettelon ensimmäisen kohteen ja palauttamallaTailsimuloit kortin ottamista luettelon yläosasta ja palautat loput kortit kannessa.Kokeile toteutusta lisäämällä seuraava koodi
main()-menetelmään:let result = cards |> drawCard |> drawCard // 0 1Suorita projekti kutsumalla
dotnet run:Näet nyt,
0ja1tulostetaan 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.
Lisää seuraava koodi koodiin, jossa
cardsluettelon olet ilmoittanut:let hand = []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ä kortillafirstCard.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]Suorita projekti kutsumalla
dotnet run:dotnet runKonsolissa 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.