Exercício – executar operações em listas

Concluído(a)

Sua equipe está satisfeita com o código que você escreveu até agora para o jogo de cartas. A equipe deseja que você desenvolva ainda mais o código e comece a implementar a lógica específica da regra do jogo, como calcular o valor de uma mão.

Neste exercício, use algumas das funções do módulo de lista.

Calcular uma mão no jogo 31

No jogo de cartas "31", cada um dos dois ou mais jogadores recebe uma mão que consiste em três cartas. O jogador vencedor é aquele cujo total de pontos das cartas for mais próximo de 31. Cada carta traz seu valor nela mesma, exceto valete, dama e rei, cada um valendo 10 pontos, e o Ás que vale 11 pontos. Um jogador com, por exemplo, um 10, um valete e um ás, teria 31 pontos, e essa mão seria a vencedora.

Em uma unidade anterior, você criou um baralho de cartas, cada uma representada como um número de 0 a 51. Para começar a calcular uma mão, você precisa converter esses números em algo que faça sentido dentro do domínio das cartas. Por exemplo, você substituiria o número "0" pelo nome "Ás de Copas".

Felizmente, um de seus colegas já escreveu esse código:

// 0 = 11, 11, 12, 13 = 10, else the actual number
let cardValue card =
    let value = card % 13
    if value = 0 then 11
    elif value = 10 || value = 11 || value = 12 then 10
    else value

Copie o código anterior para usar na etapa 2 das instruções a seguir.

Sua tarefa é calcular o valor de uma carta usando a função sumBy().

  1. Crie um novo projeto chamando dotnet new em um diretório vazio:

    dotnet new console --language F# -o CardGame
    cd CardGame
    
  2. Acima do método principal, adicione o código do seu colega, que você copiou há pouco.

  3. Para criar a sua mão de cartas, adicione o seguinte código:

    let hand = [0; 25; 31]
    
  4. Agora que você criou a mão, adicione a função sumBy():

    let sum = List.sumBy(fun card -> cardValue card) hand
    printfn "%i" sum
    
  5. Execute o código chamando dotnet run:

    dotnet run
    

    Agora, você verá a seguinte saída:

    26 
    

Parabéns! Você conseguiu avaliar um jogo para o jogo de cartas 31. Ele chegou a 26, que não é exatamente 31, mas é uma soma boa.