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

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

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

Εισαγωγή

Επιλογές

Ο τύπος Option χρησιμοποιείται για να αναπαραστήσει τιμές που μπορεί είτε να απουσιάζουν είτε να υπάρχουν.

Ορίζεται στην ενότητα gleam/option ως εξής:

type Option(a) {
  Some(a)
  None
}

Ο κατασκευαστής Some χρησιμοποιείται για να τυλίξει μια τιμή όταν αυτή υπάρχει, και ο κατασκευαστής None χρησιμοποιείται για να αναπαραστήσει την απουσία μιας τιμής.

Η πρόσβαση στο περιεχόμενο ενός Option γίνεται συχνά μέσω αντιστοίχισης προτύπων.

import gleam/option.{type Option, None, Some}

pub fn say_hello(person: Option(String)) -> String {
  case person {
    Some(name) -> "Hello, " <> name <> "!"
    None -> "Hello, Friend!"
  }
}
say_hello(Some("Matthieu"))
// -> "Hello, Matthieu!"

say_hello(None)
// -> "Hello, Friend!"

Η ενότητα gleam/option ορίζει επίσης μια σειρά από χρήσιμες συναρτήσεις για να δουλεύεις με τύπους Option, όπως η unwrap, η οποία επιστρέφει το περιεχόμενο ενός Option ή μια προεπιλεγμένη τιμή αν αυτό είναι None.

import gleam/option.{type Option}

pub fn say_hello_again(person: Option(String)) -> String {
  let name = option.unwrap(person, "Friend")
  "Hello, " <> name <> "!"
}

Οδηγίες

Ο Josh εργάζεται πάνω σε ένα νέο παιχνίδι ρόλων και χρειάζεται τη βοήθειά σου για να υλοποιήσεις μερικούς από τους μηχανισμούς του.

1. Παρουσίασε τον εαυτό σου

Υλοποίησε τη συνάρτηση introduce.

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

introduce(Player(name: None, level: 2, health: 8, mana: None))
// -> "Mighty Magician"

introduce(Player(name: Some("Merlin"), level: 2, health: 8, mana: None))
// -> "Merlin"

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

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

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

let dead_player = Player(name: None, level: 2, health: 0, mana: None)

revive(dead_player)
// -> Some(Player(name: None, level: 2, health: 100, mana: None))

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

let alive_player = Player(name: None, level: 2, health: 42, mana: None)

revive(alive_player)
// -> None

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

Η συνάρτηση cast_spell παίρνει ως ορίσματα ένα Int που δείχνει πόσο mana κοστίζει το ξόρκι, καθώς και έναν Player. Επιστρέφει τον ενημερωμένο παίκτη, καθώς και το ποσό της ζημιάς που προκαλεί το ξόρκι που ρίχτηκε. Μια επιτυχημένη ρίψη ξόρκιου προκαλεί ζημιά ίση με το διπλάσιο του κόστους mana του ξόρκιου. Ωστόσο, αν ο παίκτης δεν έχει αρκετό mana, δεν συμβαίνει τίποτα, ο παίκτης μένει αμετάβλητος και δεν προκαλείται ζημιά. Αν ο παίκτης δεν έχει καθόλου mana, η προσπάθεια να ρίξεις το ξόρκι πρέπει να μειώσει την υγεία του κατά το κόστος mana του ξόρκιου και δεν προκαλεί ζημιά. Έχε υπόψη ότι η υγεία του παίκτη δεν μπορεί να είναι κάτω από το μηδέν (0).

let wizard = Player(name: None, level: 18, health: 123, mana: Some(30))
let #(wizard, damage) = cast_spell(wizard, 14)

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

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

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