Textový súbor vstup.txt obsahuje popis "živého obrazu":
prvý riadok obsahuje meno bitmapy, ktorá bude podkladom (background)
obrazu
každý ďalší riadok obsahuje popis jedného objektu:
prvé dve celé čísla sú súradnice objektu v ploche
ďalšie dve celé čísla označujú vektor posunutia (vx,vy),
o ktorý sa bude daný obrázok pohybovať
na konci riadku je meno bitmapy obrázku
môžete predpokladať, že súbor je zadaný korektne
Napíšte program, ktorý načíta tento súbor, načíta príslušné
bitmapy a zobrazí ich do formuláru (buď priamo do formuláru alebo do grafickej
plochy - rozmery nech sú aspoň 500x400). Pomocou časovača sa všetky objekty
v ploche pohybujú tak, že sa im stále menia súradnice podľa vektora posunutia.
Ak by niektorý objekt mal "vypadnúť" z plochy, tak sa príslušnej zložke
vektora (vx alebo vy) zmení znamienko. Vo formulári zadefinujte tlačidlo
[Ulož], ktorým môžeme uložiť do súboru vstup.txt momentálny stav
objektov. Bitmapy objektov majú priesvitné časti zadefinované bielou farbou.
Ak niektorý objekt zatlačíme ľavým tlačidlom myši, všetky
objekty zastanú a kliknutému objektu môžeme zmeniť jeho vektor posúvania
(aj na nulový). Počas ťahania myšou sa kreslí vektor (červená úsečka) od
kliknutého bodu po momentálny. Pri pustení myši sa tento vektor zmaže a
daný objekt sa od tohoto momentu bude pohybovať podľa tohoto nového vektora
(začnú sa pohybovať aj všetky ostatné objekty).
Počas zatlačenia klávesu <Ctrl> všetky objekty zastanú
a počas tohoto môžeme ľubovoľné objekty po ploche ťahať (týmto ťahaným
objektom sa vynuluje ich vektor posúvania).
Objekty zadefinujte ako inštancie tejto triedy (deklarácie
môžete podľa potreby trochu zmeniť):
type obrazok = class x,y,vx,vy:integer; meno:string;
// meno súboru s bitmapou
bmp:TBitmap; constructor Create(var tx:TextFile);
// načíta informácie zo súboru
destructor Destroy; override; procedure kresli(g:TCanvas);
// vykreslí do plochy
function klik(mx,my:integer):boolean;
//
či sa kliklo myšou
procedure zapis(var tx:TextFile); end;
Na začiatku programu je plocha prázdna. Kliknutie do plochy
vytvorí novú korytnačku s tvarom malého krúžku. Každé ďalšie kliknutie
vytvára nové korytnačky. Každá takto vytvorená korytnačka je spojená úsečkou
s predchádajúcou (okrem prvej) - podľa poradia vytváraných korytnačiek.
Táta úsečka je súčasťou tvaru korytnačky (tvar je krúžok a dlhá čiara).
Kliknutie na existujúcu korytnačku nevytvorí novú, ale umožní ju ťahať
po ploche - počas ťahania treba aktualizovať tvar samotnej ťahanej korytnačky
aj jej nasledovníka.
Zadefinujte triedu mojaKor (odvodenú z triedy
Kor),
ktorá má stavové premenné pred a nasl - informácie o predchádzajúcej
a nasledovnej korytnačke (napr. ich indexy vo VelaKor), ďalej konštruktor
Create
s parametrami x,y a p (informácia o predchádzajúcej korytnačke) a metódu
opravTvar,
ktorá zmení tvar korytnačke na malý krúžok (12-uholník so stranou 3) a
čiaru dĺžky vzdialenosti k predchodcovi (ak existuje). Túto metódu budete
volať vždy, keď sa zmení pozícia samotnej korytnačky alebo niektorého jej
suseda.
Na formulári vytvorte tlačidlo [Ulož] - po jeho zatlačení
sa do súboru
zoznam.txt zapíše momentálny stav korytnačiek: do každého
riadku sa zapíšu dve celé čísla - súradnice korytnačky.
Pri štarte programu, ak tento súbor existuje, sa na príslušných
miestach vygenerujú korytnačky a program ich umožní ťahať po ploche a vytvárať
nové.
Na pole korytančiek použite triedu VelaKor.