Jdeme na to s Urwigem - 12. Rozhodování II. (Podmínky)

Dnes si dokončíme povídání o rozhodování, které jsme načali minule. To jsme si řekli, jaké typy rozhodování nám Urwigo nabízí, teď je na řadě, abychom si ukázali, jak se tvoří podmínky, které jsou nedílnou součástí většiny rozhodování.

K tomu nám slouží některé nabídky z levého panelu Výrazy. Začněme tedy přetahovat.

Porovnej

Jeden z nejzákladnějších typů podmínek. Umožňuje nám porovnat hodnoty dvou proměnných, vlastností nebo obecně výrazů. Po jejím přetažení do diagramu se rozdělí na dvě části - levou a pravou, mezi nimiž je porovnávací znaménko. Na rozdíl od akce Nastavit, je u Porovnej jedno, co na kterou stranu umístíme. Obě strany porovnání jsou rovnocenné a mohou obsahovat proměnné, vlastnosti objektů, hodnoty nebo složitější výpočty. Je jenom na nás, jestli vytvoříme podmínku „proměnná > 5“ nebo „5 < proměnná“, obojí dává stejný výsledek.

Parametry porovnání můžeme nastavit v pravém panelu vlastností. Co budeme nejspíš měnit především, je tzv. operátor, neboli porovnávací znaménko. Máme na výběr z těchto možností: rovná se (=), nerovná se (≠), menší (<), větší (>), menší nebo rovno (≤), větší nebo rovno (≥). Jak vidíme, jedná se o matematická znaménka rovnosti a nerovnosti.

Porovnávání textů

Pokud budeme porovnávat číselné hodnoty, je asi všechno jasné. Výraz Porovnej však funguje i na porovnávání textových údajů. To se ale od porovávání čísel mírně liší, tak by nebylo na škodu si o tom něco povědět:

  • Porovávání se provádí podle umístění písmene v abecedě - čím blíže jejímu konci se písmeno nachází, tím je větší. Takže „B“ > „A“, „Z“ > „C“ apod. Malá písmena jsou při porovávání větší než velká písmena (zní to divně, ale je to tak), takže „b“ > „a“, „z“ > „c“, ale „a“ > „Z“, „a“ > „A“. Číslice se porovnávají stejně jako u čísel, takže „0“ < „1“, „1“ < „2“, ... „8“ < „9“, zároveň jsou však menší než písmena, takže „9“ < „A“, „9“ < „a“.
  • U víceznakových textů probíhá porovnání podobně: Nejprve se porovnají první znaky, v případě rovnosti se porovnají druhé znaky, v případě jejich rovnosti přijdou na řadu třetí atd. Takže „AB“ > „AA“, „ACA“ < „ACB“ apod. Pokud mají porovnávané texty různou délku a jinak jsou shodné, pak je za větší považován delší text, tedy „AA“ < „AAA“, ale „B“ > „ABCD“ (podle prvních znaků).

A tady dobrý pozor! Vzhledem k výše uvedenému je rozdíl, jestli číselné hodnoty porovnáváme jako čísla nebo jako texty. Platí totiž, že 2 < 10 (matematicky správně), ale „2“ > „10“ (textové porovnávání, nejprve se porovnávají první znaky)!

A co ostatní znaky? Samozřejmě, že se dají porovnávat i jiné znaky než číslice a písmena. To, jestli je jeden znak větší nebo menší než druhý, vyplývá z jejich pozice v ASCII tabulce znaků. Znak s nižším ASCII kódem je menší, než znak s vyšším ASCII kódem. Takže např. „!“ < „?“ a „!“ < „9“, ale „?“ > „9“ atd.

Velká a malá písmena

Jak už jsme si před chvílí ukázali, velká a malá písmena mají při porovnávání jinou hodnotu, tedy např. „a“ je větší než „A“. To znamená, že „Alena“ ≠ „ALENA“ ≠ „alena“. V běžných programovacích jazycích si na tento fakt musíme dávat pozor. Urwigo však v tomto směru myslí trochu za nás. Podívejte se ještě jednou na pravý panel vlastností. Pod položkou Operátor uvidíte zaškrtávací box s názvem Ignorovat velikost písmen, který je automaticky zaškrtnutý. To znamená, že v tomto porovnávání se velikost písmen nebude brát v potaz a bude platit, že „Alena“ = „ALENA“ = „alena“. Pokud zaškrtnutí zrušíme, pak toto porovnávání velikost písmen rozlišovat bude.

Tato vymoženost ovšem byla v předchozích verzích Urwiga zdrojem pádů aplikace v určitých specifických případech souvisejících s uživatelským vstupem. Sice by měla být od verze 1.12 opravena, ale v části věnované vstupům se o ní radši zmíníme.

Nemíchejte hrušky s jablky

Při porovnávání je potřeba mít na paměti, že lze porovnávat vždy pouze hodnoty stejných typů - čísla s čísly a texty s texty. Pokud bychom na jednu stranu porovnávání přesunuli číslo a na druhou stranu text, Urwigo nám ohlásí chybu.

A zároveň, Nebo

Ne vždy se nám při návrhu hry podaří vystačit pouze s jednoduchými podmínkami typu větší, menší, rovná se, nerovná se. Někdy budeme nuceni vytvářet podmínky složitější, ve kterých budeme kombinovat několik jednoduchých podmínek dohromady. Například můžeme chtít napsat podmínku ve tvaru proměnná > 5 A ZÁROVEŇ text = „ok“, případně proměnná = 5 NEBO proměnná = 7. V prvním případě bude podmínka splněná pouze tehdy, pokud budou zároveň platit obě dílčí podmínky, ve druhém případě pak bude stačit, aby byla splněna pouze jedna z nich (anebo obě současně, to se nevylučuje).

Urwigo nám k tomu nabízí dva výrazy příznačně pojmenované A zároveň a Nebo. V obou případech je postup stejný - po přetažení do diagramu musíme dovnitř přetáhnout ještě minimálně dva výrazy (např. Porovnej). Tyto výrazy pak budou vyhodnoceny pomocí „A ZÁROVEŇ“, případně „NEBO“.

A aby situace byla ještě zamotanější, můžeme výrazy A zároveň, Nebo a Porovnej do sebe navzájem vnořovat a vytvářet tak komplikované rozhodovací struktury. Nemějte starost, ať budou podmínky sebekomplikovanější, Urwigo (tedy resp. wherigo) se v nich zaručeně vyzná. Otázkou je, jestli se v nich vyznáte vy. Mohlo by se pak stát, že wherigo bude dělat přesně to, co jste mu zadali, ale nebude to to, co jste chtěli. Proto to aspoň zpočátku se složitými podmínkami moc nepřehánějte. Volte takové, abyste se v nich sami vyznali a abyste přesně věděli, co se v který okamžik stane.

Obsahuje

Pomocí tohoto výrazu můžeme zjišťovat, jestli hráč, nějaká zóna, postava nebo věc má ve svém inventáři zjišťovaný objekt (věc nebo postavu). To se v hrách docela často používá. Např. pokud má hráč ve svém inventáři česnek, upíři ho nenapadnou.

Po přetažení výrazu do diagramu je rozdělen na dvě části - levou a pravou. (To už tu bylo, ne? Bylo a ještě několikrát bude!) Do levé části musíme přetáhnout objekt, jehož inventář chceme prozkoumat (v příkladu výše by to byl „Hráč“), do pravé části pak musíme přetáhnout objekt, který nás v inventáři zajímá (v příkladu výše by to byl „Česnek“). Takto označená větev se vykoná, pokud objekt uvedený v levé části má ve svém inventáři objekt uvedený v pravé části (tedy pokud „Hráč“ má ve svém inventáři „Česnek“).

Samozřejmě můžeme výraz Obsahuje kombinovat i s výrazy A zároveň, případně Nebo. Například pokud hráč vlastní předmět „Detektor zla“, měl by být upozorněn, pokud vstoupí do zóny, kde se nachází nějaký „Duch“. Pak by podmínka příslušné větve mohla vypadat: „Hráč“ obsahuje „Detektor zla“ A ZÁROVEŇ Aktuální zóna obsahuje „Duch“.

Vzdálenost k zóně

Tento výraz nám umožňuje větvit hru podle toho, v jaké vzdálenosti od nějaké zóny se hráč právě nachází. Po přetažení výrazu do diagramu do něj musíme ještě přetáhnout zónu, jejíž vzdálenost nás zajímá. V pravém panelu pak můžeme nastavit jednu z následujících možností:

  • Mimo dosah - podmínka je splněna, pokud se hráč nachází mimo dosah zóny (tj. není v zóně a je od ní vzdálen více, než je nastaveno v hodnotách V dosahu i V blízkosti).
  • V dosahu, V blízkosti - podmínka je splněna, pokud je hráč od zóny vzdálen na menší vzdálenost než je nastaveno v hodnotách V dosahu nebo V blízkosti.
  • Uvnitř - podmínka je splněna, pokud je hráč uvnitř zóny.
  • Hodnota - podmínka je splněna, pokud je hráčova vzdálenost od zóny rovna nebo menší než nastavená konkrétní hodnota. Při použití této volby však ještě musíme provést doplňující kroky:
    • V pravém panelu musíme v položce Jednotky zvolit délkovou jednotku, ve které budeme vzdálenost měřit. Máme na výběr metry, kilometry, stopy, míle a námořní míle.
    • Na levou stranu výrazu pak musíme přesunout výraz Hodnota a v něm v pravém panelu vyplnit konkrétní číselnou hodnotu vzdálenosti.

Cíl příkazu

Vzpomínáte si ještě, jak jsme si kdysi u postav a předmětů popisovali příkazy, u nichž je definován nějaký cíl? Nyní si ukážeme, jak toho konkrétně docílit. 

Do příslušné větve nejprve musíme přetáhnout výraz Porovnej, na jehož levou stranu následně přetáhneme výraz Cíl příkazu. Na pravou stranu pak přetáhneme objekt, který nás zajímá. Tento objekt musí být uveden mezi cíli příkazu, jinak Urwigo zahlásí varování. Výraz Cíl příkazu pak bude obsahovat konkrétní cíl zvolený hráčem. Podmínka tedy bude splněna, pokud hráč zvolil cíl, který je uveden na pravé straně porovnání.

 Vrátíme-li se tedy i k příkladu, který byl ve zmiňovaném pokračování uveden, mějme předmět „Zlatý klíč“, kterým lze odemknout pouze „Zlatý zámek“. V předmětu „Zlatý klíč“ tedy zadefinujeme příkaz „Odemknout“, u kterého zaškrtneme jako specifické cíle všechny zámky. V obslužném kódu pak můžeme vytvořit akci Když/jinak s podmínkou Porovnej Cíl příkazu = „Zlatý zámek“, kde bude kód pro případ, že hráč použije zlatý klíč na zlatý zámek. V předmětu „Stříbrný klíč“ pak můžeme v obdobném příkazu „Odemknout“ použít podmínku Porovnej Cíl příkazu = „Stříbrný zámek“.

V emulátoru

Jednoduchý výraz, který nevyžaduje žádné další nastavování. Podmínka je splněna, pokud je hra aktuálně přehrávána v emulátoru. Emulátor je součástí Urwiga a umožňuje autorovi otestovat logiku a chování hry, aniž by musel do terénu. Praktické využití tohoto výrazu si necháme na některé z dalších pokračování.

Závěrem

Jak jste si jistě všimli, neprobrali jsme si ještě všechny výrazy. To si ale necháme na příště. Pro dnešek se rozloučíme odpovědí na kontrolní otázku z minulého dílu: Pokud u obou větví náhodného rozhodnutí nastavíme váhu na 3, bude mít každá z nich pravděpodobnost uskutečnění 3/6 (50%). Odpověděli jste správně? Já věřím, že ano.

 

Pokračování: Jdeme na to s Urwigem - 13. Výrazy (dokončení)

VytisknoutE-mail

Komentáře mohou psát jen registrovaní uživatelé.