1. príklad: skladanie rozstrihaného obrázku
* Napíšte program, ktorý nám umožní poskladať rozstrihaný obraz. Na začiatku hry je v ploche rozstrihaný nejaký veľký obrázok na rôzne veľké kúsky - obdĺžniky, pričom sa tieto kúsky vôbec neprekrývajú. Úlohou hráča je posúvaním týchto kúskov ťahaním myšou poskladať pôvodný obraz. Program mu pritom nedovolí, aby žiaden kúsok "vypadol" z plochy - okraje hracej plochy sú pri ťahaní prekážkou a teda ťahanie sa na ňom zastaví. Kúsky obrazu sa môžu v priebehu hry prekrývať.
* Všetky vstupné informácie sú v textovom súbore obraz.txt, ktorý obsahuje:
o v prvom riadku je meno bitmapového súboru s ešte nenastrihaným obrazom
o v druhom riadku súboru sú dve čísla, ktoré definujú šírku a výšku hracej plochy (napr. komponentu triedy TImage) - v tejto ploche sa budú posúvať nastrihané kúsky obrazu
o nasledujúce riadky súboru obsahujú po 6 celých čísel - sú to informácie o rozstrihaných kúskoch - obdĺžnikoch: prvé štyri čísla popisujú obdĺžnik v obraze a to súradnice x a y a veľkosť obdĺžnika: šírku a výšku; posledné dve čísla sú súradnice obdĺžnika umiestneného v hracej ploche
o môžete predpokladať, že súbor je zadaný korektne a obraz je celý rozstrihaný na disjunktné obdĺžniky
o na "vystrihnutie" obdĺžnika z obrazu môžete využiť metódu CopyRect.
* Kúsky obrazu v programe realizujte ako inštancie triedy TKusok, napr. s takouto deklaráciou (môžete niečo pridať, alebo mierne pozmeniť):
TKusok = class
bm:TBitmap;
x,y,sirka,vyska:integer;
constructor Create(...);
destructor Destroy; override;
procedure kresli(c:Tcanvas; ...); // nakreslí ho aj s rámikom
function klik(xx,yy:integer):boolean; // zistí, či sa doň kliklo
procedure posun(dx,dy:integer);
end; Samotnú hru realizujte triedou THra, ktorej deklarácia by mala vyzerať približne takto:
*
THra = class
k:array of TKusok;
...
constructor Create(...);
destructor Destroy; override;
procedure pridaj(kk:TKusok); // pridá nový kúsok do poľa
procedure kresli(c:Tcanvas); // nakreslí všetky kúsky
procedure MouseDown(x,y:integer);
procedure MouseMove(x,y:integer);
procedure MouseUp;
end; THra si musí pamätať, ktorý kúsok sa momentálne ťahá myšou. Tento bude vykresľovaný ako posledný zo všetkých a teda bude nad všetkými ostatnými kúskami. Navyše bude počas ťahania orámovaný červeným rámikom (toto zabezpečia obe metódy kresli).
* * Program nemusí zisťovať, či už je celý obraz poskladaný.
* Stavové premenné tried TKusok a THra môžete používať len v metódach týchto trie
delphi pomoc s ulohou
-
marilynman
Medium Star
- Príspevky: 445
- Registrovaný: 23 jan 2007, 16:06
- Bydlisko: blava
- Kontaktovať používateľa:
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa: