Also, erstmal entschuldigung an die mods hier, aber mir fällt kein besserer titel für das topic ein, hier mein Problem:
Es geht um einen Leveleditor für ein rundenbasierendes strategiespiel, ich bin dabei die maps zu saven.
eine map ist so aufgebaut, dass es ein zweidimensionales dynamisches array gibt (felder: array of array of tfield). ein tfield ist erstmal nichts, bis auf einen string, der angibt welche art das feld ist (typ:string);
soweit alles ganz einfach, nur wennich eine map lade, stimmt die nicht mit der abgespeicherten überein, sie ist um ein feld kleiner (in beide richtungen) und einige felder sind versetzt.
im folgenden meine beiden prozeduren zum speichern und laden, ich bitte euch dort den fehler zu finden, ich habs 100 mal durchgeguckt und in meinen augen ist da alles richtig
Speichern:
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:
| procedure tmain.save(filename:string); var filestream:Tfilestream; I,j:integer; names:shortstring; begin
I:=length(filename); names:=copy(filename,I-3,I); if names='.bwm' then filestream:=tfilestream.create(filename,fmcreate) else filestream:=tfilestream.create(filename+'.bwm',fmcreate);
I:=high(felder); filestream.write(I,sizeof(I));
I:=high(felder[0]); filestream.write(I,sizeof(I));
for I:=0 to high(felder) do for J:= 0 to high(felder[0]) do begin names:=felder[I][J].typ; filestream.write(names,sizeof(names)); end;
filestream.free; showmessage('Map gespeichert'); end; |
Laden:
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:
| procedure tmain.load(filename:string); var I,J:integer; filestream:tfilestream; names:shortstring; begin for I:=0 to high(felder) do for J:= 0 to high(felder[0]) do felder[I][J].destroy;
filestream:=tfilestream.create(filename,fmOpenRead);
filestream.read(I,sizeof(I)); setlength(felder,I); filestream.read(J,sizeof(J)); for I:=0 to high(felder) do setlength(felder[I],J);
for I:=0 to high(felder) do for J:=0 to high(felder[0]) do begin felder[I][J]:=tfield.create; filestream.read(names,sizeof(names)); felder[I][J].typ:=names; end;
filestream.free; zeichnen; anzeigen; showmessage('Map geladen'); bauen:=true;
end; |