Aber bitte keine Kollisionsabfrage über Pixel auf dem Bildschirm...
Stell Dir vor Dein Spiel müsste komplett ohne Tastatureingaben und ohne Bildschirm laufen.
Am besten, wenn Deine Spiellogik komplett ohne Form funktioniert.
Also hast Du eine Routine der Du die Bewegungsrichtung übergibst. Und die Daten, wie Deine Räume aussehen. Bitte nicht FIX in den Code hacken...
Vielleicht ein 2 DIM-Array für X und Y
Darin stehen bytes oder was auch immer... Vielleicht ein Aufzählungstyp...
TFeldType = (ftFrei,ftWand,ftBlume);
Oder ein Byte mit der Image Nummer...
wenn Du nun den Raum aufbraust, stellst Du einfach nur die Daten aus dem Array dar...
Wenn Dein Spieler also bei Position X=10,Y=10 ist, kannst Du einfach Abfragen:
Delphi-Quellcode:
Case Bewegungsrichtung of
Hoch : if Feld[Player.X,Player.Y-1] = ftFrei
then KannHoch := true
else KannHoch := false;
Links : if Feld[Player.X-1,Player.Y] = ftFrei
then KannLinks := true
else KannLinks := false;
// usw.
end; // of case
Dann kannst Du auch einfach Deine Game-Logik testen... (z.B. mit Unittests)
Delphi-Quellcode:
Procedure TesteLogik;
begin
GameEngine.Player := TPlayer.Create(10,10);
GameEngine.Bewege(Hoch);
GameEngine.Bewege(Hoch);
Check(GameEngine.KannHoch,'Fehler in der Logik'); // Da steh eine Wand - kann nicht sein!
end;
Mavarik