Napíšte program, pomocou ktorého budeme sledovať správanie
myši v labyrinte:
labyrint sa nachádza v štvorcovej sieti - niektoré políčka
sú voľné, na niektorých je stena a niektoré sú preklápacie -- v istých
situáciách sú priechodné;
malá myška sa náhodne pohybuje po labyrinte a hľadá políčko,
na ktorom je syr;
náhodný pohyb znamená, že myška si náhodne vyberie
smer a ak je tým smerom voľné políčko, tak tam vojde;
myška je zobrazená jednou zo štyroch bitmáp (mys1.bmp,
mys2.bmp, ...) podľa toho, v akom smere je natočená (sú 4 možné
smery natočenia a teda aj pohybu) - tieto bitmapy majú priesvitnú farbu
červenú;
preklápacie políčka sú troch typov: modré, červené a žlté
a každé z nich je v jednom z dvoch stavov: priechodné (malý ihlan) alebo
nepriechodné (veľký ihlan) - v každom momente sú priechodné len políčka
jednej farby ostatné dva typy (farby) sú nepriechodné;
prepínanie priechodnosti realizujte, napr. nejakými troma
klávesmi -- každý kláves zapne priechodnosť jednou farbou.
V súboroch lab1.bmp, ..., lab9.bmp nájdete
zodpovedajúce bitmapy pre políčka labyrintu. Labyrint realizujte pomocou
komponentu StringGrid, ktorý má políčka veľkosti 50x50 pixelov -- tento
nebude väčší ako 10 riadkov po 15 stĺpcov. V programe zadefinujte triedu
Hra, ktorá bude obsahovať všetky potrebné dátové štruktúry (informácie
o políčkach, pozíciu myši, bitmapy a pod.) a metódy na načítanie labyrintu
zo súboru , nakreslenie jedného políčka labyrintu do Canvasu StringGridu,
náhodný pohyb myši a pod.
Labyrint je definovaný v textovom súbore labyrint.txt
-- každý znak popisuje jedno políčko labyrintu (súbor je korektný):
'.' - voľné políčko;
'+' - štartová pozícia myši;
'*' - pozícia políčka so syrom;
'x' - stena;
'a', 'b', 'c' - preklápacie políčka troch typov -- farieb;
Ak myš príde na políčko so syrom, už z tohoto políčka neodíde,
len sa náhodne vrtí na mieste.
Napíšte program, ktorý bude robiť nasledovný efekt:
ak budeme pomocou myši (so zatlačeným ľavým tlačidlom) kresliť
niečo do plochy, tak samotná kresba sa na obrazovke neobjavuje hneď , ale
kreslí ju korytnačka s nejakým malým krokom;
takto môžeme na obrazovke nakresliť viac útvarov a tieto
sa postupne objavia -- t.j. ak myš pustíme a začneme kresliť niekde inde,
tak korytnačka tiež tento úsek preskočí (so zdvihnutým perom).
Zadefinujte typ prikaz a triedu mojaKor (deklaráciu
môžete mierne zmeniť):
type prikaz = record typ:(tph,tpd); bod:TPoint
end;
Počas kreslenia myšou po ploche budete body kresby ukladať
korytnačke do dynamického poľa plan a to buď typu tph alebo
tpd, podľa toho, či sa do príslušného bodu treba dostať so zdvihnutým
perom (tph) alebo spusteným (tpd). Metódy pridajPH a pridajPD
pridávajú do tohoto dynamického poľa vety príslušného typu.
Metóda urobKrok spraví jeden malý krok z obrázku
(z poľa plan), pričom spracovávaný bod (ku ktorému sa korytnačka
blíži) má index v stavovej premennej ix. Dĺžka elementárneho kroku
je v konštante programu krok (môže mať hodnotu napr. 3). Korytnačka
pri kreslení čiary nesmie prejsť dlhší úsek ako krok -- ak je veľmi
blízko cieľového bodu, tak sa do neho presunie priamo.