Další výrazy

Navigace:  Výrazy (dokončení) >

Další výrazy

Předchozí stránkaNahoruDalší stránka

Nyní si popíšeme zbývající možnosti tvorby výrazů.

 

Hodnota

Jednoduchý výraz, který používáme v okamžiku, kdy potřebujeme někde uvést konkrétní (konstantní) hodnotu. Lze použít v akci Nastav, v podmínce Porovnej u akce Když/jinak, ve zprávách a dialozích (ukážeme si příště) apod.

Po přetažení výrazu do diagramu bude automaticky bez hodnoty, což je v diagramu signalizováno slovem není. V pravém panelu vlastností pak musíme nastavit konkrétní hodnotu. Je možné zvolit všechny podporované typy - text, číslo nebo logickou hodnotu (pravda [true] / nepravda [false]).

 

Některé akce už po svém přetažení na požadované místo automaticky zobrazí výraz Hodnota a bude stačit pouze vyplnit pravý panel. Mezi takové patří např. akce Nastavit - jakmile na levou stranu přiřazení přetáhnete proměnnou nebo vlastnost, na pravé straně se automaticky objeví výraz Hodnota.

 

Číselná operace

Tento výraz umožní vykonat některou ze základních operací s hodnotou číselného typu. Po přetažení do diagramu musíme v pravém panelu vlastností nastavit požadovanou operaci. Na výběr máme z těchto možností: součet, rozdíl, násobení, dělení, zbytek po dělení a umocnění. Potom je nutné dovnitř operace přetáhnout minimálně dva číselné výrazy, mezi nimiž má být provedena. Může to být buď Hodnota, proměnná nebo vlastnost číselného typu. Zvolená operace pak bude provedena mezi všemi přetaženými výrazy.

 

Chceme-li tedy k proměnné „Počet pokusů“ přičíst nějaké číslo, např. 1, můžeme použít číselnou operaci. Dovnitř přetáhneme nejprve proměnnou „Počet pokusů“ a potom výraz Hodnota, u kterého v pravém panelu nastavíme 1. V diagramu uvidíme uvnitř výrazu Číselná operace tento výsledek: „Počet pokusů + 1“. Určitě si pamatujete, že ke zvýšení hodnoty nějaké proměnné můžeme použít akci Přičti / odečti. Ano, je to tak, některé věci můžeme udělat více způsoby.

 

Jak už jsem zmínil, číselných výrazů může být i více než dva. Např. pokud hráč získal body z více různých úkolů a my chceme vypočítat, kolik bodů získal celkem. Použijeme tedy Číselnou operaci, do které přetáhneme proměnné „Body z úkolu 1“, „Body z úkolu 2“ a „Body z úkolu 3“. Výsledkem pak bude „Body z úkolu 1 + Body z úkolu 2 + Body z úkolu 3“.

 

Výraz Číselná operace můžeme vložit i dovnitř jiné číselné operace. Pokud chceme např. sečíst body ze tří různých úkolů a od výsledku odečíst počet chybných rozhodnutí, už to jednoduše nepůjde, protože nelze kombinovat více operací v rámci jednoho výrazu. Výsledek pak bude vypadat nějak takto: Číselná operace „Číselná operace "Body z úkolu 1 + Body z úkolu 2 + Body z úkolu 3" - Počet chyb“.

Urwigo - Číselná operace

 

Spoj

Tento výraz je obdobou výrazu Číselná operace určenou pro textové hodnoty. Dost často budeme potřebovat poskládat více textových hodnot do jedné. Typickým případem je oslovení hráče s využitím jeho jména. To je obsaženo v objektu Hráč a ve vlastnosti Jméno.

Takže pokud budeme chtít hráče oslovit způsobem „Vítej, mh.mail“, můžeme k tomu využít Spoj. Dovnitř výrazu postupně přetáhneme Hodnotu „Vítej, “ a vlastnost Hráč.Jméno. V diagramu pak uvidíme výsledek „Spoj "Vítej, " .. Hráč.Jméno“ (spojení textů je označeno dvěma tečkami „..“). Určitě vám neušlo, že takovéto oslovení není správně česky, protože jméno není uvedeno ve správném pádu. To je bohužel problém češtiny jako takové, nikoliv wheriga nebo Urwiga. Pokud se vám znásilňování češtiny nelíbí, musíte si tento způsob oslovení odpustit, vyřešit to tak, aby výsledek byl správně česky, je komplikované a výsledek nebude odpovídat vynaložené námaze.

 

Na co si však při spojování textů musíme dát velký pozor, je skutečnost, že texty jsou poskládány za sebou bez automatického vložení jakýchkoliv mezer nebo jiných oddělovacích značek. Pokud tedy spojíme texty „Hezké“ a „ráno“, vznikne „Hezkéráno“. To určitě není výsledek, který bychom chtěli. Proto si na umístění mezer musíme myslet sami. V tomto případě ji můžeme umístit buď na konec prvního nebo na začátek druhého textu. Asi je to jedno, ale já preferuji dávat mezery na konec předcházejících textů, spojoval bych tedy texty „Hezké “ a „ráno“ (snad je ta mezera navíc vidět).

Na oddělovací mezeru bychom neměli zapomenout ani v případě, že spojujeme dvě textové proměnné nebo vlastnosti. V takovém případě spojíme tři výrazy: první proměnnou, textovou hodnotu „ “ (mezera) a druhou proměnnou. Výsledkem pak bude „První proměnná .. " " .. Druhá proměnná“.

Urwigo - Spoj

 

Náhodné číslo

Dnes podruhé se obracím na pravidelné čtenáře odkazem na akci Náhodné rozhodnutí, o které jsem psal v kapitole o rozhodování. Podobnou funkci nám nabízí i výraz Náhodné číslo, který vrací náhodné číslo v rozmezí, které si určíme v pravém panelu vlastností po přetažení do diagramu. Standardně je uvedeno rozmezí od 0 do 1, což znamená, že výraz vrátí náhodně buď nulu nebo jedničku. Pokud to změníme na 1 až 20, bude výraz vracet náhodné číslo z tohoto intervalu.

 

Rozdíl mezi akcí Náhodné rozhodnutí a výrazem Náhodné číslo je ten, že Náhodné rozhodnutí rovnou podle náhodného výsledku větví kód, zatímco Náhodné číslo „pouze“ vrátí náhodné číslo a je na nás, jak s ním dále naložíme. Náhodné větvení kódu můžeme napsat i pomocí náhodného čísla, stejně tak můžeme některé věci vytvořit i pomocí náhodného větvení. Otázkou je, jak to bude komplikované. K některým úkolům se lépe hodí náhodné rozhodnutí, k jiným zase náhodné číslo. Akce Náhodné rozhodnutí má vynikající možnost nastavovat váhu jednotlivých variant, což sice dokážeme pomocí Náhodného čísla vyřešit také, ale bude to méně elegantní a více komplikované. Pomocí výrazu Náhodné číslo zase lépe napíšeme případ, kdy chceme do nějaké proměnné přičíst náhodný počet (např. kolik mincí hráč našel v truhle). I toto je možné vyřešit pomocí akce Náhodné rozhodnutí, ale bude to zbytečně složité. Nicméně výsledek může být stejný. Hráči je nakonec jedno, jak jsme k danému výsledku dospěli. Důležité je to pouze pro nás jako autory, abychom se ve výsledném kódu lépe orientovali a abychom si zbytečně nepřivodili nějaké nestandardní chování a chybu při přehrávání.

Urwigo - Náhodné číslo

 

Datum/Čas

Tento výraz umožní zjistit libovolnou část z akutálního data a času, což je údaj, který aktuálně „ukazují“ interní hodiny přístroje (telefonu, navigace). Výraz vrátí číslo, které představuje tu část, kterou jsme specifikovali v pravém panelu. Pokud budeme předpokládat, že aktuální datum a čas přístroje je 8. prosince 2013 23:16:54, dostaneme tyto výsledky:

 

Den - vrátí číslo dne v rámci měsíce, tj. 8.

Den v týdnu - vrátí číslo dne v rámci týdne, přičemž 1 je neděle, 2 pondělí, až 7 je sobota. V našem příkladu bude tedy vráceno číslo 1.

Den v roce - vrátí pořadové číslo dne v rámci roku, tj. 342.

Měsíc - vrátí číslo měsíce, tj. 12.

Rok - vrátí rok, tj. 2013.

Hodina - vrátí aktuální hodinu, tj. 23.

Minuta - vrátí aktuální minutu, tj. 16.

Sekunda - vrátí aktuální sekundu, tj. 54.

Hodina v týdnu - vrátí pořadí hodiny v rámci celého týdne. V našem příkladu to bude zase 23, protože týden v tomto případě začíná v neděli.

Hodina v měsíci - vrátí pořadí hodiny v rámci celého měsíce. V našem příkladu to je 215.

Hodina v roce - vrátí pořadí hodiny v rámci celého roku, tj. 8207.

Minuta ve dne, Minuta v týdnu, Minuta v měsíci, Minuta v roce - podobně vrátí pořadí minuty v rámci dne, týdne (opět startujeme nedělí), měsíce a roku.

Sekunda v hodině, Sekunda ve dni, Sekunda v týdnu, Sekunda v měsíci, Sekunda v roce - stejně tak můžeme získat pořadí sekundy v rámci hodiny, dne, týdne (počínaje nedělí), měsíce, roku.

 

Cachovaná hodnota

V pravém panelu najdeme také zaškrtávací políčko Cachovaná hodnota, které je standardně zaškrtnuté. Co to znamená? Představte si, že budeme chtít v diagramu události použít výraz Datum/Čas vícekrát (např. v různých rozhodovacích podmínkách). Je zřejmé, že mezi prvním a druhým použitím se aktuální čas změnil (např. jsme čekali, až si uživatel přečte zobrazenou zprávu). Jak to ale zařídit, pokud potřebujeme, abychom v obou případech porovnávali naprosto stejný čas (i co se týká sekund)? K tomu právě slouží políčko Cachovaná hodnota. Pokud je zaškrtnuté, pak se aktuální čas v rámci jednoho diagramu zjistí pouze jednou na začátku a uloží se do speciální proměnné a všechny ostatní výrazy Datum/Čas, které také používají cachovanou hodnotu, budou číst obsah této speciální proměnné, nikoliv nový aktuální čas. Tím zabezpečíme, že první použití výrazu Datum/Čas bude používat úplně stejný čas, jako třeba desáté.

 

Možná se vám to zdá trochu nesrozumitelné. Pokusím se to ukázat na příkladu: Mějme diagram, ve kterém zpracováváme vstup hráče do zóny. Na začátku se nějak rozhodneme podle toho, v jakém aktuálním čase hráč do zóny vstoupil. Pak mu zobrazíme zprávu, a až ji hráč odklepne, chceme se znovu rozhodnout na základě času jeho vstupu do zóny. Řekněme, že hráč hrál v noci a vstoupil do zóny v aktuálním čase 10.12.2013 23:58:45. První rozhodování tedy bude používat tuto hodnotu. Pak se zobrazila zpráva a hráč si ji nejdřív chvíli četl, pak mu někdo zavolal na mobil, telefonoval s ním, a když se hra dostala k dalšímu rozhodování, bylo již 11.12.2013 0:00:20. Je vidět, že ačkoliv chceme porovnat čas při vstupu hráče do zóny, ve skutečnosti porovnáváme čas úplně jiný (a to dokonce i jiný den, protože jsme se již přehoupli přes půlnoc). Pokud použijeme cachovanou hodnotu, při prvním použití výrazu Datum/Čas se aktuální čas (10.12.2013 23:58:45) uloží do speciální proměnné a při druhém porovnávání se zase použije bez ohledu na to, kolik hodin je ve skutečnosti. V obou případech tedy porovnáváme naprosto stejný čas, což je to, co jsme chtěli.

 

Cachovaná hodnota se vždy vztahuje pouze ke konkrétnímu diagramu. První použití cachovaného výrazu Datum/Čas v tomto diagramu způsobí uložení aktuálního času do speciální proměnné. Po opuštění diagramu je tato hodnota zapomenuta. V každém diagramu může být pouze jedna cachovaná hodnota, a to ta první. Nelze ji od nějaké části diagramu nahradit jinou. Můžeme ale zrušit zaškrtnutí políčka a v takovém případě dostaneme skutečný aktuální čas tohoto okamžiku. Pokud bychom potřebovali mít v jednom diagramu uloženo více časových okamžiků pro další použití, nebo potřebujeme, abychom uložený čas mohli použít ve více diagramech, musíme použít proměnné nebo využít služeb jazyka Lua.

 

Omezení hry na určité časové rozmezí

Mohlo by se zdát, že pomocí výrazu Datum/Čas by šlo realizovat omezení hry na určitý čas, např. pro denní / noční wherigo. Stačilo by otestovat, jestli aktuální čas spadá do nějakého intervalu, a pokud ne, tak hru ukončit. Teoreticky i technicky to samozřejmě řešitelné je, přesto si myslím, že to není dobrý nápad, a chtěl bych všechny autory wheriga od tohoto omezování odradit. Například už jenom kvůli faktu, že začátek a konec noci se mění a museli bychom mít implementován kalendář západů a východů slunce pro každý den v roce. A stejně nebudeme moci nikdy zaručit, že nebude zataženo a tma nezačne dříve, než by podle kalendáře měla. Jsou tu ale i jiná úskalí - např. nevíme, jaký čas bude konkrétní přístroj používat - zažil jsem i případ, kdy telefon bral čas podle časové zóny UTC a tvrdil, že musíme čekat ještě 2 hodiny. A navíc všechna tato omezení může hráč celkem jednoduše obejít - v telefonu stačí nastavit ručně hodiny na požadovaný čas a můžeme bez problémů hrát kdykoliv. Hráči s Oregonem jsou v tomto případě v nevýhodě, protože ten přebírá čas z GPS signálu a neumožňuje jeho ruční změnu.

V každém případě je každé podobné časové omezení zbytečné. Odehrání hry kdykoliv účinně nezabrání, pouze může zkomplikovat hráči situaci v některých situacích. Pokud nám záleží na tom, aby hráč hrál pouze v noci, umístěme na trasu třeba odrazky a nechme hráče kus jít pouze podle světlušek. Pokud chceme, aby hráč hrál pouze ve dne, nechme ho zjistit a zapsat informaci, která za tmy není viditelná. Úplně nejlepší ovšem bude, pokud žádné časové omezení hry nebudeme požadovat. Nechme hráče hru odehrát tehdy, kdy se jemu samotnému chce. Můžeme pouze uvést, že pro umocnění zážitku doporučujeme absolvovat za tmy, ale nesnažme se mu tento způsob vnutit.