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

Szerepjáték

Tanulófeladat

Bevezetés

Opciók

Az Option típus olyan értékek ábrázolására szolgál, amelyek vagy jelen vannak, vagy hiányoznak.

A gleam/option modulban a következőképpen van definiálva:

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

A Some konstruktor egy értéket csomagol be, amikor az jelen van, a None konstruktor pedig egy érték hiányát jelöli.

Egy Option tartalmához gyakran mintaillesztéssel férünk hozzá.

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

A gleam/option modul számos hasznos függvényt is definiál az Option típusok kezeléséhez, például az unwrap-ot, amely visszaadja az Option tartalmát, vagy egy alapértelmezett értéket, ha az None.

import gleam/option.{type Option}

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

Utasítások

Josh egy új szerepjátékon dolgozik, és segítségre van szüksége a mechanikák egy részének megvalósításához.

1. Mutatkozz be

Valósítsd meg az introduce függvényt.

A lopakodó játékosok elrejthetik a nevüket, ilyenkor "Mighty Magician" néven mutatkoznak be. Egyébként egyszerűen a játékos nevével mutatkoztatjuk be őket.

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. Valósítsd meg az újraeleszté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, 100 életerejű Player példányt kell visszaadnia. Ha viszont a játékos karaktere nem halott, a revive függvény None-t ad vissza.

Ha a játékos szintje 10 vagy annál magasabb, 100 manával is újra kell éleszteni. Ha a játékos szintje 10 alatt van, a manája maradjon érintetlen. A revive függvénynek meg kell őriznie a játékos szintjét.

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))

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

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

revive(alive_player)
// -> None

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

A cast_spell függvény argumentumként egy Int-et kap, amely megmutatja, mennyi manába kerül a varázslat, valamint egy Player-t. Visszaadja a frissített játékost és azt a sebzést is, amelyet az elmondott varázslat okoz. 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, nem történik semmi: 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érlete a varázslat manaköltségével csökkenti az életerejét, és nem okoz sebzést. Tartsd észben, hogy a játékos életereje nem eshet nulla (0) alá.

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
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Gleam Exercism

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

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