Exercício – aplicar propriedades da lista
Digamos que você é desenvolvedor de uma empresa de jogos. Foi solicitado que você crie um código inicial para ser usado em um jogo de cartas. Sua primeira tarefa é criar um baralho e uma função que tire uma carta do baralho de cada vez.
Criar um baralho
Um baralho tem 52 cartas, mas, para facilitar a leitura da impressão do console, vamos reduzir o baralho para cinco cartas. Você pode criar uma série numérica inserindo dois pontos (..), cercados por espaços, entre o primeiro e o último número da lista.
No console, crie um novo projeto executando
dotnet new:dotnet new console --language F# -o Cards cd CardsPara criar uma lista que contém os cartões, no arquivo Program.fs , adicione o seguinte código:
let cards = [ 0 .. 5 ]Esse código cria uma lista de números de 0 a 5.
Tirar cartas do baralho
Agora que você criou o baralho, pode desenvolver um método para tirar cartas dele. Para isso, você pode usar as propriedades internas Head e Tail.
Em seguida, crie uma função
drawCard():let drawCard (list:int list) = printfn "%i" list.Head list.TailUsando a propriedade
Head, você lê o primeiro item da lista e, retornandoTail, você simula o ato de tirar uma carta do topo da lista e retornar as cartas restantes ao baralho.Para experimentar sua implementação, adicione o seguinte código ao método
main():let result = cards |> drawCard |> drawCard // 0 1Execute o projeto chamando
dotnet run:Agora, você deve ver
0e1impressos no console.
Parabéns! Você implementou um baralho do qual pode retirar cartas.
Tirar as cartões para uma mão
Tirar cartas do baralho é um ótimo começo, mas jogos de cartas normalmente precisam de dois ou mais jogadores para retirar essas cartas. Como você sabe, a coleção de cartas desenhadas de cada jogador é chamada de mão. Em seguida, você precisa implementar o código para que cada carta retirada seja adicionada a uma mão.
No código em que você declarou a lista
cards, adicione o seguinte código:let hand = []Depois, modifique o método
drawCard()para aceitar uma tupla, que consiste em duas listas, uma representando o baralho e a outra a mão: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)A função
fst()é usada para acessar a primeira propriedade da tupla (isto é, o baralho). A funçãosndé usada para acessar a mão. Você também modificou o tipo de retorno, de modo que ele retorna uma tupla, que consiste no baralho e na sua mão(deck.Tail, hand), mas com a cartafirstCardadicionada.Modifique o código no método principal para tirar cartas para a mão:
let d, h = (cards, hand) |> drawCard |> drawCard printfn "Deck: %A Hand: %A" d h // Deck: [2; 3; 4; 5] Hand: [1; 0]Execute o projeto chamando
dotnet run:dotnet runVocê deverá ver o seguinte resultado no console:
Deck: [2; 3; 4; 5] Hand: [1; 0]
Parabéns! Você conseguiu simular a presença de um jogador, hand, a cada vez que você retira uma carta.