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.