Používání předmětů

Předměty jsou od toho, aby se používaly: lektvar Kiru vyléčí, zbraň si vezme do ruky a klíč něco otevře. Použití předmětu hrdinu mění, takže ho funkce dostane jako parametr a mění jeho vlastnosti. Objekty se při předání funkci nekopírují, a změny se proto projeví přímo na kira.

Kam si Kira dá zbraň, kterou drží v ruce? Do nové vlastnosti zbran. Na začátku dobrodružství má ruku prázdnou, takže vlastnost bude nepovinná, jako v lekci o typech objektů: zbran?: Zbran. Třeba hraničářka a její zvířecí společník:

type Zvire = { jmeno: string; druh: string };

interface Hranicar {
    jmeno: string;
    zvire?: Zvire;
}

function ochoc(hranicar: Hranicar, zvire: Zvire): string {
    hranicar.zvire = zvire;
    return `${hranicar.jmeno} ochočí zvíře: ${zvire.druh} ${zvire.jmeno}`;
}

const ema: Hranicar = { jmeno: "Ema" };
console.log(ema.zvire?.jmeno ?? "žádné zvíře");
console.log(ochoc(ema, { jmeno: "Stín", druh: "vlk" }));
console.log(ema.zvire?.jmeno ?? "žádné zvíře");

Vypíše:

žádné zvíře
Ema ochočí zvíře: vlk Stín
Stín

Funkce pouzijPredmet je switch podle predmet.druh, stejně jako popisPredmet, jen některé případy hrdinu nejdřív změní a teprve pak vrátí text:

  • Lektvar přičte predmet.leceni k životům. Když jich je pak víc než maxZivoty, nastaví je na maxZivoty: Kira má 34 životů, lektvar léčí 20 a 54 by bylo víc než jejích 50.
  • Zbraň si vezme do ruky: hrdina.zbran = predmet;. Funguje to jen uvnitř case "zbran", kde TypeScript ví, že předmět je Zbran. Nad příkazem switch by předmět mohl být jakéhokoli druhu a TypeScript by ohlásil:
    main.ts(46,5): error TS2322: Type 'Predmet' is not assignable to type 'Zbran | undefined'.
      Property 'poskozeni' is missing in type 'Klic' but required in type 'Zbran'.
  • Klíč nic nemění, jen vrátí Kira otevře kryptu.

I tady napište návratový typ string. TypeScript pak zkontroluje, že každý case vrací text. A jak uvidíte v posledním kroku, ohlásí i druh předmětu, pro který case chybí, a to i bez kontroly úplnosti: funkce by skončila, aniž by vrátila text.

V hlavním programu je kira.inventar[0] první předmět (lektvar) a kira.inventar[1] druhý (meč). Kiřino jmeno je jen pro čtení, ale to nevadí: pouzijPredmet ho jen čte.

Pokyny

Do rozhraní Hrdina přidejte nepovinnou vlastnost zbran typu Zbran.

Pod popisPredmet napište funkci pouzijPredmet(hrdina: Hrdina, predmet: Predmet): string se switch podle predmet.druh. Pro lektvar vrátí Kira vypije Léčivý lektvar: životy 50/50 (jméno hrdiny, název předmětu a nové životy), pro zbraň Kira si vezme Stříbrný meč a pro klíč Kira otevře kryptu.

Na konci hlavního programu Kira použije své první dva předměty: vypište pouzijPredmet(kira, kira.inventar[0]) a pouzijPredmet(kira, kira.inventar[1]). Program končí takto:

- Starý klíč (otevírá kryptu)
Kira vypije Léčivý lektvar: životy 50/50
Kira si vezme Stříbrný meč

Pokud má Kira 54/50, lektvar ji vyléčil nad maximum.

Začněte programovat zdarma

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

3/7