Napíšte program, ktorý bude simulovať život mravcov:
v strede grafickej plochy sa v nejakých náhodných intervaloch
vynárajú mravce z nejakého mraveniska (napr. v časovači s pravdepodobnosťou
0.05) - každý mravec je realizovaný ako inštancia triedy TMravec
- všetky mravce sú v dynamickom poli; trieda TMravec okrem konštruktora
musí obsahovať metódu na vykreslenie do plochy (napr. procedure kresli(g:TCanvas))
a metódu, ktorá zabezpečí náhodný pohyb mravca po ploche - táto metóda
by mohla vracať informáciu o tom, či mravec zomrel od hladu, resp. či sa
mu narodil nový mravec (bude vysvetlené nižšie);
každý mravec sa náhodne pohybuje po ploche v jednom zo 4
smerov (paralelne s osami), pričom s pravdepodobnosťou 0.1 zmení smer --
pri svojom pohybe mu pri každom kroku ubúda jedna jednotka energie - pri
narodení má 1000 jednotiek - umrie, keď túto energiu minie. Keď pri svojom
náhodnom putovaní objaví v ploche potravu (bodka farby clOlive), tak ju
z plochy vymaže a energia sa mu zvýši o 50 jednotiek;
ak mravec prešiel aspoň 1200 krokov a má ešte aspoň 200 jednotiek
energie, na jeho pozícii sa narodí nový mravec (s energiou 1000) a rodičovi
ubudne 200 jednotiek -- jeden mravec môže "porodiť"ďalšieho minimálne po
ďalších 200 krokoch -- mravce deti sa ďalej správajú rovnako ako rodičia
(môžu mať deti) -- pre názornosť ich vykresľujte inou farbou ako rodičov;
mravec sa vykresľuje hrubou čiarou (hrúbky 3) a dĺžky 1 +
množstvo energie/200 - čiaru kreslite od pozície mravca opačným smerom,
ako je jeho smer pohybu; pôvodné mravce sú modré, deti sú zelené, modré
mravce, ktoré žijú aspoň 1200 krokov sa prefarbia na červeno (môžu "rodiť"
deti), zelené mravce, ktoré žijú aspoň 1200 krokov sa prefarbia na svetlozelené
(clLime);
keď budeme klikať do plochy myšou, na toto miesto sa položí
štvorček 5x5 bodiek potravy (farby clOlive) -- v skutočnosti potravu uložíme
do pomocnej bitmapy veľkosti grafickej plochy (na začiatku bielej) a pri
pohybe mravcov najprv plochu prekreslíme touto pomocnou bitmapou a až potom
do nej zakreslíme mravcov -- tiež mravce budú zisťovať potravu pod svojou
pozícou (jediný bod) len z pomocnej bitmapy - a tiež ju budú odtiaľ odstraňovať;
zabezpečte, aby na okraji obrazovky mravce buď zmenili smer
alebo sa objavili na opačnom konci plochy;
niekde v rohu plochy vypisujte momentálny počet mravcov,
prípadne iné počty;
pokúste sa program urobiť tak, aby obrazovka neblikala.
Napíšte program, ktorý bude pomocou korytnačiek realizovať
nasledovnú úlohu:
na čistej grafickej ploche nakreslite vo výške -100
hrubšiu vodorovnú čiaru (po celej šírke) – toto bude akoby podlaha miestnosti;
keď začnete ťahať myšou po ploche (ale iba nad podlahou),
budú na ťahu myši vznikať korytnačky v tvare červených loptičiek - tvarom
korytnačky nech je "kružnica" - 12-uholník so stranou 10, pričom pozícia
korytnačky je v strede kružnice a z tohoto stredu vychádza úsečka na obvod;
loptičky nevznikajú priveľmi husto: od predchádzajúcej vznikne nasledujúca
nie bližšie (merané len vo vodorovnom smere) ako 30 bodov;
už počas ťahania myši začnú všetky už existujúce loptičky
padať k podlahe - aby bola ilúzia skákania realistická, ich rýchlosť sa
musí meniť: v hornej polohe pohybu je nulová, potom rastie a rastie, pri
odraze od zeme je najväčšia, potom zasa klesá a klesá až k nule opäť v
hornom bode - k tomu použijete nasledovný fígeľ: loptička akoby rotovala
na pevnej niti (jej dĺžka sa rovná vzdialenosti od podlahy k hornému bodu
– každá loptička má svoj vlastný polomer) okolo bodu, ktorý je jej miestom
dopadu na dlážke - z tohto "rotovania" však loptička preberá iba y-ovú
zložku – teda premieta kruhový pohyb na zvislú priamku; loptička
nerotuje po celej kružnici, ale iba po jej hornej polovici; loptička vzniká
na najvyššom bode kružnice a je natočená vo vodorovnom smere;
celú ilúziu ešte vylepšite takto: každej loptičke sa bude
zmenšovať jej "polomer" vždy po odraze od podlahy, takže bude vyskakovať
stále menej a menej - po istom čase teda postupne všetky loptičky zostanú
ležať na podlahe;
vždy, keď začneme ťahaním vyrábať nové loptičky, všetky
staré sa zrušia.
Zadefinujte triedu mojaKor - potomok Kor, v
tejto triede predefinujte metódu ZmenXY tak, aby sa korytnačke menila
iba y-ová súradnica, t.j. aj keby sa (napr. pomocou dopredu)
mala presunúť na ľubovoľné miesto plochy, toto sa premietne na zvislú priamku.
Ďalej zadefinujte metódu pohyb, ktorý zabezpečí jeden krok pohybu
korytnačky po kružnici - kružnica je 60-uholník so stredom na podlahe a
so stranou krok - stavová premenná triedy mojaKor. Vždy,
keď sa má korytnačka pri pohybe dostať pod podlahu, tak zmení smer o 180
stupňov a zmenší krok.
V ľubovoľnom momente program reaguje na klávesy L a S:
klávesom S uložíme momentálnu polohu, smer a krok všetkých korytnačiek
do súboru lopty.txt (zabezpečí metóda uloz s parametrom typu
TextFile triedy mojaKor); kláves L zruší všetky existujúce
korytnačky a vytvorí nové podľa obsahu súboru lopty.txt - triede
mojaKor zadefinujte konštruktor Create1 s parametrom typu
TextFile - tento konštruktor vytvorí korytnačku presne v tom istom
stave, ako bola uložená metódou uloz.
Všetky loptičky musia byť prvkami triedy VelaKor.
Pohyb loptičiek riadi časovač, na urýchlenie práce použite procedúru Naraz.