zbojnícky kapitán Juraj Jánošík stojí na brehu rieky a potrebuje
sa dostať na jej druhý breh; našťastie v rieke plávajú brvná, po ktorých
môže preskákať na druhý breh -- samozrejme nesmie spadnúť do vody;
brvná plávajú v rieke v štyroch radoch, vždy v párnych radoch
sprava doľava a v nepárnych radoch naopak -- každý rad môže mať iný počet
brvien (sú v ňom rovnomerne rozostavené) a inú rýchlosť (o koľko bodov
sa v každom kroku posunú) -- brvná plávajú cyklicky;
ak Jánošík preskáče úspešne na druhý breh, v hornej časti
plochy pribudne jeho obrázok, ak sa utopí, pribudne truhlička (postupne,
tak ako budeme hrať, budú pribúdať obrázky Jánošíka a truhličiek)
obrazovka je rozdelená na tri farebné pásy: horný zelený
je cieľový breh a na ňom sa objavujú postavičky a truhličky; stredný pás
je modrý a v ňom plávajú brvná; spodný zelený pás je štartovný pre Jánošíka
a na začiatku stojí na brehu rieky niekde v strede.
Obrázky ku hre sú v súboroch janosik.bmp, drevo.bmp
a truhla.bmp -- všetky tri majú mať bielu ako priesvitnú farbu.
Výška jedného radu brvien je v konštante programu vzd a cieľový
breh na obrazovke má výšku v konštante breh -- všetky ostatné hodnoty
na obrazovke vypočítajte z týchto konštánt. Podobne zadefinujte konštanty
pre počty brvien v jednotlivých radoch (poc) a rýchlosť pohybu týchto
radov (rych), napr. takto (podľa potreby si tieto deklarácie pozmeňte)
const vzd = 50; breh = 150; poc:array[1..4] of integer = (4,3,3,2); rych:array[1..4] of integer = (4,-7,7,-10);
Jánošík skáče nahor po zatlačení klávesu medzera -- buď skočí
na brvno a vtedy sa s ním vezie (na kraji obrazovky sa utopí), alebo skočí
mimo a vtedy sa utopí - na svojom mieste zmizne, v hornom páse sa objaví
truhlička a po krátkom čase sa objaví na štartovnej pozícii. Ak sa pri
skoku dostane na protiľahlý breh, jeho obrázok sa objaví v hornom páse
a po krátkom čase sa objaví zase na štartovnej pozícii.
Jánošíka aj brvná reprezentujte ako inštancie nejakých
vami navrhnutých tried.
Daný je textový súbor body.txt, ktorý popisuje nejaký
obrázok (postupnosťou bodov v súradnicovej sústave) a počiatočné informácie
o niekoľkých korytnačkách:
súbor začína dvojicami celých čísel, ktoré sú súradnicami
jednotlivých bodov - táto postupnosť bodov končí dvojicou (1000,1000),
ktorá už nepatrí do obrázku;
ďalej až do konca súboru nasledujú šestice celých čísel,
ktoré postupne popisujú jednotlivé korytnačky takto - prvé tri čísla znamenajú
x, y a počiatočný smer, ďalšie tri popisujú farbu pera korytnačky ako trojica
parametrov pre RGB (funkcia rgb);
predpokladajte, že súbor je zadaný korektne.
Napíšte program, ktorý načíta daný textový súbor, vytvorí
v ňom popísané korytnačky, ktoré budú kresliť zadefinovaný obrázok ale
každá zo svojej domovskej pozície so svojim natočením a danou farbou. Zrejme
najprv prevediete postupnosť bodov do postupnosti korytnačích príkazov
vpravo
a dopredu a až tieto príkazy sa budú vykonávať danými korytnačkami.
Môžete si zadefinovať pomocnú korytnačku, ktorá bude so zdvihnutým perom
"obchádzať" body obrázku a počítať parametre pre dopredu (vzdialenosť
od predchádzajúceho bodu) a vpravo (uhol od momentálneho natočenia
pomocou metódy smerom). Postupnosť korytnačích príkazov ukladajte
do dynamického poľa.
Zadefinujte triedu mojaKor:
mojaKor = class(Kor) dx,dy,dsmer:integer; constructor Create(var tx:TextFile); procedure domov; procedure kresli(const d:array
of real); end;
Stavové premenné dx, dy a dsmer si pamätajú
domovskú pozíciu (tam kde vznikla) a metóda domov presunie korytnačku
do domovskej pozície. Metóda kresli zinterpretuje obrázok uložený
v dynamickom poli.
Program po načítaní súboru a vytvorení korytnačiek (ako
prvky VelaKor) postupne vykreslí obrázok všetkými korytnačkami (metóda
kresli) a potom po kliknutí myšou zmaže obrazovku a znovu nakreslí
tento obrázok ale paralelne všetkými korytnačkami naraz.