9. Petřík v bludišti <<< Obsah >>> 11. Samá příšera
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í.