Exerciții - Aplicarea proprietăților listei

Finalizat

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

  1. În consolă, creați un proiect nou rulând dotnet new:

    dotnet new console --language F# -o Cards
    cd Cards
    
  2. Pentru 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.

  1. În continuare, creați o funcție drawCard():

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

    Utilizând proprietatea Head, citiți primul element din listă și returnând Tail, simulați luarea unei fișe din partea de sus a listei și returnați fișele rămase în pachet.

  2. Pentru a încerca implementarea, adăugați următorul cod la metoda main():

    let result = cards |> drawCard |> drawCard // 0 1
    
  3. Rulați proiectul apelând dotnet run:

    Acum ar trebui să vedeți 0 și 1 să 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.

  1. În codul în care ați declarat lista de cards, adăugați următorul cod:

    let hand = []
    
  2. Î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ția snd este 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ăugat firstCard.

  3. 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]
    
  4. Rulați proiectul apelând dotnet run:

    dotnet run
    

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