Schwanz nachziehen
Grundidee: Alle Positionen (und Richtungen!) des Schlangenkörpers in einem Array positions
speichern. Einträge entsprechend entfernen und hinzufügen. Konvention: Kopf an Position 0, Schwanz an letzter Stelle.
Einträge sollen Objects der Form {x:3, y:7, d:1}
sein, mit x,y Koordinaten und Richtung d (von 0 bis 3).
Array-Manipulationen
Eintrag an Stelle 0 hinzufügen:
positions.unshift({x:3, y:7, d:1}); // An Position 0 einfügen
Eintrag an letzter Stelle löschen:
let pos = positions.pop(); // An letzter Position löschen und in Variable speichern.
Weitere Array-Methoden sind push
(hinten anfügen), shift
(vorne entfernen) und das Universaltaschenmesser splice
.
Destructuring
Siehe auch auf MDN.
Wir können Variablen direkt zu Positionen in einem Array oder zu Schlüsseln in einem Objekt zuweisen:
let [vx,vy] = [3,-5]; let position = {x:3, y:7, d:1}; let {x,y,d} = position; // Reihenfolge nicht relevant, es müssen auch nicht alle keys verwendet werden.
Funktion ''schwanzNachziehen''
Wir programmieren eine Funktion schwanzNachziehen
, die von der Funktion step
aufgerufen wird, und zwar bevor die Schlange weiterzieht (sonst könnte man einen Unfall festellen, wo aber der Schwanz gar nicht mehr wäre).