Deine Geister dürfen nicht bei jedem Schritt eine neue Richtung bekommen,
sondern nur wenn sie auf ein Hindernis getroffen sind.
in Pseudocode:
Delphi-Quellcode:
procedure BewegeGeist(geist);
begin
repeat
neuePos := BrechneNeueKoordinaten(geist.aktuellePosition, geist.Richtung);
Wenn neuePos frei ist dann
geist.aktuellePosition = neuePos
ZeicheGeist(geist)
Bewegt := True
if neuePos = Spieler dann
MampfMampf
else
geist.Richtung := zufallsrichtung
until Bewegt;
end;
Man kann das noch verfeinern, wenn man zusätzlich zur Zufallsrichtung noch zufällig die Anzahl der max. Schritte (zwischen 2 und 10) festlegt.
Jeder Geist zählt dann die Schritte runter bis auf 0 (falls er nicht vorher auf Hindernis drauf) und bekommt dann eine neue Richtung.