Bubble Breaker – Delphi – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Bubble Breaker – Delphi – Fórum – Programujte.comBubble Breaker – Delphi – Fórum – Programujte.com

 

Pavel
~ Anonymní uživatel
383 příspěvků
28. 3. 2009   #1
-
0
-

Zdravím :)
Programuju Bubble breaker v delphi a dělám to jako ročníkovou práci.
Aby to nebylo tak jednoduché, tak jsem si musel vytvořit obrázky kuliček (ve Photoshopu) a proto to dělám trošku jiným stylem, ale zasekl jsem se u odstranění kuliček a nějak se mi nechcou mazat ani označovat. Kliknu a nic se nestane :(
Část kódu kde je zřejmě chyba :(



procedure TForm1.Image2MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var sx, sy, x2, y2: byte;
begin
sx := X div velikost;
sy := Y div velikost;
if (Button = mbLeft) then begin
For x2 := 0 to 9 do
For y2 := 0 to 9 do begin
Kliknuto[x2, y2] := false;
end;
Klik(1,sx,sy);
end;
if (Button = mbRight) then begin
For x2 := 0 to 9 do
For y2 := 0 to 9 do begin
Klikpodruhe[x2, y2] := false;
end;
Klik(2,sx,sy);
end;
end;

procedure TForm1.Klik(A, X, Y: Integer);
var x2, y2: integer;
begin
If (A = 1) then
If (x > 0) then
If (Pole[x, y] = Pole[x-1, y]) then
If (Kliknuto[x-1, y] = false) Then begin
Kliknuto[x-1 ,y] := true;
Klik(A,x-1,y);
end;
If (x < 9) then
If (Pole[x, y] = Pole[x+1, y]) then
If (Kliknuto[x+1, y] = false) Then begin
Kliknuto[x+1 ,y] := true;
Klik(A,x+1,y);
end;
If (y > 0) then
If (Pole[x, y] = Pole[x, y-1]) then
If (Kliknuto[x, y-1] = false) Then begin
Kliknuto[x ,y-1] := true;
Klik(A,x,y-1);
end;
If (y < 9) then
If (Pole[x, y] = Pole[x, y+1]) then
If (Kliknuto[x, y+1] = false) Then begin
Kliknuto[x ,y+1] := true;
Klik(A,x,y+1);
end;
If (A = 2) then begin
for x2 := 0 to 9 do
for y2 := 0 to 9 do begin
If (Kliknuto[x2, y2] = true) then Klikpodruhe[x2, y2] := true;
end;
end;
Oznaceni;
end;

procedure TForm1.Oznaceni;
var x, y: integer;
begin
For x := 0 to 9 do
For y := 0 to 9 do begin
If (Kliknuto[x ,y] = true) then begin
case Pole[x, y] of
1: Image2.Canvas.CopyRect(Rect(velikost*x, velikost*y, velikost*(x+1), velikost*(y+1)), Image3.Canvas, Rect(0,0,velikost,velikost));
2: Image2.Canvas.CopyRect(Rect(velikost*x, velikost*y, velikost*(x+1), velikost*(y+1)), Image3.Canvas, Rect(velikost,0,velikost*2,velikost));
3: Image2.Canvas.CopyRect(Rect(velikost*x, velikost*y, velikost*(x+1), velikost*(y+1)), Image3.Canvas, Rect(velikost*2,0,velikost*3,velikost));
4: Image2.Canvas.CopyRect(Rect(velikost*x, velikost*y, velikost*(x+1), velikost*(y+1)), Image3.Canvas, Rect(velikost*3,0,velikost*4,velikost));
5: Image2.Canvas.CopyRect(Rect(velikost*x, velikost*y, velikost*(x+1), velikost*(y+1)), Image3.Canvas, Rect(velikost*4,0,velikost*5,velikost));
end;
end;
end;
Zmizeni;
end;

procedure TForm1.Zmizeni;
var x, y: integer;
begin
For x := 0 to 9 do
For y := 0 to 9 do begin
If (Klikpodruhe[x ,y] = true) then begin
Pole[x, y] := 0;
Image2.Canvas.CopyRect(Rect(velikost*x,velikost*y,velikost*(x+1),velikost*(y+1)),Image1.Canvas,Rect(velikost*5,0,velikost*6,velikost));
end;
end;
end;


Abych to trochu objasnil tak:
velikost je šířka a výška jedné kuličky v pixelech.
Image2.MouseDown říká na jaké souřadnice jsem klikl (to samozřejmě víte, ale pro jistotu).
Klik(A, X, Y) udává opět souřadnice (X, Y) a písmeno "A" udává jestli jsem klikl pravým nebo levím tlačítkem).
Potom Image2.Canvas.CopyRect vyřízne čtverec z obrázku na kterém je 5 kuliček a jedno prázdné pole, které umísti na souřadnice Pole[x, y] (Pole je typu Integer a má hodnotu od 1 do 5.. 1 = černá kulička, 2 = žlutá atd.) Image1 je obrázek s 5 kuličkami vedle sebe, které jsou neoznačené. Image3 je opět obrázek s 5 kuličkami, ale označenými. Mám to z tutoriálu na Programujte (Hledání min) a z tutoriálu na VB.Net (samozřejmě Bubble Breaker).

Jsem začátečník, takže je tam možná banální chyba :(.

Budu moc rád když mi poradíte, chyba bude někde v proceduře Klik a Image2MouseDown (myslím). Děkuju předem za rady.

Nahlásit jako SPAM
IP: 90.176.20.–
o-lox0
Super člen
29. 3. 2009   #2
-
0
-

Určitě neuškodí když na konec Procedury Image2MouseDown
přilepíš Form1.repaint;, protože Form1 nemá moc zdání o tom, že si kreslil

Do Klik bych to vylepšil samostatným * do příslušné
hlavní větve, ale neměl by v tom být průšvih
* Kliknuto[x, y] := true;

Jestli to pořád nejede a Pole[] máš naplněný jinak
předpokládám bys neviděl různobarevný kuličky, tak
nebudu mít problém, když zašleš na odladění zdroják+images.
Takovýhle věci , koho by nebavilo ladit, :-) mě bavěj.
Z kodu nahore uz jsem nic dalsiho nevykoukal, nevim.

Nahlásit jako SPAM
IP: 85.71.152.–
Pavel
~ Anonymní uživatel
383 příspěvků
29. 3. 2009   #3
-
0
-

Ono to fungovalo, když jsem rovnou přes Image2MouseDown prováděl rekurzi, ale problém byl, že jsem si mohl označit polí kolik chtěl a pak klikl pravým tlačítkem myši a všechny zmizely, proto když znouvu kliknu musí se celé pole nastavit na false. To " * " jsem nějak nepochopil... kam to mám dát? No tady máš odkaz na celý projekt:

http://de.paul.sweb.cz/BubbleBreaker.rar

:-)

Nahlásit jako SPAM
IP: 90.176.20.–
o-lox0
Super člen
29. 3. 2009   #4
-
0
-

Opravdu vtipná chybka, žádné kejkle do kódu
jen si přiřaď Image2MouseDown do Formuláře na MouseDown k Image2
nějak ti vypadlo ... a pak hledej něco v kódu :-))

Nahlásit jako SPAM
IP: 85.71.152.–
Pavel
~ Anonymní uživatel
383 příspěvků
29. 3. 2009   #5
-
0
-

:D už jsem to tolikrát předělával, že jsem na toto úplně zapoměl...
Super, když budu mít ještě nějaký problém, ozvu se :)
Díky moc, že jsi mi to pomohl vyřešit :)

Nahlásit jako SPAM
IP: 90.176.20.–
o-lox0
Super člen
29. 3. 2009   #6
-
0
-

no nemáš za co, klidně si to příště Hesluj ten archiv, já ti pak sem vyspecifikuju kam mi máš kliknout heslo, abys nebyl zdroj free ročníkovek ... :D

Nahlásit jako SPAM
IP: 85.71.152.–
Pavel
~ Anonymní uživatel
383 příspěvků
29. 3. 2009   #7
-
0
-

Právě proto jsem si to dal na sweb, abych to mohl hned smazat :)

Nahlásit jako SPAM
IP: 90.176.20.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 6 hostů

Podobná vlákna

Bubble sort — založil Anonymní uživatel

Razeni pole bubble sortem — založil Hadrovej

Náhodné čísla a Bubble Sort — založil Supersonic

řazení jako v bubble sort — založil Noneus

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý