7. Zahrádka s podmínkou <<< Obsah >>> 9. Petřík v bludišti
V dalším programu se naučíme používat podmíněné provádění příkazů. Petříka necháme procházet se po ploše okna, na které rozmístíme různé značky. Podle značek se bude rozhodovat, kterým směrem se vydá dále.
Ze všeho nejdříve založíme nový
program. Jak si jistě vzpomínáte z kapitoly 4, nový program
vytvoříme v okně programů pomocí tlačítka Nový .
Pojmenujeme si ho třeba Značky.
V programu budeme potřebovat dva
předměty, které použijeme jako značky. V okně Společné proměnné a
funkce zkopírujte pravým
tlačítkem myši prvek prázdné políčko
na dva nové předměty. Pojmenujte je Doleva a Doprava. Pro připomenutí: přejmenování provedete
například tak, že kliknutím myší na ikonu prvku prvek
vyberete a stiskem kláves Alt+Enter zahájíte editaci jména prvku.
Vyvolejte editaci nově
vytvořených předmětů dvojitým kliknutím levým tlačítkem
myši na ikonky předmětů. Do prvku Doleva nakreslete zatočenou šipku vlevo, do prvku Doprava zatočenou šipku vpravo, například takto: a
.
Připravíme si plochu okna. Dvakrát
klikněte na prvek označený plocha .
V editačním okně se objeví plocha programu. Vytvoříme cestu
pro Petříka. Na plochu naskládáme předměty Doleva a Doprava tak, aby Petřík, až se bude podle nich
řídit, mohl chodit po uzavřené dráze. Nezapomeňte, že
Petřík vychází z levého dolního rohu směrem doprava.
Předměty na ploše budeme rozmisťovat tak, že nejdříve
přetáhneme oba prvky z okna Společné proměnné a funkce někam na plochu, kde je položíme. Potom
levým tlačítkem myši předměty na ploše přemisťujeme,
pravým tlačítkem je kopírujeme. Nepotřebný předmět
zrušíte odhozením mimo plochu. Plocha může vypadat
například takto (cesta Petříka je vyznačena čárkovanou
čarou se šipkami):
Po přípravě plochy programu se
pustíme do konstrukce programu. Tentokrát začneme z opačného
konce - od hlavního cyklu. Petřík má za úkol neustále
chodit dokola po značkách, takže je zřejmé, že základem
programu bude nekonečná smyčka. Připravíme si proto do
programu prvek podmíněné
opakování příkazů . Ve skutečnosti
neuděláme smyčku nekonečnou, ale umožníme přerušit
program stiskem klávesy Esc.
K tomu si musíme nejprve povědět něco o klávesnici.
Každá klávesa na klávesnici při svém stisku vyšle do počítače svůj číselný kód, který je jakýmsi pořadovým číslem klávesy na klávesnici. Počítač tento číselný kód převede na znak a ten může předat programu například v podobě písmene či číslice. My máme v programu přístupné nejen znaky, ale také číselné kódy kláves. Funkci pro vstup znaků používáme k zadávání textů z klávesnice tak, jak to známe z běžného psaní textů (např. při držení Shift se generují velká písmena). Funkce pro vstup kláves slouží k řízení programů a her (kódy kláves generují i řídicí klávesy jako je Ctrl, zatímco znaky těmito klávesami generovány nejsou).
Znak nebo kód klávesy se při stisku klávesy uloží do zásobníku. V okamžiku stisku klávesy totiž program nemusí být připraven klávesu převzít. Až bude mít čas, převezme klávesu ze zásobníku, přitom dojde ke zrušení klávesy v zásobníku. Při používání funkcí vstupu z klávesnice je proto potřeba pamatovat na to, že načtením klávesy nebo znaku z klávesnice se klávesa či znak zruší a při příštím čtení budou funkce navracet již něco jiného.
Znaky a klávesy mají samostatné zásobníky, na sobě navzájem nezávislé. Jsou to jakoby oddělené datové proudy. Jedním kanálem proudí znaky, druhým kódy kláves.
Teď již můžeme připravit podmínku
pro přerušení hlavní smyčky programu klávesou Esc. Použijeme funkci vstupu kódu klávesy z
klávesnice. Víme, že vrací číselný kód, proto
potřebujeme funkci k porovnání čísel. Porovnávací funkce
pro čísla nalezneme ve skupince výpočty ,
podskupince porovnání
.
Použijeme funkci není
rovno
. Přetáhněte ji do
podmínky cyklu dokud
platí
.
Prvním prvkem, který budeme
porovnávat, je vstup
klávesy (nečeká na stisk)
. Přetáhneme ho
do porovnávací funkce ze skupiny ovládání
,
podskupiny klávesnice
.
S podobným prvkem, s čekáním na stisk klávesy, jsme se již
seznámili v předešlých kapitolách. Rozdíl mezi prvky
spočívá v tom, že tento prvek na stisk klávesy nečeká.
Není-li žádný kód klávesy připraven, vrací kód
nestisknuté klávesy (je to číslo 0,
ale my se konkrétní hodnotou nemusíme zatěžovat, protože
máme k dispozici symbolický kód žádná klávesa nestisknuta
).
Druhým porovnávaným prvkem je
klávesa Esc .
Najdeme ji ve stejné skupince jako funkci vstupu klávesy, ale
ještě se musíme vnořit trochu hlouběji, a to do podskupinek klávesy
a řídicí
klávesy
. Je to číselná
konstanta s hodnotou číselného kódu klávesy Esc, abychom nemuseli kód klávesy znát. Položte
prvek do porovnávací funkce pod prvek funkce vstupu klávesy.
Co náš cyklus teď dělá? Přečtěte si poznámky u prvků: "Dokud platí, že není roven vstup klávesy klávese Esc, opakuj příkazy (něco)." Trochu krkolomně řečeno, ale snad je význam jasný. Cyklus se bude opakovat, dokud nepřijde z klávesnice klávesa Esc.
Naplníme tělo cyklu opakuj příkazy .
Petřík se bude při své pochůzce rozhodovat o dalším kroku
podle políčka, které leží před ním. Pro rozhodování
použijeme nový prvek, podmíněné provedení příkazů
.
Najdete ho ve skupince řízení programu
.
Prvek přetáhněte do těla cyklu opakuj příkazy
.
Po položení prvku podmíněného
provedení příkazů si můžete všimnout, že prvek v sobě
obsahuje další tři prvky. Prvním prvkem je platí-li, že .
Je to test podmínky. S podobným prvkem jsme se již setkali u
podmíněného cyklu. Prvek provádí test nějaké podmínky a
je-li splněna, vykonají se příkazy v prvku potom proveď
.
Není-li podmínka splněna, provedou se příkazy v prvku jinak proveď
.
V testu podmínky budeme testovat, zda
před Petříkem leží předmět pro otočení doleva. Podobný
test známe z předešlé kapitoly, a tak je vám zřejmě již
jasné, že použijeme prvky shodnost předmětů ,
předmět
před Petříkem
a Doleva
.
Do první větve (potom proveď )
doplníme dva příkazy, krok
a vlevo
.
Naše konstrukce podmíněného příkazu má teď tento význam:
"Leží-li před Petříkem předmět pro otočení
doleva, udělá krok a otočí se vlevo, jinak bude dělat něco
jiného."
Nyní vytvoříme to "něco
jiného". Zkopírujte pravým tlačítkem myši celou
konstrukci podmíněného příkazu ještě jednou o trochu
níže. Nově vytvořený podmíněný příkaz znovu uchopte,
tentokrát levým tlačítkem myši, a přetáhněte ho do druhé
větve prvního podmíněného příkazu (větev jinak proveď ).
Tak jsme si zrychleně "předpřipravili" část
programu pro druhý případ, otočení doprava.
V novém podmíněném příkazu
nahraďte prvek Doleva
prvkem Doprava
.
Podobně nahraďte prvek vlevo
prvkem vpravo
.
Teď už asi tušíte, co bude Petřík dělat, nebude-li před
ním předmět pro otočení doleva. Zkusí, zda je před ním
předmět přikazující otočení doprava. Pokud ano, udělá
krok vpřed a otočí se vpravo. Jinak ... co má vlastně dělat
jinak? Nic jiného už od něj nechceme, takže stačí, když
udělá krok
.
Prvek kroku zkopírujte pravým tlačítkem myši z vedlejší
větve podmínky.
Vypadalo to složitě? Nebojte se, už
jsme hotovi. Výsledný program vidíte na obrázku níže.
Program spusťte. Je-li vše v pořádku, Petřík pobíhá mezi
značkami a otáčí se na nich vlevo a vpravo. Chcete Petříka
trochu zrychlit? Dvojklikem myší na prvku Petřík
vyvolejte editaci sprajtu Petříka. Stiskněte tlačítko Vlastnosti
.
Objeví se okno pro nastavení vlastností sprajtu. Do pole Fází na krok napište číslo 4 a
stiskněte klávesu Enter. Program opět spusťte. Petřík teď běhá
jako blázen, ani se nezadýchá.
Zkuste Petříkovi připravit složitější dráhu. Tady je jeden příklad: