Deine Geister dürfen nicht bei jedem Schritt eine neue Richtung bekommen,
sondern nur wenn sie auf ein Hindernis getroffen sind.
in Pseudocode:
procedure BewegeGeist(geist);
begin
repeat
neuePos := BrechneNeueKoordinaten(geist.aktuellePosition, geist.Richtung);
Wenn neuePos frei ist dann
geist.aktuellePosition = neuePos
ZeicheGeist(geist)