hallo,
ich möchte eine art minesweeper programmieren und das meiste klappt auch.
Aber wenn man bei minesweeper auf ein leeres feld klickt, werden ja bekanntlich auch alle angrenzenden leeren felder geöffnet, ich habe das so versucht:
Delphi-Quellcode:
procedure TMinesweeper.LeerzeichenAufdecken;
var
i,j : integer;
gep : array[1..15,1..15] of Boolean;
weiter : Boolean;
begin
for i := 1 to 15 do
for j := 1 to 15 do
gep[i,j] := false;
weiter := false;
for i := 1 to 15 do
for j := 1 to 15 do
begin
if not gep[i,j] then
if Spielfeld[i,j] = 0 then
begin
RundrumAufdecken(i,j);
gep[i,j] := true;
weiter := true;
end;
end;
if weiter then
LeerzeichenAufdecken;
end;
"gep" bedeutet hier soviel wie "bereits
geprüft" und soll verhindern, dass ein leeres feld mehrmals geprüft wird.
das Feld ist 15 mal 15 felder groß und "Spielfeld" speichert die Lage der Minen,Zahlen,Leerzeichen, und nicht die der Fahnen(0 bedeutet hier leerzeichen).
Wenn ich dann aber auf ein leeres feld klicke, kommt eine
Exception "EStackOverflow" und die Zeile die rot wird ist diese hier:
Delphi-Quellcode:
procedure TMinesweeper.RundrumAufdecken(X,Y: Integer);
begin // <---- diese hier ---->
if (X=1) and (Y=1) then
begin...
bitte helft mir, den fehler zu finden, ohne die leerzeichen-aufdeck-prozedur "effizienter zu gestalten" oder so, das soll nur eine Übung für mich sein,
EDIT: Ich habe das "gep"-array jetzt zu global geschoben anstatt lokal, das hab ich bemerkt dass das falsch war
gruß,
dajuhsa