5. Petr chodí po značkách <<< Obsah >>> 7. Ovládání klávesnicí
Petřík na svých toulkách přišel do velkého bludiště. Nemůže najít cestu ven, musíme mu pomoci. Hledání cesty bludištěm je jeden z často řešených algoritmizačních problémů. Použijeme obvyklou metodu - Petřík se bude snažit držet stěny po pravé ruce, dokud nenajde východ z bludiště ven.
Začneme vytvořením nového programu. V
okně programů stiskněte tlačítko Nový ,
jako jméno programu zadejte Cesta.
V poli Společné proměnné a funkce připravíme dva předměty pro bludiště - zeď a
dveře. Mohli bychom si je namalovat, ale raději je ukradneme
už hotové z programu Bludiště, který je součástí MINI instalace Petra (u
plné instalace Petra takové předměty najdete ve vzorové
knihovně předmětů). Vraťte se do okna programů a otevřete
program Bludiště. Ve skupině předměty
(v poli Společné
proměnné a funkce) najděte
prvky zeď a dveře
(jedno které, zda pro Petříka nebo pro Lucku) a přetáhněte
je do pole Knihovna
proměnných a funkcí, do
skupiny prvků předmět. Tím jste je uložili do knihovny. Nyní se
vraťte zpět do programu Cesta.
Rozevřete v knihovně skupinku předmět
a přetáhněte z ní prvky dveře a zeď do pole Společné
proměnné a funkce. Prvky
případně přejmenujte na Dveře a Zeď.
Teď vytvoříme plochu bludiště.
Dvakrát klikněte na prvek plocha . Trochu si ji
zmenšíme, ať nemusíme dělat příliš velké bludiště.
Klikněte na tlačítko Rozměry
.
Objeví se okno pro zadání rozměrů plochy, rozměry se
zadávají v políčkách. Zadejte šířku plochy 12 a výšku 10.
Použijte předměty Dveře a Zeď a vytvořte bludiště podle obrázku (připomínám, že levé tlačítko prvky přesouvá a pravé kopíruje - to platí i při editaci plochy):
Základem programu bude cyklus podmíněné opakování
příkazů . Chceme totiž, aby
Petřík neustále opakoval své kroky po bludišti až do
okamžiku, kdy najde dveře. V podmínce cyklu použijeme prvek předmět na pozici s
Petříkem
. Je podobný
prvku předmět
před Petříkem s tím
rozdílem, že se vztahuje k předmětu na políčku, na kterém
stojí Petřík. Najdete ho v podskupince Petřík - rozšíření
.
Podmínku cyklu bychom mohli slovně
vyjádřit: "Dokud není na
pozici s Petříkem předmět dveří, opakuj...".
Slovo není nám dává najevo, že potřebujeme
opak testu na shodnost předmětů. K tomuto účelu je určen
prvek neplatí-li,
že . Prvku se říká logická negace a funguje tak, že převrátí výsledek
porovnávací operace z ano na ne a z ne na ano. Najdeme ho ve skupince výpočty
,
podskupince logické
operace
.
Nejdříve tedy umístěte do podmínky
cyklu dokud
platí prvek neplatí-li, že
.
K němu připojte prvek shodnost
předmětů
a do něj vložte
prvky předmět
na pozici s Petříkem
a Dveře
.
V těle cyklu chceme zajistit, aby Petřík
procházel bludištěm tak, že se bude neustále držet stěny
po pravé ruce. Na začátku cyklu nechejte Petříka otočit
nejdříve vpravo příkazem vpravo . Dalším příkazem
bude cyklus podmíněné
opakování příkazů
, vložte jej za
příkaz vpravo. Cyklus zajistí otáčení Petříka doleva tak
dlouho, dokud před sebou nenajde průchodné políčko. Proto
umístěte do cyklu prvek vlevo
.
V podmínce druhého (vnitřního) cyklu
budeme testovat, zda je před Petříkem neprůchodné políčko
a zda se tedy má Petřík ještě pootočit doleva. Prvním z
neprůchodných políček bude Zeď . Petřík nemůže
projít ještě přes jednu překážku, a to přes okraj plochy
okna. Okraj plochy okna můžeme testovat jedním zvláštním
předmětem - okraj
plochy
(je ve skupince
plocha
).
Zvláštní je v tom, že to není datová proměnná, ale
konstanta, protože její obsah nemůžeme měnit. Její hodnotu
můžeme uchovávat v proměnných a testovat, ale nemůžeme ji
zobrazit položením na plochu.
Potřebujeme tedy pomocí dvou testů
předmětů před Petříkem vyjádřit formulaci "Dokud
je před Petříkem Zeď nebo je před
Petříkem okraj plochy, opakuj Vlevo". Slovo nebo
je opět logický prvek - nebo , říkáme mu logický součet. Najdete ho ve skupince výpočty
,
podskupince logické
operace
. Vložte prvek nebo do podmínky cyklu a přidejte dvě porovnání
předmětů před Petříkem, se zdí a s okrajem.
Petřík je teď otočen směrem na volné
políčko, takže nám zbývá doplnit poslední prvek do
hlavního cyklu - krok .
Prvek zajistí popojítí Petříka vpřed na nalezené volné
políčko.
Nakonec zajistíme, aby se Petřík po
nalezení cíle na nás otočil a čekal na stisk klávesy. Za
hlavní cyklus proto doplňte prvky vlevo a vstup klávesy (čeká na
stisk)
. Výsledný program
vidíte zde:
Program spusťte. Petřík probíhá celé bludiště, až nakonec dorazí k východu. Schválně jsme mu dali východ hned za roh po levé straně, ale protože to neví, snaží se najít východ vpravo a tak mu to dlouho trvá.
Prohoďte mezi sebou prvky vlevo a vpravo
.
Jak jistě tušíte, změnili jsme metodu hledání východu tak,
že se Petřík bude držet levé stěny namísto pravé. V
našem bludišti najde východ mnohem dříve.
5. Petr chodí po značkách <<< Obsah >>> 7. Ovládání klávesnicí