Einzelnen Beitrag anzeigen

DirectFromHell

Registriert seit: 14. Mär 2005
14 Beiträge
 
Delphi 2005 Personal
 
#8

Re: Stack Überlaufen in einer Rekursion

  Alt 16. Jun 2005, 20:26
Danke an alle! Das funktioniert jetzt. Hab das so gelöst:
Delphi-Quellcode:
PROCEDURE TForm1.GetArea(x,y: Integer);
BEGIN (* PROC TForm1.GetArea *)
  field[x,y].hidden := false;
  field[x,y].q := false;
  IF field[x,y].Index = 14 THEN
  BEGIN (* IF field[x,y].Index = 14 *)
    IF (x>0) AND (y>0) THEN
      IF field[x-1, y-1].hidden THEN
        GetArea (x-1, y-1);
    IF (x>0) THEN
      IF field[x-1, y].hidden THEN
        GetArea (x-1, y);
    IF (y>0) THEN
      IF field[x, y-1].hidden THEN
        GetArea (x, y-1);
    IF (x<9) THEN
      IF field[x+1, y].hidden THEN
        GetArea (x+1, y);
    IF (y<9) THEN
      IF field[x, y+1].hidden THEN
        GetArea (x, y+1);
    IF (x<9) AND (y<9) THEN
      IF field[x+1, y+1].hidden THEN
        GetArea (x+1, y+1);
    IF (x<9) AND (y>0) THEN
      IF field[x+1, y-1].hidden THEN
        GetArea (x+1, y-1);
    IF (x<0) AND (y<9) THEN
      IF field[x-1, y+1].hidden THEN
        GetArea (x-1, y+1);
  END; (* IF field[x,y].Index = 14 *)
END; (* PROC TForm1.GetArea *)
Das merkwürdige ist: Mache ich diese Überprüfung nicht, dann geht die Grafikdarstellung, mache ich sie, bekomme ich Zugriffsverletzugen...
Prozedur zum "anmalen":
Delphi-Quellcode:
PROCEDURE TForm1.paintmap;
VAR y, z: Integer;
BEGIN (* PROC TForm1.paintmap *)
  FOR y := 0 TO 8 DO
    FOR z := 0 TO 8 DO
    BEGIN (* FOR 0 TO 8 *)
      IF field[y, z].hidden THEN
        iGame.Canvas.Draw(y*16, z*16, symbols[15]^)
      ELSE (* ELSE field[y, z].hidden *)
        IF field[y,z].marked THEN
          iGame.Canvas.Draw (y*16, z*16, symbols[11]^)
        ELSE (* ELSE field[y,z].marked *)
          IF field[y,z].q THEN
            iGame.Canvas.Draw(y*16, z*16, symbols[13]^)
          ELSE (* ELSE field[y,z].q *)
            iGame.Canvas.Draw(y*16, z*16, symbols[field[y,z].index]^);
    END; (* FOR 0 TO 8 *)
END; (* PROC TForm1.paintmap *)
"Take A Look To The Sky Just Before You Die,
It's The Last Time You Will!"
- James Hetfield
  Mit Zitat antworten Zitat