Hi,
Ich arbeite gerade an einen Snake Klon und stehe vor dem Problem, dass ich den typischen Bewegungsablauf der Schlange nicht richtig hinbekomme.
Derzeit bin ich soweit, dass das ganze Spiel zwar funktioniert, allerdings wenn meine Schlange schon mehr als aus nur 1 “Teilchen” besteht und ich dann bei Bewegung die Richtung ändere, dann ändert sich sofort die komplette Schlange. Die Schlange ist also komplett starr wie ein Lineal.
Die Theorie ist mir eigentlich klar:
- Schlangenkopf zeichnen
- Im nächsten Schritt dann die Koordinaten des vordersten Teils an den 2. Teil weitergeben usw.
- Letzten Teil löschen bzw. nicht mehr zeichnen
Aber ich weiß einfach nicht wie ich es genau umsetzten soll…
Hier mal mein bisheriger Schlangen-Heichnungsalgorithmus:
// Schlangenkopf zeichnen
g2.fillRect(SnakeSpiel.schlangeX, SnakeSpiel.schlangeY, 10, 10);
//Schlangenrumpf zeichnen
for(int i=1; i<SnakeSpiel.liste.size(); i++) {
if(SnakeSpiel.schlangeLinks == true) {
g2.fillRect(SnakeSpiel.schlangeX+13*i, SnakeSpiel.schlangeY, 10, 10);
}else if(SnakeSpiel.schlangeRechts == true) {
g2.fillRect(SnakeSpiel.schlangeX-13*i, SnakeSpiel.schlangeY, 10, 10);
}else if(SnakeSpiel.schlangeOben == true) {
g2.fillRect(SnakeSpiel.schlangeX, SnakeSpiel.schlangeY+13*i, 10, 10);
}else if(SnakeSpiel.schlangeUnten == true) {
g2.fillRect(SnakeSpiel.schlangeX, SnakeSpiel.schlangeY-13*i, 10, 10);
}
}
Erklärung zum Code:
- Sobald der Kopf ein Essen berührt, wird in SnakeSpiel.liste (ist eine ArrayList welche Booleans enthält) ein Boolean “true” hinzugefügt. (Typ der Liste ist ja egal, es geht nur um die Anzahl der Schlangenkörperteile)
- Die Variablen “schlangeLinks”… werden auf true gesetzt, wenn die Schlange nach links… läuft
- schlangeX, schlangeY sind die Koordinaten des Kopfteils, welche in der Game-Loop ständig geändert werden (je nachdem welche Richtung gerade aktiv ist)