Zitat Zitat von JULm3 Beitrag anzeigen
Phuu... und ich habe keine ahnung wie man das machen könnte...
Naja in der Theorie hast Du eine Liste mit den einzelnen Schlangenelementen. Die Liste ist sortiert, der Schlangenkopf ist ganz vorne, das Schlangenende am Ende der Liste. Jedes Element der Liste repräsentiert ein Schlangenglied auf dem Bildschirm und hat zusätzliche Informationen, wie z.B. die x/y Position innerhalb des Rasters (ersetze Liste durch Array).

Wenn die Schlange sich bei einem Tick bewegen soll, dann bedeutet das normalerweise, dass am Kopf der Schlange ein neues Element in Bewegungsrichtung angehängt wird, und dass der Schwanz der Schlange um ein Element gekürzt wird. Jetzt kann man also hergehen und immer wieder Elemente generieren und löschen, aber im Grunde ist das eher unschön, außerdem kann man eben, wie bereits gesagt, das Schwanzende zur neuen Kopfposition machen. Dazu muss man lediglich das letzte Element aus der Liste nehmen, es vorne wieder einketten und gleichzeitig die Positionen anpassen. Und zwar die Rasterposition, als auch die x/y Koordinaten des entsprechenden HTML-Elements. Das letzte Element springt also quasi von ganz hinten nach ganz vorne. Da Snake nur mit einem vorgegebenen Rhythmus arbeitet, ist die Animation damit normalerweise abgeschlossen. Dadurch werden alle Elemente permanent wiederverwendet.

Soll die Schlange verlängert werden, weil der Kopf z.B. über eine Pille gefahren ist, so werden zusätzliche Elemente benötigt. Diese werden als Kopie des letzten Elements an das Ende der Liste gehängt. Die Kopie bekommt die gleiche Position des Schlangenschwanzes, das HTML-Element liegt deckungsgleich auf dem letzten Element. Wenn die Schlange sich nun bewegt, dann wird wieder das letzte Element an den Kopf bewegt, da aber noch ein oder mehrere Elemente an der gleichen Position liegen, verharrt der Schlangenschwanz einen bis n-Ticks länger auf dieser Position, die Schlange wächst also.

Zur Kollisionserkennung geht man die Liste durch und vergleicht die neuberechnete, nächste Position des Kopfes mit den bestehenden Einträgen der Liste. Gibt es bereits ein Element mit den gleichen Koordinaten, ist das Spiel zu Ende.