Napíšte program, ktorý nám umožní poskladať rozstrihaný obraz:
na ploche sú porozkladané obdĺžnikové kúsky rozstrihaného
obrazu - tieto kúsky sa navzájom neprekrývajú ani "nevytŕčajú" z plochy;
pomocou ťahania myšou ich môžeme presúvať po ploche, pričom
by sa nikdy nemali navzájom prekrývať a ani by nemali vypadnúť z plochy
-- ostatné kúsky aj okraje plochy sú pre ťahaný kúsok prekážkou a na nej
sa ťahanie zastaví;
vstupom do programu je textový súbor obraz.txt, ktorý
obsahuje tieto informácie:
prvý riadok je meno bitmapy s obrazom, ktorý sa bude rozstrihávať
na obdĺžniky;
nasleduje riadok s dvoma číslami: šírka a výška plochy, na
ktorej sa bude hrať;
nasledujúce riadky popisujú jednotlivé obdĺžniky -- obsahujú
po 6 čísel na každý obdĺžnik: x0, y0,sirka, vyska, x, y -- tieto označujú
súradnice ľavého horného rohu obdĺžnika v bitmape obrazu, jeho veľkosť
a momentálne súradnice v ploche;
bitmapu obrazu môžete rozstrihať napr. tak, že do pripravenej
malej bitmapy jedného kúsku nakreslíte celú bitmapu (metódou Draw) ale
so zápornými súradnicami ľavého horného rohu;
môžete predpokladať, že súbor je korektný;
kúsky obrazu realizujte ako inštancie triedy kusok,
ktorá okrem konštruktora a deštruktora obsahuje aj pomocné metódy na zistenie,
či sa kliklo na objekt a či sa dá s ním nejakým smerom pohnúť (táto metóda
môže mať parameter informáciu o inom obdĺžniku a môžete ju volať
pri ťahaní myšou postupne so všetkými ostatnými obdĺžnikmi); všetky tieto
kúsky uložte do dynamického poľa;
program nemusí kontrolovať, či je obraz poskladaný správne;
pokúste sa program urobiť tak, aby obrazovka neblikala -
môžete využiť kreslenie priamo do formuláru pomocou udalosti OnPaint s
nastavenou premennou DoubleBuffered na true.
Napíšte program, pomocou ktorého budú "farbiace mravce" vymaľovávať
nejaké oblasti obrazovky:
najprv sa grafická plocha orámuje hrubým čiernym rámikom
(hrúbky 5);
potom sa do nej nahádže náhodný počet (od 50 do 150) slamiek
- úsečiek na náhodných pozíciách, pod náhodnými uhlami a s náhodnou dĺžkou
(od 50 do 350) - tiež to budú čierne hrubé čiary hrúbky 5;
program teraz čaká na kliknutie myšou do plochy - na tejto
pozícii vznikne nová inštancia triedy mravec (odvodená od Kor)
- tento mravec sa začne náhodne pohybovať v ploche, pričom nevbehne na
čiernu farbu;
ak pri vzniku mravca má tento pod sebou čiernu farbu, tak
mravec prejde do špeciálneho stavu, v ktorom už nebude nič robiť (v logickej
stavovej premennej si zapamätáte, že je to "vadne vyrobený mravec");
ak pri vzniku má pod sebou bielu farbu, tak sa mu nastaví
náhodná farba - použite funkciu RGB s tromi náhodnými číslami (z intervalu
100..200);
ak má pri vzniku pod sebou inú ako bielu alebo čiernu farbu,
nastaví sa mu táto ako farba pera;
v každom kroku sa mravec najprv otočí o náhodný uhol (-30..30)
a potom skôr ako prejde vzdialenosť 4, skontroluje, či by pri tomto kroku
nestúpil na slamku (prejde so zdvihnutým perom vzdialenosť 4 - zapamätá
si farbu pod sebou a vráti sa) - ak je pred ním čierna farba, tak sa otočí
čelom vzad, inak prejde vzdialenosť 4 so spusteným perom -kreslí svojou
farbou pera -- toto by mala robiť metóda pohyb triedy mravec
(zrejme "vadne vyrobený mravec" sa hýbať nebude );
okrem konštruktora (náhodne vyberie farbu pera podľa pravidiel
vyššie) zadefinujte aj metódu - funkcia farba, ktorá vráti momentálnu
farbu pod korytnačkou (v Canvase Plochy využite vlastnosť Pixels);
každé ďalšie kliknutie vytvorí nového mravca, ktorý paralelne
vykresľuje svoju oblasť svojou farbou pera -- na hýbanie korytnačiek nepoužite
časovač (veľmi by to spomalil), ale priamo v metóde WMstart v nekonečnom
cykle hýbte všetky mravce bez zbytočného zdržovania.
Všetky čiary kreslite len pomocou korytnačej grafiky.
Pri generovaní slamiek, tieto zapisujte do textového
súboru mravce.txt - postupnosť slamiek ukončite informáciou o slamke
s nulovou dĺžkou - za toto budete pripisovať súradnice vzniknutých mravcov
-- môžete použiť štandardnú procedúru Append, ktorá otvorí súbor
na zápis a nastaví sa na jeho koniec -- bolo by dobre po zápise každého
mravca tento súbor uzavrieť, aby sa korektne zapísali všetky informácie
aj pri ukončení behu programu.
Pri štarte programu, ak existuje súbor s menom mravce.txt,
tak sa slamky negenerujú náhodne, ale sa načítajú zo súboru. Tiež sa pri
štarte vygenerujú korytnačky na zapamätané súradnice ale s náhodnými farbami
(podľa zadaných pravidiel).