Přehled

Na konci dobrodružství přijde přehled: kolik úkolů je splněných, otevřených a neúspěšných a kolik má Kira zlata, když se k němu přičtou odměny za splněné úkoly.

K počítání potřebujete číslo pro každý stav, tedy objekt s jedním klíčem pro každý stav, a na to je Record z lekce Modelování dat. Stavy přitom nemusíte psát znovu: Ukol["stav"] z minulé lekce je sjednocení všech stavů. Třeba příšery v jeskyni, spočítané podle druhu:

type Prisera = { druh: "skret" | "vlk" | "troll"; jmeno: string };

const jeskyne: Prisera[] = [
    { druh: "skret", jmeno: "Grub" },
    { druh: "vlk", jmeno: "Šedák" },
    { druh: "skret", jmeno: "Snag" },
];

const pocty: Record<Prisera["druh"], number> = { skret: 0, vlk: 0, troll: 0 };
for (const prisera of jeskyne) {
    pocty[prisera.druh]++;
}
console.log(pocty);
console.log(`Skřeti: ${pocty.skret}`);

Vypíše:

{ skret: 2, vlk: 1, troll: 0 }
Skřeti: 2

pocty[prisera.druh] použije druh jako klíč, takže každá příšera přičte jedničku ke svému počtu. TypeScript hlídá, že objekt má všechny klíče. Ve vašem programu by bez neuspesny: 0 ohlásil main.ts(122,7): error TS2741: Property 'neuspesny' is missing in type '{ otevreny: number; splneny: number; }' but required in type 'Record<"neuspesny" | "otevreny" | "splneny", number>'. A kdyby do typu Ukol někdy přibyl nový stav, ohlásí i tenhle objekt.

Teď zlato. Odměnu má jen splněný úkol, takže čtení ukol.odmena bez kontroly je chyba:

main.ts(126,36): error TS2339: Property 'odmena' does not exist on type 'Ukol'.
  Property 'odmena' does not exist on type '{ stav: "otevreny"; nazev: string; }'.

Uvnitř if (ukol.stav === "splneny") TypeScript zúží úkol na splněný a ukol.odmena je v pořádku. Kira je v konstantě, ale zlato jí změnit můžete: const jen znamená, že proměnná drží pořád tentýž objekt.

Pokyny

V hlavním programu nad cyklus přes úkoly vytvořte konstantu pocty typu Record<Ukol["stav"], number> s nulou pro každý stav.

V cyklu přičtěte jedničku k počtu stavu každého úkolu. Za cyklem počty vypište:

Splněné: 2, otevřené: 1, neúspěšné: 1

Ve stejném cyklu přičtěte Kiře ke zlatu odměnu za každý splněný úkol. Úplně na konci vypište ještě jednou řádek o Kiře. Program končí takto:

Splněné: 2, otevřené: 1, neúspěšné: 1
Kira (hranicar), úroveň 3, životy 50/50, zlato 200

Kira má životy z lektvaru a zlato ze dvou úkolů. Pokud má pořád 120 zlatých, vypisujete ji před cyklem.

Začněte programovat zdarma

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

Nebo se registrujte pomocí:

6/7