Exerciții - Aplicarea proprietăților listei
Să presupunem că sunteți dezvoltator la o firmă de jocuri informale. Vi s-a solicitat să scrieți un cod de pornire pentru a fi utilizat pentru un joc de cărți. Prima temă este să creați un pachet de cărți, apoi să creați o funcție care să poată desena cărți de vizită, câte una.
Crearea unui pachet de cărți
Un pachet de cărți de vizită are 52 de cartele, dar pentru a face mai ușor de citit imprimarea consolei, să reducem pachetul la cinci cartele. Puteți crea o serie numerică prin inserarea a două puncte (..), înconjurate de spații, între primele și ultimele numere din listă.
În consolă, creați un proiect nou rulând
dotnet new:dotnet new console --language F# -o Cards cd CardsPentru a crea o listă care conține fișele, în fișierul Program.fs, adăugați următorul cod:
let cards = [ 0 .. 5 ]Acest cod creează o listă de numere de la 0 la 5.
Desenați cărți de vizită de pe punte
Acum, că ați creat pachetul, puteți construi o metodă de desenare a cărților de vizită. Pentru a face acest lucru, puteți utiliza proprietățile predefinite Head și Tail.
În continuare, creați o funcție
drawCard():let drawCard (list:int list) = printfn "%i" list.Head list.TailUtilizând proprietatea
Head, citiți primul element din listă și returnândTail, simulați luarea unei fișe din partea de sus a listei și returnați fișele rămase în pachet.Pentru a încerca implementarea, adăugați următorul cod la metoda
main():let result = cards |> drawCard |> drawCard // 0 1Rulați proiectul apelând
dotnet run:Acum ar trebui să vedeți
0și1să fie imprimate în consolă.
Felicitări! Ați implementat un pachet din care puteți desena cărți.
Desenarea de cărți pe o mână
Capacitatea de a desena cărți de pe punte este un start excelent, dar jocurile de cărți de vizită de obicei au nevoie de doi sau mai mulți jucători pentru a ridica cardurile respective. După cum știți, colecția de cărți desenate a fiecărui jucător se numește mână. În continuare, trebuie să implementați codul pentru a adăuga la mână fiecare carte desenate.
În codul în care ați declarat lista de
cards, adăugați următorul cod:let hand = []În continuare, modificați metoda
drawCard()pentru a accepta un tuple care constă în două liste, una reprezentând puntea și cealaltă reprezentând mâna: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)Funcția
fst()este utilizată pentru a accesa prima proprietate din tuple (adică pachetul). Funcțiasndeste utilizată pentru a accesa mâna. De asemenea, ați modificat tipul de returnare, astfel încât să returneze un tuple care constă în pachet și mâna(deck.Tail, hand), dar cu cardul adăugatfirstCard.Modificați codul din metoda principală pentru a desena cărți de vizită la mână:
let d, h = (cards, hand) |> drawCard |> drawCard printfn "Deck: %A Hand: %A" d h // Deck: [2; 3; 4; 5] Hand: [1; 0]Rulați proiectul apelând
dotnet run:dotnet runAr trebui să vedeți următoarea ieșire imprimată pe consolă:
Deck: [2; 3; 4; 5] Hand: [1; 0]
Felicitări! Ai reușit să simulați un jucător, hand, pentru fiecare dată când desenați o carte.