Διαδρομές
/
Elm
Elm
/
Ασκήσεις
/
Παιχνίδι Ρόλων
Παιχνίδι Ρόλων

Παιχνίδι Ρόλων

Άσκηση εκμάθησης

Εισαγωγή

Maybe

Ο τύπος Maybe είναι η λύση στη γλώσσα Elm για προαιρετικές τιμές. Είναι επομένως παρών στις υπογραφές τύπων πολλών βασικών συναρτήσεων της Elm και η κατανόησή του είναι κρίσιμη. Ο τύπος Maybe ορίζεται ως εξής:

type Maybe a = Nothing | Just a

Αυτό είναι γνωστό ως ορισμός "προσαρμοσμένου τύπου" στην ορολογία της Elm. Υποδεικνύει ότι μια τιμή αυτού του τύπου μπορεί είτε να είναι Nothing ή να είναι Just κάτι τύπου a. Η δημιουργία μιας τιμής Maybe γίνεται μέσω ενός από τους δύο κατασκευαστές του. Η ανάγνωση του περιεχομένου ενός Maybe γίνεται μέσω αντιστοίχισης προτύπων.

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

Υπάρχουν επίσης αρκετές χρήσιμες συναρτήσεις στην ενότητα Maybe για τον χειρισμό τύπων 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

Οδηγίες

Σε αυτή την άσκηση, θα υλοποιήσεις τους μηχανισμούς ενός παιχνιδιού ρόλων. Ο χαρακτήρας ενός παίκτη αναπαρίσταται από τον παρακάτω τύπο:

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

Οι παίκτες σε αυτό το παιχνίδι πρέπει να φτάσουν στο επίπεδο 10 προτού ξεκλειδώσουν μια δεξαμενή mana, ώστε να μπορούν να αρχίσουν να ρίχνουν ξόρκια. Δουλεύεις πάνω σε δύο κομμάτια λειτουργικότητας σε αυτό το παιχνίδι: τον μηχανισμό αναβίωσης και τον μηχανισμό ρίψης ξορκιών.

1. Παρουσιάσου

Γράψε το περιεχόμενο της συνάρτησης introduce. Οι παίκτες που κινούνται στα κρυφά μπορεί να κρύβουν το όνομά τους και θα παρουσιάζονται ως "Mighty Magician". Διαφορετικά, χρησιμοποίησε απλώς το όνομά σου για να συστηθείς.

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

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

2. Υλοποίησε τον μηχανισμό αναβίωσης

Η συνάρτηση revive θα πρέπει να ελέγχει ότι ο χαρακτήρας του παίκτη είναι πράγματι νεκρός (η υγεία του έχει φτάσει στο 0). Αν είναι, θα πρέπει να επιστρέφει ένα νέο στιγμιότυπο Player με 100 υγεία. Διαφορετικά, αν ο χαρακτήρας του παίκτη δεν είναι νεκρός, η συνάρτηση revive επιστρέφει Nothing.

Αν το επίπεδο του παίκτη είναι 10 ή παραπάνω, θα πρέπει επίσης να αναβιώνει με 100 mana. Αν το επίπεδο του παίκτη είναι κάτω από 10, το mana του θα πρέπει να είναι Nothing. Η συνάρτηση revive θα πρέπει να διατηρεί το επίπεδο του παίκτη.

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

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

Αν η μέθοδος revive κληθεί σε έναν παίκτη του οποίου η υγεία είναι 1 ή παραπάνω, τότε η συνάρτηση θα πρέπει να επιστρέφει Nothing.

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

revive alivePlayer
    --> Nothing

3. Υλοποίησε τον μηχανισμό ρίψης ξορκιών

Η συνάρτηση castSpell παίρνει ως ορίσματα ένα Int που δείχνει πόσο mana κοστίζει το ξόρκι, καθώς και έναν Player. Επιστρέφει τον ενημερωμένο παίκτη, καθώς και το ποσό της ζημιάς που προκαλεί το ξόρκι που ρίχτηκε. Ένα επιτυχημένο ξόρκι προκαλεί ζημιά ίση με το διπλάσιο του κόστους mana του ξορκιού. Ωστόσο, αν ο παίκτης δεν έχει αρκετό mana, δεν συμβαίνει τίποτα: ο παίκτης μένει αμετάβλητος και δεν προκαλείται ζημιά. Αν ο παίκτης δεν έχει καν δεξαμενή mana, η προσπάθεια να ρίξει το ξόρκι πρέπει να μειώσει την υγεία του κατά το κόστος mana του ξορκιού και δεν προκαλεί ζημιά.

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

( updatedWizard, damage ) = castSpell 14 wizard

updatedWizard.mana --> Just 16
damage             --> 28
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Elm Exercism

Έτοιμος να ξεκινήσεις την άσκηση Παιχνίδι Ρόλων;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις Elm με 28 έννοιες110 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.