9. Petřík v bludišti <<< Obsah >>> 11. Samá příšera


10. Ovládání klávesnicí

Zůstaneme ještě u programu Cesta z minulé kapitoly. Program upravíme tak, abychom Petříka v bludišti ovládali klávesnicí, namísto aby hledal cestu sám. Budeme zkoušet více metod ovládání, necháme si je všechny v programu uschované pro možnost porovnání. Uschováme si i metodu, ve které Petřík hledá východ sám.

Přetáhněte do hlavního cyklu programu ze skupinky řízení programu prvek skupina . Přemístěte do něj všechny příkazy, které jsou nyní v hlavním cyklu: prvek otočení vpravo, cyklus pro nalezení průchodného políčka a příkaz pro provedení kroku. Skupinu sklapněte a připište k ní poznámku Petřík jde sám. Tím jsme si metodu automatického vyhledání východu uschovali do jedné skupiny, aby se nám "nepletla dohromady" s ostatními metodami, které budeme vytvářet. Zkuste program pro kontrolu spustit. Měl by fungovat stejně jako před úpravou.

Novou skupinu vyberte jedním kliknutím myší na její ikonku. Na panelu nástrojů zapněte tlačítko Vypnout . Skupina i všechny prvky v ní zešednou. Tato funkce nám umožňuje vypínat části programu, pokud je zrovna v programu nepotřebujeme. Když program spustíte, uvidíte, že Petřík pouze stojí v levém dolním rohu a nic se neděje. Program se chová tak, jakoby tam skupina s příkazy vůbec nebyla.

Naši novou část programu budeme konstruovat uvnitř hlavního cyklu programu, hned pod předcházející skupinou. Využijeme nový konstrukční prvek - vícestupňové větvení příkazů (mezi programátory někdy označován jako "hrábě"). Je ve skupince řízení programu . Položte ho do hlavní smyčky pod skupinu Petřík jde sám.

Vícestupňové větvení příkazů slouží k větvení programu na více částí v závislosti na hodnotě proměnné či výrazu. Obvyklým použitím je větvení podle číselné hodnoty. Později budeme větvení používat i pro jiné typy dat, jako například texty.

Prvek větvení obsahuje další čtyři prvky. Do prvního prvku, pro hodnotu výrazu , vkládáme proměnnou či výraz, podle kterého se má větvení provést. My sem umístíme prvek vstup klávesy (čeká na stisk) , který bude větvící konstrukci předávat číselný kód stisknuté klávesy.

Následují dva spojené prvky - proveď příkazy v případě, že a výraz je roven hodnotě . Jedná se o jednu větev větvící konstrukce. Do prvku výraz je roven hodnotě umisťujeme hodnotu, pro kterou budou příkazy ve větvi provedeny. Větví může být libovolné množství, stejně tak testovaných hodnot ve větvi může být libovolně. Celou větev proveď příkazy v případě, že zkopírujte ještě třikrát.

Máme teď čtyři větve větvící konstrukce. Do testované hodnoty v první větvi dáme ze skupinky ovládání , klávesnice , klávesy , řídicí klávesy kód klávesy nahoru . Tato větev se provede při stisku klávesy nahoru. Do příkazů větve dáme příkaz pro krok. Budeme hlídat, aby Petřík neprocházel přes zeď. Okraj plochy hlídat nemusíme, Petřík ven z plochy neuteče. Namísto jednoduchého kroku použijeme podmíněný příkaz. Do testu podmínky dáme porovnání předmětů, zda je před Petříkem zeď. Pokud ano, nebude se dít nic. Pokud ne, Petřík udělá krok.

Do dalších tří větví uvedeme postupně jako testované hodnoty klávesy vlevo , vpravo a dolů a jako příkazy prvky vlevo , vpravo a vzad .

Posledním prvkem větvící konstrukce je prvek jinak proveď příkazy . Jak napovídá název, příkazy v této části konstrukce se provedou tehdy, když testovaná hodnota nebude nalezena ani v jedné z větví. V našem případě zde nebude nic.

Spusťte program. Petřík stojí v levém dolním rohu. Vyzkoušíte-li kurzorové klávesy (šipky), zjistíte, že se Petřík otáčí vlevo, vpravo, vzad a dělá krok vpřed. Můžete Petříka vodit bludištěm. Až dorazíte k východu, Petřík se otočí na vás a po stisku další klávesy program skončí.

Použitý způsob ovládání je ovládání typické pro auta. Používáme ho v případech, kdy potřebujeme pohybovaným objektem přesně otáčet do požadovaného směru, ale není tak důležitá rychlost pohybu po ploše (manipulovatelnost).

V případech, kdy je potřeba se rychle a snadno přemisťovat, použijeme následující způsob ovládání. Řídíme v něm ne otáčení postavy, ale popocházení ve směru šipky.

Zkopírujte pravým tlačítkem myši předešlou větvící konstrukci ještě jednou níže. Původní konstrukci vypněte tlačítkem Vypnout . Novou konstrukci nazvěte ovládání Petříka směry. Z větví vyhoďte příkazy pro otáčení vlevo, vpravo a vzad.

První větev větvící konstrukce (pro šipku nahoru) upravíme tak, aby se Petřík otočil nahoru a udělal krok. Krok máme již připraven - kontroluje se v něm, zda před Petříkem není zeď. Směr otočení Petříka nastavíme pomocí prvku směr . Najdete ho v rozšířených funkcích Petříka. Prvek vložte před podmínku k provedení kroku Petříka. Jako parametr připojte prvek nahoru (1/2 pi, tj. 90 stupňů) , je ve skupince výpočty , podskupince úhel, směr .

Vytvořte příkazy pro nastavení směru i v ostatních větvích větvící konstrukce, směry změňte odpovídajícím způsobem podle směru šipek. Příkaz pro opatrné provedení kroku bychom mohli zkopírovat z první větve, ale raději použijeme funkci.

Co je funkce? Funkce je prvek, který obsahuje část programu. Namísto vícenásobného výskytu shodné části programu použijeme vícekrát funkci, která potřebnou část programu vykoná. Program se zpřehlední a budou se nám snáze provádět změny.

Novou funkci vytvoříme přetažením prvku funkce z okna Knihovna proměnných a funkcí do okna Společné proměnné a funkce. Funkci pojmenujte Opatrný krok vpřed. Když dvakrát kliknete na ikonku funkce, objeví se prázdné editační okno, funkce zatím neobsahuje žádné příkazy.

Mohli bychom teď ve funkci vytvořit příkaz pro krok, ale my si to usnadníme, protože máme tento příkaz již v programu vytvořený. Přepněte se zpět do hlavní funkce programu (tlačítkem Předešlá editace ) a najděte podmíněný příkaz s testem zdi a krokem vpřed (je ve větvi pro šipku nahoru). Kliknutím na ikonku podmíněný příkaz označte. Klikněte na tlačítko Kopie (nebo na klávesnici stiskněte Ctrl+C). Označená větev programu se uschová do schránky k přenášení dat.

Vraťte se do funkce Opatrný krok vpřed (tlačítkem Následující editace ). Klikněte na tlačítko Vložit (nebo stiskněte Ctrl+V). V okně se objeví přenášená část programu.

Teď již můžeme z větve pro šipku nahoru podmíněný příkaz vyhodit a nahradit ho funkcí pro opatrný krok. Doplníme ji i do ostatních větví za příkazy nastavení směru.

Program můžete spustit a vyzkoušet. Jak vidíte, Petřík teď popojde o krok ve směru stisknuté klávesy šipky.

Do třetice všeho dobrého si vyzkoušíme ještě jednu metodu ovládání, kterou budeme používat u složitějších a dokonalejších her. Možná jste si všimli, že držíte-li u předešlých dvou metod chvíli klávesu, Petřík se pohybuje i potom, co jste již klávesu dávno pustili. Příčinou je rychlejší generování kódů držených kláves, než je schopen Petřík popocházet, a tak se klávesy uchovávají v zásobníku kláves. Jistým řešením je příkaz vyprázdnění zásobníku kláves , který zruší klávesy uchované v zásobníku kláves. Použijeme ho vždy na začátku každé obsluhy platného znaku z klávesnice před provedením kroku Petříka.

Další nectnost, která nám může u předešlých dvou metod ovládání vadit, se projevuje při ovládání rychlých dějů nebo při jemném grafickém ovládání. Zkuste si v nastavení sprajtu Petříka změnit počet fází na krok na 1 (po zkoušce vraťte zpět na 8). Petřík bude rychle přeskakovat po políčkách. Když na delším volném úseku klávesu chvíli podržíte, Petřík poskočí nejdříve o políčko, chvíli čeká a až pak začne rychle přeskakovat na další políčka. Příčinou tohoto jevu je způsob generování znaků klávesnicí - prodleva po první klávese a potom opakování. Při psaní textů je tato vlastnost užitečná, ale při hraní her nám může trochu vadit.

Náš požadavek na ovládání klávesnicí je, aby se Petřík pohyboval vždy, když držíme klávesu. Bez úvodních prodlev a bez setrvačnosti po uvolnění klávesy. K tomuto účelu slouží funkce je stisknuta klávesa ze skupinky klávesnice . Funkce otestuje požadovanou klávesu, zda ji uživatel drží, a navrátí příznak ano/ne.

Nejdříve opět vypněte předešlou metodu tlačítkem Vypnout . Pod ni připravte prvek podmíněné provedení příkazů , můžete ho nazvat třeba ovládání Petříka držením kláves. Do testu podmínky platí-li, že vložte prvek je stisknuta klávesa , jako parametr k němu připojte klávesu nahoru . Do větve platnosti podmínky potom proveď vložte příkazy pro popojítí nahoru, tak jako u předešlého typu ovládání. Konstrukci teď čteme: "Je-li držena klávesa nahoru, potom se otoč nahoru a opatrně popojdi o krok, jinak pokračuj testem dalších kláves."

Ve větvi neplatnosti podmínky jinak proveď vytvořte stejnou konstrukci znovu, tentokrát ale pro směr vlevo. V její větvi neplatnosti podmínky vytvořte obsluhu směru vpravo a nakonec vytvořte obsluhu směru dolů. Do větve neplatnosti podmínky v obsluze směru dolů vložte příkaz čekání (bez zadání = 0.05 s) , najdete ho ve skupince řízení programu . Značka malého rovnítka před ikonkou čekání indikuje nepovinnost parametru příkazu, žádný parametr nemusíme doplňovat.

Proč příkaz čekání? Operační systém Windows je víceúlohový. To znamená, že současně může být v chodu více programů. Každý program by měl zajistit, aby zbytečně nespotřebovával výkon počítače, když to nutně nepotřebuje. Známkou dobrého programátora je slušné chování jeho programů v prostředí, ve kterém poběží. Zkušení uživatelé si mohou spustit systémový program Sledování systému a sledovat zatížení procesoru. Program neberoucí ohled na své okolí zabírá téměř celý výkon počítače a počítač se tak stává těžce ovladatelný.

Na obrázku vidíte hotovou obsluhu ovládání Petříka. Části pro obsluhu kroku v daném směru jsou sklapnuty, známe je již z předešlého ovládání.

Nevýhodou takového dlouhého řetězce podmínek je, že může být na první pohled nepřehledný. Ukážeme si ještě jinou možnost stavby podobné konstrukce.

Vypněte naši poslední variantu tlačítkem Vypnout . Zkopírujte si znovu variantu ovládání Petříka směry a přejmenujte ji na ovládání držením kláves 2. Podmínková konstrukce pracovala tak, že se provedla právě jedna z větví v závislosti na stisknuté klávese. Z prvku pro hodnotu výrazu zrušte funkci vstupu z klávesnice a nahraďte ji prvkem ano (ze skupinky výpočty , logické operace ).

V testovaných hodnotách jednotlivých větví postupně nahraďte kódy kláves kombinacemi prvku je stisknuta klávesa a kódu klávesy. Postupujte následovně: Kliknutím myší na ikonu kódu klávesy prvek kódu klávesy vyberte. Stiskem tlačítka Vyjmout (nebo z klávesnice Ctrl+X) přesuňte prvek kódu klávesy do schránky. Na jeho původní místo vložte prvek je stisknuta klávesa . Vyberte ho myší a stiskněte tlačítko Vložit (nebo z klávesnice Ctrl+V). Kód klávesy se připojí k testu stisku klávesy. Závěrem doplňte do prvku jinak proveď příkazy prvek čekání (bez zadání = 0.05 s) , jinak by program ve volných chvílích přetěžoval chod počítače.

Hotovou konstrukci vidíte na dalším obrázku. Jak funguje? Program při svém chodu na začátku zjistí, že ve větvích bude testována logická hodnota platnosti. Prochází jednotlivé větve a hledá stejnou hodnotu, tedy platnou podmínku. Příkazy v nalezené větvi provede a pokračuje až za celou konstrukcí vícestupňového větvení příkazů, dalších případných splněných podmínek a větví si již nevšímá. Jinak řečeno, vykoná se první (a jediná) větev se splněnou podmínkou (stisknutou klávesou), jinak se vykoná až poslední z příkazů - čekání.


9. Petřík v bludišti <<< Obsah >>> 11. Samá příšera