Entwickler-Ecke

Sonstiges (Delphi) - EStackOverflow oder "der unmögliche fehler"


Fred Ferkel - Mo 17.02.03 16:14
Titel: EStackOverflow oder "der unmögliche fehler"
:hi:

ich hab da ein kleines prob... hab da so "versucht" nen snake clon zu proggen.. funktionierte auch alles ganz gut bis, ja bis ich eine weitere funktion hinzugefügt habe und jetzt kommt immer irgendeine fehlermeldung, kein plan wieso denn stack overflows bin ich nur von rekusionen bzw. fehlerhaften rekusionen gewohnt naja jedenfalls wärs echt supi wenn einer von euch oder möglichst viele eben sich mal ansehen könnten woran es liegt, der einfachheit halber hab ich mal das ganze dingelchen geuppt und bitte bitte seht es euch an..ich verzweifle noch...sonst kann ich die fehler ja immern noch irgendwie finden aber es sieht echt alles ok aus...durch debuggen hab ich nix herausgefunden...das ist echt merkwürdig..*wunder*

http://fred_ferkel.tripod.com/snake.zip
http://fred_ferkel.tripod.com/snake.rar
und eine compo-sammlung die ich verwendet habe
http://fred_ferkel.tripod.com/05_-_flatstyle.rar
http://fred_ferkel.tripod.com/05_-_flatstyle.zip

mfg Sven aka the ferkel[/url]


Fred Ferkel - Mo 17.02.03 22:24

ich habe delphi 5 und win2k
und was ich auch nicht sagte ist das man noch auf play klicken muss...

hab delphi sogar schon neu installiert aber naja..:(

sagt mal bitte auch dann bescheid wenn ihr keine ahung habt damit ich so den überblick hab ob sich überhaupt jemand um mein prob kümmert...;)

cya


Delete - Mo 17.02.03 22:54

Win2k SP3. Nach Eingabe den Namens und Klick auf Play verabschiedet sich das Programm einfach.


Fred Ferkel - Mo 17.02.03 23:09

ja genauso bei mir..:(
hast du mal versucht zu debuggen?? bei mir krepiert er direkt am anfang der readlevel prozedur..:(


Delete - Mo 17.02.03 23:13

Wenn das Ding ohne fremd Komponenten unter D6 personal laufen würde wäre das kein Problem. Aber ich habe keien Lust mir wegen diesen einem mal mir die Kompos zu installieren, weil ich weiß, dass ich sie nie wieder brauchen werde für eigene Anwendungen.


Fred Ferkel - Mo 17.02.03 23:28

achja irgendwie werden die highscores auch nicht so angeziegt wie ich mir das denke, die werden richtig geladen aber irgendwie springen die namen dann wieder auf ''...!? ohne das es dazu einen befehl gibt...

für die die keinen bock auf die kompo haben, hier mit den standard kompos:

http://fred_ferkel.tripod.com/snake_without.zip
http://fred_ferkel.tripod.com/snake_without.rar


Aya - Mo 17.02.03 23:39

Hi,

also bei mir startet das Programm.. ich klick auf dieses SchlangenBild und dann hänger er wohl in ner EndlosSchleife fest... (Keine Fehlermeldung) werd es mir gleichmal anschauen :)

Au'revoir,
Aya


Aya - Mo 17.02.03 23:43

Soo....

erste sache... mach UNBEDINGT ein DoubleBuffered mit rein..

gleich als erstes im OnCreate:

Quelltext
1:
DoubleBuffered:=True;                    


Ansonsten konnte ich nich weitertesten... sobald ich ne Pfeiltaste drücke gibt's ne AccessViolation und ich hab nich gefunden wo du auf die Tastendrücke reagierst.. :)

Au'revoir,
Aya


Fred Ferkel - Di 18.02.03 00:17

hi

thx bei mir kommt zumindest imernoch an derselben stelle der fehler (die stelle ist bei den versionen mit/ohne die komponentensammlung zwar unterschiedlich aber naj egal) die tasteneingeben verarbeite ich in der funktion

Quelltext
1:
function getkeycommands(var won,lost,quit:boolean):boolean;                    

tut mir echt leid das es so unübersichtlich ist... ich hatte die units wieder zusammengelegt um da irgendwelche fehler auszuschließen aber naja... trotzdem danke erstmal!!

cya

Moderiert von user profile iconTino: Code-Tags hinzugefügt.


Delete - Di 18.02.03 00:33

Wenn ich die SplashScreen rausnehme bekomme ich keine AccessViloation, aber ich sehe dann nur einen baby-blauen Bildschirm.


Fred Ferkel - Di 18.02.03 06:29

hi

hm und die buttons sind dann auch nicht da?? ich bekomme auch dann noch die accessviolation am anfang der loadlevelprocedur..:( aber erklär mal bitte wie dus gemacht hast

mfg Sven

ps: wenn cih die loadlevelprozedur rausnehme dann krepelt er in der paintblocksprozedur ab und wenn ich die rausnehme dann in der depaintsnake-prozedur... und bei keinem der fehler erkenne ich den grund denn wieso kann es bei den 3anweisungen an den anfängen der 3 obigen prozeduren zu soclhen exceptions kommen?

Quelltext
1:
2:
3:
  ini:=Tinifile.create(extractfilepath(application.exename)+'level.dat');
  form1.image1.canvas.brush.color:=clnavy;
  form1.image1.canvas.pen.color:=rgb(118,176,248);


Moderiert von user profile iconTino: Code-Tags hinzugefügt.
sorry fürs verplanen der tags


Fred Ferkel - Di 18.02.03 19:32

hi
ich habe jetzt soviel gelöscht wie möglich ohne den fehler zu eliminieren
jetzt müsste es einfacher sein herauszufidnen woran es liegt..aber ich hab keine ahnung...
die datei pak0.pak ist acuh in den files oben dabei.^. :!:

mfg sven

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    B_play: TButton;
    Image1: TImage;
    procedure B_playClick(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  form1:Tform1;
  pakim:array[0..18]of TBitmap;
  snakepoints:array of Tpoint;
  snakeheaddir:integer;
  gamepoints:integer;
  gottarget:integer=0;

const
  snakewidth:integer=21;
  snakestep:integer=1;
  speedvar:extended=0.005;   //1=0.005 3=0.015 7=0.035 21=0.105

function getkeycommands(var won,lost,quit:boolean):boolean;

implementation

{$R *.DFM}

procedure loaddximagelist;
var
  ms:Tmemorystream;
  buffer:array[0..1023]of char;
  bmpname:string;
  filenumber,i,currentfilepos,bmpsize,numread:integer;
  f:file;
begin
  currentfilepos:=0;
  assignfile(f,extractfilepath(application.exename)+'pak0.pak');
  reset(f,1);
  seek(f,9);
  blockread(f,filenumber,4);
  for i:=0 to filenumber-1 do
    begin
      ms:=Tmemorystream.create;
      seek(f,13+i*24);
      zeromemory(@buffer,sizeof(buffer));

      blockread(f,bmpsize,4);
      blockread(f,buffer,20);
      bmpname:=buffer;
      seek(f,13+filenumber*24+currentfilepos);
      ms.SetSize(bmpsize);

      currentfilepos:=currentfilepos+bmpsize;
      numread:=0;
      repeat
        bmpsize:=bmpsize-numread;
        if bmpsize>=sizeof(buffer)
          then blockread(f,buffer,sizeof(buffer),numread)
          else blockread(f,buffer,bmpsize,numread);
        ms.writebuffer(buffer,numread);
     until numread=0;
     ms.Position := 0;
     pakim[i]:=Tbitmap.create;
     pakim[i].LoadFromStream(ms);
     freeandnil(ms);
   end;
   closefile(f);
end;

function getkeycommands(var won,lost,quit:boolean):boolean;
var
  i:integer;
begin
  result:=false;
  if getasynckeystate(VK_ESCAPE)<0 then
           quit:=true
    else
      begin
        if (getasynckeystate(VK_LEFT)<0)and((snakeheaddir=1)or(snakeheaddir=2)) then
          begin
            snakeheaddir:=4;
            result:=true;
            setlength(snakepoints,length(snakepoints)+1);
            for i:=high(snakepoints)-1 downto 0 do
              snakepoints[i+1]:=snakepoints[i];
          end
          else if (getasynckeystate(VK_RIGHT)<0)and((snakeheaddir=1)or(snakeheaddir=2)) then
          begin
            snakeheaddir:=3;
            result:=true;
            setlength(snakepoints,length(snakepoints)+1);
            for i:=high(snakepoints)-1 downto 0 do
              snakepoints[i+1]:=snakepoints[i];
          end
          else if (getasynckeystate(VK_UP)<0)and((snakeheaddir=3)or(snakeheaddir=4)) then
          begin
            snakeheaddir:=1;
            result:=true;
            setlength(snakepoints,length(snakepoints)+1);
            for i:=high(snakepoints)-1 downto 0 do
              snakepoints[i+1]:=snakepoints[i];
          end
          else if (getasynckeystate(VK_DOWN)<0)and((snakeheaddir=3)or(snakeheaddir=4)) then
          begin
            snakeheaddir:=2;
            result:=true;
            setlength(snakepoints,length(snakepoints)+1);
            for i:=high(snakepoints)-1 downto 0 do
              snakepoints[i+1]:=snakepoints[i];
          end;
      end;
end;

procedure TForm1.B_playClick(Sender: TObject);
var
  lost,won,quit:boolean;
  keyblock:integer;
begin
  keyblock:=0;
  B_play.visible:=false;

  lost:=false;
  won:=false;
  quit:=false;
  setlength(snakepoints,2);
  snakeheaddir:=3;
  snakepoints[0]:=point(200,100);
  snakepoints[1]:=point(137,100);
  snakepoints[2]:=point(137,130);
  gamepoints:=0;
//  bitblt(form1.image1.canvas.handle,0,0,21,21,pakim[18].canvas.handle,0,0,SRCCOPY);
  form1.image1.canvas.Draw(100,100,pakim[18]);
      while not((won)or(lost)or(quit))do
        begin
          if keyblock=0 then
            if getkeycommands(won,lost,quit)then keyblock:=snakewidth;
          if keyblock>0 then dec(keyblock,snakestep);
          image1.repaint;
        end;
  b_play.visible:=true;
end;

procedure TForm1.FormDestroy(Sender: TObject);
var
  i:integer;
begin
  for i:=0 to 18 do
    if pakim[i]<>nil then freeandnil(pakim[i]);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
loaddximagelist;
end;

end.


Aya - Di 18.02.03 19:35

Hi,

ich könnte mir vorstellen das es daran liegt das du getkeycommands in einer While-Schleife aufrufst...

denn dadurch wird auch der Array snakepoints in ner WhileSchleife erhöht wenn man ne Taste drückt... eventuell geht ihm das zu schnell = StackOverflow...

Au'revoir,
Aya


Fred Ferkel - Di 18.02.03 20:02

hm naja also
1. liegen durch keyblock die tasteneingaben mind. alle 21 schleifendurchläufe auseinander und
2. hatte ich durch den highspeedcounter so eingestellt das es nicht so oft aufgerufen und
3. müsste


Quelltext
1:
2:
3:
4:
5:
6:
var
  x:array of integer;
begin
  for i:=1 to 10000
    setlength(x,length(x)+1);
end;


auch klappen

das ist aber irgendwie alles sehr merkwürdig..aber daran scheiont es nicht zu liegen...? trotzdem danke :D


Fred Ferkel - Di 18.02.03 20:26

:hi:
ich hab herausgefunden das es an dieser prozedur liegen muss:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
procedure loaddximagelist;
var
  x:Tpicture;
  ms:Tmemorystream;
  buffer:array[0..1023]of char;
  bmpname:string;
  filenumber,
  i,
  currentfilepos,
  bmpsize,
  numread:integer;
  f:file;
begin
  currentfilepos:=0;
  assignfile(f,extractfilepath(application.exename)+'pak0.pak');
  reset(f,1);
  seek(f,9);
  blockread(f,filenumber,4);
  for i:=0 to filenumber-1 do
    begin
      ms:=Tmemorystream.create;
      x:=Tpicture.create;
      seek(f,13+i*24);
      zeromemory(@buffer,sizeof(buffer));
      blockread(f,bmpsize,4);
      blockread(f,buffer,20);
      bmpname:=buffer;
      seek(f,13+filenumber*24+currentfilepos);
      ms.SetSize(bmpsize);
      currentfilepos:=currentfilepos+bmpsize;
      numread:=0;
      repeat
        bmpsize:=bmpsize-numread;
        if bmpsize>=sizeof(buffer)
          then blockread(f,buffer,sizeof(buffer),numread)
          else blockread(f,buffer,bmpsize,numread);
        ms.writebuffer(buffer,numread);
     until numread=0;
     ms.Position := 0;
     x.Bitmap.LoadFromStream(ms);
     pakim[i]:=Tbitmap.create;
     pakim[i].Width:=x.Bitmap.Width;
     pakim[i].height:=x.Bitmap.Height;
     bitblt(pakim[i].canvas.handle,0,0,pakim[i].width,pakim[i].height,x.bitmap.canvas.handle,0,0,SRCCOPY);
     freeandnil(ms);
     freeandnil(x);
   end;
   closefile(f);
end;

das problem ist nur das ich die bitmaps so aus einer adtei laden möchte damit sie nicht verändert werden... deswegen hab ich zu der obigen prozedur das untere programm geschrieben, aber wieso kommt es jetzt zu einem stack overflow?? (welcher aber nicht in dieser prozedur oben auftritt..??) wird speicher eventuell belegt und nicht wieder freigegeben? ich hab damit nicht soviel ahnung... :cry:



Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
program make_res_paks;

uses
  sysutils,
  classes,
  windows;

var
  f:Tstringlist;
  f1,f2:file;
  buffer:array[0..1023]of char;
  numread:integer;
  writepos:integer;
  totalsize:integer;
  i,tmp:integer;

  param1,param2,param3:string;

procedure suchdateien(a:string;var b:Tstringlist;c:boolean);
var
  sr:Tsearchrec;
begin
  if FindFirst(a+'*.*', faAnyFile, sr)=0 then
    begin
      if sr.name[1]<>'.' then
        if sr.size<>0
          then b.add(a+sr.name)
          else if c then
            suchdateien(a+sr.name+'\',b,c);
      while FindNext(sr) = 0 do
        if (sr.name[1]<>'.')and(sr.size<>0)
          then b.add(a+sr.name)
          else if c then suchdateien(a+sr.name+'\',b,c);
    end;
  FindClose(sr);
end;

begin
  f:=Tstringlist.create;
  f.LoadFromFile(paramstr(1));
  param1:=f.Strings[0];
  param2:=f.Strings[1];
  param3:=f.Strings[2];
  f.Clear;
  suchdateien(param1,f,false);
  f.savetofile(param2);
  (*HEADER SCHREIBEN
  anmerkung , die position der datensätze ist eigentlich günstiger als die datei
            größe...
  5 byte   versionsnummer z.B: 1790a
  4 byte   pakx.pak dateigröße
  4byte    dateianzahl im package
  4 byte   dateigröße1
  20 byte  dateiname1
  etc.
  sizeof(HEADER)=5+4+4+files*(4+20)=13+files*24
  danach folgen die dateien selbst
  *)
  assignfile(f1,param3);
  rewrite(f1,1);
  (*-  versionnummer*)
  tmp:=1;
  Blockwrite(f1,tmp,sizeof(tmp));
  buffer[0]:='a';
  Blockwrite(f1,buffer[0],sizeof(buffer[0]));
  (*-  platz halten für pakx.pak filesize*)
  zeromemory(@buffer,sizeof(buffer));
  Blockwrite(f1,buffer,4);
  (*-  anzahl der files*)
  tmp:=f.count;
  Blockwrite(f1,tmp,sizeof(integer));
  (*-  dateigröße 0..i*)
  for i:=0 to f.count-1 do
    begin
      (*-  platz halten für file1 filesize*)
      zeromemory(@buffer,sizeof(buffer));
      Blockwrite(f1,buffer,4);
      (*-  filename(max. 20 chars)*)
      if length(extractfilename(f.strings[i]))>20 then // this should not happen
        begin
          closefile(f1);
          exit;
        end;
      strpcopy(buffer,extractfilename(f.strings[i]));
      Blockwrite(f1,buffer,20);
    end;
  totalsize:=13+f.count*24;
  (*HEADER ENDE*)
  (*FILES SCHREIBEN*)
  for i:=0 to f.Count-1 do
    begin
      assignfile(f2,f.strings[i]);
      reset(f2,1);
      writepos:=filepos(f1);
      seek(f1,13+24*i);
      tmp:=filesize(f2);
      totalsize:=totalsize+tmp;
      Blockwrite(f1,tmp,sizeof(tmp));
      seek(f1,writepos);
      repeat
        zeromemory(@buffer,sizeof(buffer));
        BlockRead(f2, Buffer, SizeOf(Buffer), NumRead);
        Blockwrite(f1,buffer,NumRead);
      until (NumRead = 0);
      closefile(f2);
    end;
  seek(f1,5);
  blockwrite(f1,totalsize,sizeof(totalsize));
  closefile(f1);
  freeandnil(f);
end.


cya


UGrohne - Di 18.02.03 20:31

Ich hab das Problem bis jetzt auf eine Anweisung zurückgeführt:

Quelltext
1:
extractfilepath                    


Kein Scherz, genau an dieser Stelle steigt er mir mit einer Schutzverletzung aus. Die Version mit FlatStyle stieg zwar anders aus, aber ich wollte die net debuggen (keine FlatStyle, hab näümlich delphi7, da müsste ich wohl zuviel ändern!).

Forsche weiter...


UGrohne - Di 18.02.03 20:35

Gaaaanz komisch: Jetzt hab ich application.exename durch den richtigen Pfad ersetzt und jetzt krieg ich im Delphi ne Schutzverletzung, starte ich ohne Debugger stiegt er einfach ohne Meldung aus.... :?:

Mach morgen weiter


Fred Ferkel - Di 18.02.03 20:43

thx ür die hilfe...ja das ist ne ganz merkwürdige sache weil wenn man was rasunimmt kommt der fheler eingfach woanders..!? und jetzt bin ich mir auch nciht mehr so sicher ob es wie ich oben behauptet hab an der einen prozedur liegt...


UGrohne - Mi 19.02.03 09:01

Ja, also es liegt an einem StackOverflow, der zeigt es nur nicht richtig dran. Während ich das schreibe, läuft Dein Programm im Hintergrund (hab den Stack vergrößert). Inzwischen verbraucht das Programm schon 46MB im Speicher!. SO, jetzt sinds 50 und jetzt kommt die erste Schutzverletzung. Jetzt müssen wir nur noch rauskriegen, worans liegt.....

Gruß


UGrohne - Mi 19.02.03 09:10

So, weiter gehts, inzwischen vermute ich, dass es an der procedure loaddximagelist liegt, denn sonst führt er mir nur beim Laden der Levels dieses blocks[i].x1:=ini.readinteger('level'+s1,'block'+s2+'x1',0); Ewigkeiten bis zur Schutzverletzung aus....

Aber da dieses gnze Zeuch mit BlockRead und so, laut .NET-Meldungen eh unsicherer Code ist, bin ich der Meinung es liegt an der... weil da oben kanns net dran liegen... :?:


Fred Ferkel - Mi 19.02.03 13:08

danke!

...schön zu wissen.. :?

.net? steht da eventuell wie man es stattdessen lösen könnte?
weil ich möchte wie eventuell schon gesagt nciht das der anwender die bilder ändern kann...

cya

hm ich bekomm jetzt aber auch irgendwie probleme wenn ichs so mach:
allein daran kanns wohl net liegen..:( oder etwa doch?

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure loaddximagelist;
var
  i:integer;
begin
  for i:=0 to 18 do
    pakim[i]:=Tbitmap.create;
  pakim[0].LoadFromfile('D:\misc\progs\in progress\snake\06 - resources_pictures\astartsnake.bmp');
.
.
.
  pakim[18].LoadFromfile('D:\misc\progs\in progress\snake\06 - resources_pictures\target.bmp');
end;


UGrohne - Mi 19.02.03 14:41

Kannst mir mal den neuen Code und die Bitmaps zukommen lassen, vll. kann ich dann noch was machen

Gruß


Fred Ferkel - Mi 19.02.03 15:05

na klar! acuh wenn die bitmaps wohl nciht das problem sind ;)
der fehlr kommt bestimmt bei jder bitmap...
http://fred_ferkel.tripod.com/bitmaps.rar
http://fred_ferkel.tripod.com/bitmaps.zip


UGrohne - Mi 19.02.03 15:45

Ich bräuchte noch den LadeCode, weil ich nicht weiß, in welcher Reihenfolge Du die Dinger brauchst...

Gruß


Fred Ferkel - Mi 19.02.03 15:58

hehe ich als faules schwein hab die logischerweise nicht speziell geordnet...einfach nach dateinamen..^^

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
procedure loaddximagelist;
var
  i:integer;
begin
  for i:=0 to 18 do
    pakim[i]:=Tbitmap.create;
  pakim[0].LoadFromfile('astartsnake.bmp');
  pakim[1].LoadFromfile('ffds.bmp');
  pakim[2].LoadFromfile('sb-east.bmp');
  pakim[3].LoadFromfile('sb-north.bmp');
  pakim[4].LoadFromfile('sb-south.bmp');
  pakim[5].LoadFromfile('sb-west.bmp');
  pakim[6].LoadFromfile('sc-northeast.bmp');
  pakim[7].LoadFromfile('sc-northwest.bmp');
  pakim[8].LoadFromfile('sc-southeast.bmp');
  pakim[9].LoadFromfile('sc-southwest.bmp');
  pakim[10].LoadFromfile('se-east.bmp');
  pakim[11].LoadFromfile('se-north.bmp');
  pakim[12].LoadFromfile('se-south.bmp');
  pakim[13].LoadFromfile('se-west.bmp');
  pakim[14].LoadFromfile('sh-east.bmp');
  pakim[15].LoadFromfile('sh-north.bmp');
  pakim[16].LoadFromfile('sh-south.bmp');
  pakim[17].LoadFromfile('sh-west.bmp');
  pakim[18].LoadFromfile('target.bmp');
end;


UGrohne - Mi 19.02.03 16:37

Also, ich hab mir jetzt nochmal das Teil angeschaut, ich wills jetzt wissen. An dieser Stelle bleibt er jetzt hängen:

Quelltext
1:
2:
//PAINT TARGET FIRST ONE TIME
  form1.image1.canvas.Draw(target.x-(snakewidth div 2),target.y-(snakewidth div 2),pakim[18]);


Ich kann zwar eigentlich kein Assembler, aber laut dem Debug-Fenster endet er in einem Bereich in einer Endlosschleife und überschreibt immer dieselben Speicherbereiche.... weiß der Geier warum.


Fred Ferkel - Mi 19.02.03 17:29

hehe ja das ist schon sehr mysteriös, als wenn delphi das falsch übersetzen würde...
-> ich kann auch kein assembler...
aber wenn vielleicht einer hier doch ahnung davon hat dann kann er ja eventuell etwas mehr dazu sagen??
ich mein es wär schon ganz cool fürs forum noch ein funktionierendes 2D snake spiel als open source projekt zu haben ;)

ps: die frage die sich mir jetzt noch stellt ist, war vorher wirklich ein fehler in der loadimage prozedur?? oder ist der grund für den feher jetzt derselbe wie für den anderen?


UGrohne - Mi 19.02.03 17:54

Fred Ferkel hat folgendes geschrieben:
die frage die sich mir jetzt noch stellt ist, war vorher wirklich ein fehler in der loadimage prozedur?? oder ist der grund für den feher jetzt derselbe wie für den anderen?


Mir stellt sich eine andere Frage inzwischen: Liegts an den images? Denn ich habe die obige Prozedur verändert, dass er halt nur ein Rechteck zeichnet und das Bild weg lässt und dann kam der Fehler bei der näcshten Anweisung.... *grübel*

Gruß


Fred Ferkel - Sa 22.02.03 02:04

proggen ist doch *mist*e ey!!! :evil:
(insbesondere wenn man einfach zu blöd ist!!)
zumindest liegen meine ansprüche so hoch das ich den fehler im folgenden finde :D

Quelltext
1:
2:
3:
4:
5:
  setlength(snakepoints,2);
  snakeheaddir:=3;
  snakepoints[0]:=point(200,100);
  snakepoints[1]:=point(137,100);
  snakepoints[2]:=point(137,130);

naja jetzt schein alles planmäßig zu laufen...falls noch was bis zum release schiefgeht weiß ich ja an wen ich mcih richten hab ;)

cya