Kurzusok
/
Elm
Elm
/
Feladatok
/
Szerepjáték
Szerepjáték

Szerepjáték

Tanulófeladat

Bevezetés

Maybe

A Maybe típus az Elm nyelv megoldása az opcionális értékekre. Ezért számos alapvető Elm-függvény típusszignatúrájában szerepel, és elengedhetetlen a megértése. A Maybe típus definíciója a következő:

type Maybe a = Nothing | Just a

Ez az Elm terminológiában „egyedi típus” definícióként ismert. Azt jelzi, hogy egy ilyen típusú érték vagy Nothing, vagy Just valami a típusú. Egy Maybe értéket a két konstruktorának, a Nothing-nak és a Just-nak valamelyikével hozunk létre. A Maybe tartalmának kiolvasása mintaillesztéssel történik.

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!"

A Maybe modulban is számos hasznos függvény található a Maybe típusok kezelésére.

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

Utasítások

Ebben a feladatban egy szerepjáték mechanikáit fogod megvalósítani. A játékos karakterét a következő típus írja le:

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

A játékban a játékosoknak el kell érniük a 10. szintet, hogy feloldják a manapooljukat, és elkezdhessenek varázslatokat szórni. Ebben a játékban két funkcióval foglalkozol: a feltámasztás és a varázslás mechanikájával.

1. Mutatkozz be

Írd meg az introduce függvény tartalmát. A lopakodó játékosok elrejthetik a nevüket, és "Mighty Magician" néven mutatkoznak be. Egyébként egyszerűen a saját neveddel mutatkozz be.

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

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

2. Valósítsd meg a feltámasztás mechanikáját

A revive függvénynek ellenőriznie kell, hogy a játékos karaktere valóban halott-e (az életereje elérte a 0-t). Ha igen, egy új Player példányt kell visszaadnia 100 életerővel. Ellenkező esetben, ha a játékos karaktere nem halott, a revive függvény Nothing-t ad vissza.

Ha a játékos szintje 10 vagy annál magasabb, akkor 100 manával kell feltámasztani. Ha a játékos szintje 10 alatt van, a manája Nothing legyen. A revive függvénynek meg kell őriznie a játékos szintjét.

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

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

Ha a revive metódust olyan játékoson hívod meg, akinek az életereje 1 vagy annál több, akkor a függvénynek Nothing-t kell visszaadnia.

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

revive alivePlayer
    --> Nothing

3. Valósítsd meg a varázslás mechanikáját

A castSpell függvény argumentumként egy Int-et kap, amely megadja, mennyi manába kerül a varázslat, valamint egy Player-t. Visszaadja a frissített játékost, valamint az elszórt varázslat által okozott sebzés mértékét. Egy sikeres varázslás a varázslat manaköltségének kétszeresével egyenlő sebzést okoz. Ha azonban a játékosnak nincs elég manája, semmi sem történik, a játékos változatlan marad, és nem keletkezik sebzés. Ha a játékosnak még manapoolja sincs, a varázslás kísérletekor az életereje a varázslat manaköltségével csökken, és nem okoz sebzést.

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

( updatedWizard, damage ) = castSpell 14 wizard

updatedWizard.mana --> Just 16
damage             --> 28
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Elm Exercism

Készen állsz elkezdeni a(z) Szerepjáték feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Elm nyelvet 28 fogalom110 feladat segítségével, valódi emberi mentorálással, mindez ingyen.