Petr v bludišti

Ostatní jazyky Petr Lite Políčková grafika Petr v bludišti

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í Lite verze Petra (u plné verze 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.


 

Stáhnout

Staženo 275x (129.39 kB)
Aplikace je včetně zdrojových kódů v jazyce Petr (jsou obsaženy v EXE souboru, který lze v programu přímo otevřít)

 

  Aktivity (1)

Článek pro vás napsal Panda38
Avatar
Programátor C++, WinAPI, ASM.

Jak se ti líbí článek?
Celkem (1 hlasů) :
55555


 


Miniatura
Předchozí článek
Petr chodí po značkách
Miniatura
Všechny články v sekci
Políčková grafika
Miniatura
Následující článek
Ovládání klávesnicí

 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!