Schalte mal deine Bereichsprüfung ein, dann wirst du sofort einen ganz tollen Fehler bekommen, sobald du ein Element aufgesammelt hast.
So hier mal die Lösung für das Problem...
Delphi-Quellcode:
// Letztes Feld dannach wieder begehbar machen
if (FSnakey.p[High(FSnakey.p)].X >= 0)
and (FSnakey.p[High(FSnakey.p)].Y >= 0) then
begin
FBelegt[FSnakey.p[High(FSnakey.p)].X, FSnakey.p[High(FSnakey.p)].Y] := false;
end;
// alles "vorshiften" - von hinten nach vorne, sonst waere
// die Schlange ja nur 1 Kaestchen groß, egal welches Level
for i := High(FSnakey.p) downto 1 do
begin
FSnakey.p[i].x := FSnakey.p[i - 1].x;
FSnakey.p[i].y := FSnakey.p[i - 1].y;
if (FSnakey.p[i].x >= 0) and (FSnakey.p[i].y >= 0) then begin
FBelegt[FSnakey.p[i].x, FSnakey.p[i].y] := true;
end;
end;
Deine Anwendung hat auch noch Speicherlecks, füge mal folgendes hinzu...
Delphi-Quellcode:
procedure TfrmMain.FormDestroy(Sender: TObject);
begin
FBackground.free;
FGoodies.free;
FLog.free;
end;