Kleines Update:
Hab es erstmal so gemacht, dass wenn man ein Panel anklickt, dass keine angrenzenden Minen hat, alle Panels "aufgedeckt" werden, die ebenfalls keine angrenzenden Minen haben und wiederum deren bnachbarten Panels, sodass die zuvor erwähnten Ringe aus Zahlen entstehen.
Im Original werden nur die aufgedeckt, die benachbart sind, aber das reicht mir so erstmal.
Mein Problem ist nun, dass in 7 von 10 Versuchen, eine Zahl auf einem Panel erscheint, die unmöglich ist (zB -1, 227, 981256). Diese erscheint NICHT immer dem gleichen Panel!
Ich komme nicht drauf, warum solch eine Zahl entsteht.
Falls ihr möchtet könntet ihr ja mal kurz einsehen. Ich wäre euch sehr dankbar!
Relevanter Quellcode + Screenshot des gemeinten Falles anbei.
(das StringGrid benutze ich, um sehen zu können wo die Minen sind)
*Edit: Hab das Problem gefunden (glaube Ich) Könnte sein, dass ich die Panels nicht in der Reihenfolge
gesetzt habe, in der sie da sind. Funktioniert die ganze Component-Aktion dadurch nicht richtig?
Krieg ich das nur durch das neu platzieren von 225 Panels wieder hin?
Form1
Delphi-Quellcode:
procedure TForm1.CannonFire(var A,B,m:integer); //Procedure für Linksklick
var h,j:integer;
begin
if mf[A,B]<>9 then //Falls keine Minen...
begin
m:=mf[A,B];
if mf[A,B]=0 then
begin
h:=A;
j:=B;
for h:= 0 to 14 do
begin
for j:=0 to 14 do
begin
if mf[h,j]=0 then
begin
g := 'P_'+IntToStr(j)+'_'+IntToStr(h);
for i := 0 to Self.ComponentCount - 1 do
begin
if Self.Components[i].Name = g then
Panel:=TPanel(Self.Components[i]);
end;
Panel.Caption:='_';
if (h+1>=0) and (h+1<=14) and (j>=0) and (j<=14) then
begin
g := 'P_'+IntToStr(j)+'_'+IntToStr(h+1);
for i := 0 to Self.ComponentCount - 1 do
begin
if Self.Components[i].Name = g then
Panel:=TPanel(Self.Components[i]);
end;
Panel.Caption:=IntToStr(mf[h+1,j]);
if Panel.Caption='0' then Panel.Caption:='_';
end;
if (h+1>=0) and (h+1<=14) and (j+1>=0) and (j+1<=14) then
begin
g := 'P_'+IntToStr(j+1)+'_'+IntToStr(h+1);
for i := 0 to Self.ComponentCount - 1 do
begin
if Self.Components[i].Name = g then
Panel:=TPanel(Self.Components[i]);
end;
Panel.Caption:=IntToStr(mf[h+1,j+1]);
if Panel.Caption='0' then Panel.Caption:='_';
end;
if (h>=0) and (h<=14) and (j+1>=0) and (j+1<=14) then
begin
g := 'P_'+IntToStr(j+1)+'_'+IntToStr(h);
for i := 0 to Self.ComponentCount - 1 do
begin
if Self.Components[i].Name = g then
Panel:=TPanel(Self.Components[i]);
end;
Panel.Caption:=IntToStr(mf[h,j+1]);
if Panel.Caption='0' then Panel.Caption:='_';
end;
if (h-1>=0) and (h-1<=14) and (j+1>=0) and (j+1<=14) then
begin
g := 'P_'+IntToStr(j+1)+'_'+IntToStr(h-1);
for i := 0 to Self.ComponentCount - 1 do
begin
if Self.Components[i].Name = g then
Panel:=TPanel(Self.Components[i]);
end;
Panel.Caption:=IntToStr(mf[h-1,j+1]);
if Panel.Caption='0' then Panel.Caption:='_';
end;
if (h-1>=0) and (h-1<=14) and (j>=0) and (j<=14) then
begin
g := 'P_'+IntToStr(j)+'_'+IntToStr(h-1);
for i := 0 to Self.ComponentCount - 1 do
begin
if Self.Components[i].Name = g then
Panel:=TPanel(Self.Components[i]);
end;
Panel.Caption:=IntToStr(mf[h+1,j]);
if Panel.Caption='0' then Panel.Caption:='_';
end;
if (h-1>=0) and (h-1<=14) and (j-1>=0) and (j-1<=14) then
begin
g := 'P_'+IntToStr(j-1)+'_'+IntToStr(h-1);
for i := 0 to Self.ComponentCount - 1 do
begin
if Self.Components[i].Name = g then
Panel:=TPanel(Self.Components[i]);
end;
Panel.Caption:=IntToStr(mf[h-1,j-1]);
if Panel.Caption='0' then Panel.Caption:='_';
end;
if (h>=0) and (h<=14) and (j-1>=0) and (j-1<=14) then
begin
g := 'P_'+IntToStr(j-1)+'_'+IntToStr(h);
for i := 0 to Self.ComponentCount - 1 do
begin
if Self.Components[i].Name = g then
Panel:=TPanel(Self.Components[i]);
end;
Panel.Caption:=IntToStr(mf[h,j-1]);
if Panel.Caption='0' then Panel.Caption:='_';
end;
if (h+1>=0) and (h+1<=14) and (j-1>=0) and (j-1<=14) then
begin
g := 'P_'+IntToStr(j-1)+'_'+IntToStr(h+1);
for i := 0 to Self.ComponentCount - 1 do
begin
if Self.Components[i].Name = g then
Panel:=TPanel(Self.Components[i]);
end;
Panel.Caption:=IntToStr(mf[h+1,j-1]);
if Panel.Caption='0' then Panel.Caption:='_';
end;
end;
end;
end;
end;
end;
if mf[A,B]=9 then //Falls Mine getroffen wurde..
begin
ShowMessage('Du hast Verloren!');
close;
end;
end;