AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

minesweeper problem

Ein Thema von dajuhsa · begonnen am 4. Mär 2008 · letzter Beitrag vom 4. Mär 2008
Antwort Antwort
Benutzerbild von dajuhsa
dajuhsa

Registriert seit: 20. Apr 2007
397 Beiträge
 
Turbo Delphi für Win32
 
#1

minesweeper problem

  Alt 4. Mär 2008, 19:23
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
das Essen ist wie das Internet - Downstream ist immer angenehmer als Upstream
-
Warum missbraucht die ganze Programmierwelt Images als Paintboxen
  Mit Zitat antworten Zitat
Benutzerbild von dajuhsa
dajuhsa

Registriert seit: 20. Apr 2007
397 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: minesweeper problem

  Alt 4. Mär 2008, 19:42
ok, sry ich hab den fehler wohl wirklich schnell gefunden :
gep darf natürlich noch nicht nach einer prüfung zurückgesetzt werden, sondern erst beim nächsten "öffnen" eines leerfeldes^^.
Außerdem darf es nicht Spielfeld heißen, denn das Spielfeld "kennt" ja schon alle Felder mit dem Wert 0, sondern die Benutzeroberfläche des Spielers, damit nur die Felder um die offenen Leerfelder aufgedeckt werden.

Was diese Exception bedeutet weiß ich zwar immer noch nicht, aber egal^^''
das Essen ist wie das Internet - Downstream ist immer angenehmer als Upstream
-
Warum missbraucht die ganze Programmierwelt Images als Paintboxen
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#3

Re: minesweeper problem

  Alt 4. Mär 2008, 22:06
Bei dem Fehler würde ich sagen, dass du bei einer Rekursion einen Fehler gemacht hast und damit dich so tief verschachtelst, dass der Stack auf dem die verschachtelten Aufrufe abgelegt werden, einfach voll ist. Probiert doch mal mitzuzählen, wie oft diese Funktion aufgerufen wird und ob dein Abbruchkriterium richtig ist.

Zu den gep: mit der Abkürzung musstest du im Code 20 Zeichen weniger tippen, dafür eine Erklärung schreiben, die grob 30 Zeichen lang ist. Fällt dir was auf? Du liest den Code weitaus häufiger, als du ihn schreiben musst. Und da ist es schneller, die paar Zeichen noch zu schreiben, als bei jedem durchlesen erst mal nachdenken zu müssen, was du da eigentlich gemeint hast.
Ein Prof in diesem Semester hat nie einen Bezeichner unter 10 Zeichen benutzt, was am Anfang recht nervig war, aber im Endeffekt doch sinnvoll. (so lange es nicht nur ein Variabel in ener for-schleife ist, wobei du die vll doch eher x und y nennen solltest, so kann ich mir etwas besser vorstellen, was eigentlich was bedeutet).
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz