Suite à une mission et tout juste commencer avec libGDX en construisant un petit clone de Snake, j'ai rencontré un problème pour lequel j'aurai probablement honte dans un petit moment.
J'ai actuellement une tête de serpent (un simple rectangle à ce stade) se déplaçant sur la toile du jeu. La façon la plus simple de construire le reste du serpent était de faire en sorte que la tête possède une Java Linked Linked List of SnakeElements dont la taille augmenterait / diminuerait en fonction de ce que fait le joueur.
Avoir cette liste de SnakeElements suivre la tête cependant s'est avéré non trivial.
La fonction actuelle faisant cela est la suivante et est appelée chaque fois que la tête met à jour sa position:
private void moveTail (float x, float y, int direction) {
float tmpx, tmpy;
int tmpdirection;
int offset_x, offset_y;
for (SnakeSegment snse : tail) {
offset_x = 0;
offset_y = 0;
tmpx = snse.getX();
tmpy = snse.getY();
tmpdirection = snse.getDirection();
switch(direction) {
case 0:
offset_x = 0;
offset_y = -(2 + snse.width);
break;
case 1:
offset_x = -(2 + snse.width);
offset_y = 0;
break;
case 2:
offset_x = 0;
offset_y = (2 + snse.width);
break;
case 3:
offset_x = (2 + snse.width);
offset_y = 0;
break;
default:
System.out.println("wrong direction");
}
snse.setX(x + offset_x);
snse.setY(y + offset_y);
snse.setDirection(direction);
x = tmpx;
y = tmpy;
direction = tmpdirection;
}
}
ce qui se traduit malheureusement par ce comportement:
Tous les conseils sur la façon de faire une queue de serpent qui fonctionne correctement seraient très appréciés :)