Ejercicio: Realización de operaciones de lista

Completado

El equipo está satisfecho con el código que ha escrito hasta ahora para el juego de cartas. Ahora, quiere que desarrolle aún más el código y empiece a implementar lógica específica de las reglas del juego, como calcular el valor de una mano.

Para este ejercicio, usará algunas de las funciones del módulo de lista.

Cálculo de una mano para el juego 31

En el juego "31", cada uno de los dos o más jugadores tiene una mano formada por tres cartas. Gana el jugador cuyo total de puntos de las cartas se acerque más a 31. Cada carta tiene el valor de su numeración, salvo la jota, la reina y el rey, que tienen un valor de 10 puntos cada uno, y los ases, que tienen un valor de 11 puntos. Un jugador que tenga, por ejemplo, un 10, una jota y un as tendría 31 puntos y su mano sería la ganadora.

En una unidad anterior ha creado una baraja de cartas, cada una representada como un número del 0 a 51. Para empezar a calcular una mano, debe traducir esos números a algo que tenga sentido dentro del ámbito de las cartas. Por ejemplo, reemplazaría el número "0" por el nombre "As de corazones".

Afortunadamente, uno de sus compañeros ya ha escrito ese 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 el código anterior para usarlo en el paso 2 de las instrucciones a continuación.

La tarea consiste en tomar una mano de cartas y calcular su valor mediante la función sumBy().

  1. Cree un nuevo proyecto mediante una llamada a dotnet new en un directorio vacío:

    dotnet new console --language F# -o CardGame
    cd CardGame
    
  2. Encima del método Main, agrega el código de su compañero, que ha copiado hace un momento.

  3. Para crear la mano de cartas, agregue el código siguiente:

    let hand = [0; 25; 31]
    
  4. Ahora que ha creado la mano, agregue la función sumBy():

    let sum = List.sumBy(fun card -> cardValue card) hand
    printfn "%i" sum
    
  5. Llame a dotnet run para ejecutar el código:

    dotnet run
    

    Ahora debería aparecer esta salida:

    26 
    

¡Enhorabuena! Ha conseguido evaluar un juego de cartas para el 31. Ha resultado un 26, que no llega a 31, pero es una suma bastante buena.