Tracks
/
Elm
Elm
/
Ejercicios
/
Juego de rol
Juego de rol

Juego de rol

Ejercicio de aprendizaje

Introducción

Maybe

El tipo Maybe es la solución que ofrece el lenguaje Elm para los valores opcionales. Por eso aparece en las firmas de tipo de una gran cantidad de funciones básicas de Elm, y entenderlo es fundamental. El tipo Maybe se define de la siguiente manera:

type Maybe a = Nothing | Just a

En la terminología de Elm, esto se conoce como la definición de un «tipo personalizado». Indica que un valor de este tipo puede ser Nothing o ser Just algo de tipo a. Para crear un valor Maybe se usa uno de sus dos constructores: Nothing y Just. Para leer el contenido de un Maybe se usa la coincidencia de patrones.

matthieu : Maybe String
matthieu = Just "Matthieu"

anon : Maybe String
anon = Nothing

sayHello : Maybe String -> String
sayHello maybeName =
    case maybeName of
        Nothing -> "Hello, World!"
        Just someName -> "Hello, " ++ someName ++ "!"

sayHello matthieu
    --> "Hello, Matthieu!"

sayHello anon
    --> "Hello, World!"

También hay varias funciones útiles en el módulo Maybe para manipular tipos Maybe.

sayHelloAgain : Maybe String -> String
sayHelloAgain name = "Hello, " ++ Maybe.withDefault "World" name ++ "!"

capitalizeName : Maybe String -> Maybe String
capitalizeName name = Maybe.map String.toUpper name

capitalizeName matthieu
    --> Just "MATTHIEU"

capitalizeName anon
    --> Nothing

Instrucciones

En este ejercicio, vas a implementar mecánicas de un juego de rol. El personaje de un jugador se representa con el siguiente tipo:

type alias Player =
    { name : Maybe String
    , level : Int
    , health : Int
    , mana : Maybe Int
    }

Los jugadores de este juego deben alcanzar el nivel 10 antes de desbloquear una reserva de maná para poder empezar a lanzar hechizos. Vas a trabajar en dos funcionalidades de este juego: la mecánica de revivir y la mecánica de lanzar hechizos.

1. Preséntate

Escribe el contenido de la función introduce. Los jugadores sigilosos pueden estar ocultando su nombre y se presentarán como "Mighty Magician". De lo contrario, solo usa tu nombre para presentarte.

introduce { name = Nothing, level = 2, health = 8, mana = Nothing }
    --> "Mighty Magician"

introduce { name = Just "Merlin", level = 2, health = 8, mana = Nothing }
    --> "Merlin"

2. Implementa la mecánica de revivir

La función revive debe comprobar que el personaje del jugador está realmente muerto (su salud ha llegado a 0). Si es así, debe devolver una nueva instancia de Player con 100 de salud. De lo contrario, si el personaje del jugador no está muerto, la función revive devuelve Nothing.

Si el nivel del jugador es 10 o más, también debe revivir con 100 de maná. Si el nivel del jugador es menor que 10, su maná debe ser Nothing. La función revive debe conservar el nivel del jugador.

deadPlayer = { name = Nothing, level = 2, health = 0, mana = Nothing }

revive deadPlayer
    --> Just { name = Nothing, level = 2, health = 100, mana = Nothing }

Si se llama al método revive con un jugador cuya salud es 1 o más, la función debe devolver Nothing.

alivePlayer = { name = Nothing, level = 2, health = 42, mana = Nothing }

revive alivePlayer
    --> Nothing

3. Implementa la mecánica de lanzar hechizos

La función castSpell recibe como argumentos un Int que indica cuánto maná cuesta el hechizo, además de un Player. Devuelve el jugador actualizado y también la cantidad de daño que hace el hechizo lanzado. Un lanzamiento exitoso hace un daño igual al doble del costo de maná del hechizo. Sin embargo, si el jugador no tiene maná suficiente, no pasa nada: el jugador queda igual y no se hace daño. Si el jugador ni siquiera tiene una reserva de maná, intentar lanzar el hechizo debe reducir su salud en el costo de maná del hechizo y no hace daño.

wizard = { name = Nothing, level = 18, health = 123, mana = Just 30 }

( updatedWizard, damage ) = castSpell 14 wizard

updatedWizard.mana --> Just 16
damage             --> 28
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Elm Exercism

¿Todo listo para empezar Juego de rol?

Regístrate en Exercism para aprender y dominar Elm con 28 conceptos110 ejercicios y mentoría humana real, todo gratis.