ट्रैक
/
Gleam
Gleam
/
अभ्यास
/
रोल प्लेइंग गेम
रोल प्लेइंग गेम

रोल प्लेइंग गेम

सीखने का अभ्यास

परिचय

Option टाइप

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 मैकेनिक लागू कीजिए

revive फंक्शन को जाँचना चाहिए कि खिलाड़ी का पात्र सचमुच मर चुका है या नहीं (यानी उसकी हेल्थ 0 तक पहुँच गई है)। अगर ऐसा है, तो यह 100 हेल्थ वाला एक नया Player इंस्टेंस लौटाना चाहिए। वरना, अगर खिलाड़ी का पात्र मरा नहीं है, तो revive फंक्शन None लौटाता है।

अगर खिलाड़ी का लेवल 10 या उससे अधिक है, तो उसे 100 माना के साथ भी रिवाइव करना चाहिए। अगर खिलाड़ी का लेवल 10 से कम है, तो उसका माना वैसा ही रहना चाहिए। 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, जो बताता है कि स्पेल पर कितना माना खर्च होता है, और एक Player। यह अपडेट किया गया खिलाड़ी और उस स्पेल से हुए नुकसान की मात्रा, दोनों लौटाता है। सफल स्पेल कास्ट से स्पेल की माना लागत के दोगुने के बराबर नुकसान होता है। लेकिन अगर खिलाड़ी के पास पर्याप्त माना नहीं है, तो कुछ नहीं होता: खिलाड़ी वैसा ही रहता है और कोई नुकसान नहीं होता। अगर खिलाड़ी के पास माना पूल ही नहीं है, तो स्पेल कास्ट करने की कोशिश से उसकी हेल्थ स्पेल की माना लागत के बराबर घटनी चाहिए और कोई नुकसान नहीं होता। ध्यान रखिए कि खिलाड़ी की हेल्थ शून्य (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 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।