Tracks
/
Elm
Elm
/
Übungen
/
Rollenspiel
Rollenspiel

Rollenspiel

Lernübung

Einführung

Maybe

Der Maybe-Typ ist die Lösung in der Sprache Elm für optionale Werte. Er taucht daher in den Typsignaturen vieler Elm-Kernfunktionen auf, und ihn zu verstehen ist entscheidend. Der Maybe-Typ ist wie folgt definiert:

type Maybe a = Nothing | Just a

In der Elm-Terminologie nennt man das eine „Custom Type“-Definition. Er zeigt an, dass ein Wert dieses Typs entweder Nothing oder Just etwas vom Typ a sein kann. Einen Maybe-Wert erstellst du mit einem seiner beiden Konstruktoren Nothing und Just. Den Inhalt eines Maybe-Werts liest du mit Pattern Matching aus.

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

Außerdem gibt es im Maybe-Modul eine Reihe nützlicher Funktionen, mit denen du Maybe-Typen bearbeiten kannst.

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

Anleitung

In dieser Übung implementierst du die Mechaniken eines Rollenspiels. Die Spielfigur eines Spielers wird durch den folgenden Typ dargestellt:

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

Spieler in diesem Spiel müssen Level 10 erreichen, bevor sie einen Manavorrat freischalten, damit sie Zauber wirken können. Du arbeitest in diesem Spiel an zwei Mechaniken: dem Wiederbeleben und dem Zauberwirken.

1. Stell dich vor

Schreibe den Inhalt der introduce-Funktion. Heimliche Spieler verbergen möglicherweise ihren Namen und werden als "Mighty Magician" vorgestellt. Ansonsten stellst du dich einfach mit deinem Namen vor.

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

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

2. Implementiere die Mechanik zum Wiederbeleben

Die revive-Funktion sollte prüfen, dass die Spielfigur tatsächlich tot ist (ihre Gesundheit hat 0 erreicht). Wenn ja, sollte sie eine neue Player-Instanz mit 100 Gesundheit zurückgeben. Andernfalls, wenn die Spielfigur nicht tot ist, gibt die revive-Funktion Nothing zurück.

Wenn das Level des Spielers 10 oder höher ist, sollte er auch mit 100 Mana wiederbelebt werden. Wenn das Level des Spielers unter 10 liegt, sollte sein Mana Nothing sein. Die revive-Funktion sollte das Level des Spielers beibehalten.

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

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

Wenn die revive-Methode für einen Spieler aufgerufen wird, dessen Gesundheit 1 oder höher ist, sollte die Funktion Nothing zurückgeben.

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

revive alivePlayer
    --> Nothing

3. Implementiere die Mechanik zum Zauberwirken

Die castSpell-Funktion nimmt als Argumente einen Int, der angibt, wie viel Mana der Zauber kostet, sowie einen Player. Sie gibt den aktualisierten Spieler sowie die Menge an Schaden zurück, den der gewirkte Zauber verursacht. Ein erfolgreich gewirkter Zauber verursacht Schaden in Höhe des Doppelten der Manakosten des Zaubers. Wenn der Spieler jedoch nicht genug Mana hat, passiert nichts: Der Spieler bleibt unverändert und es wird kein Schaden verursacht. Wenn der Spieler nicht einmal einen Manavorrat hat, muss der Versuch, den Zauber zu wirken, seine Gesundheit um die Manakosten des Zaubers verringern und verursacht keinen Schaden.

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

( updatedWizard, damage ) = castSpell 14 wizard

updatedWizard.mana --> Just 16
damage             --> 28
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Elm Exercism

Bereit, mit Rollenspiel zu starten?

Melde dich bei Exercism an, um Elm mit 28 Konzepte110 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.