Amis programmeurs, bonjour.
Je m'intéresse depuis peu (3 jours) au C, et notamment à sa librairie graphique Allegro pour la réalisation d'un jeu type SNAKE de base, et sans prétention.
La programmation se termine. Mon problème, cependant, se situe au niveau de la détection de collision du serpent sur lui-même (s'il se bouffe la queue).
Pour vous donnez la possibilité de comprendre mon problème, il faut que je vous explique comment j'ai procédé.
- Un bitmap appelé 'tete' représentant la tete du serpent sera toujours affiché. Les coordonnées de ce bitmap sont : table_x[0] et table_y[0]
- Un bitmap appelé 'rond' représente le corps du serpent et sera dupliqué suivant le nombre de miams qu'il a mangé (c'est le principe du jeu). Les coordonnées sont calculées comme ceci :
Jusque là, pas de soucis, tout fonctionne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 for (i=10;i<=longueur_serpent);i=i+10)) draw_sprite(buffer,rond,table_x[i],table_y[i]);
Pour envisager la possibilité d'une collision, la seule idée que j'ai eu est la suivante :
Je boucle un for pour parcourir toute la table des coordonnées. Dans cette boucle je mets en place un test entre table_x[0] et table_x[i] (où i est mon compteur), de même pour table_y, et si les deux coordonnées de x et les deux coordonnées de y sont égales alors c'est qu'il y a collision...
J'ai essayé de coder ça :
Ce qui m'inquiète c'est que la détection de la collision intervient en fonction de la valeur de départ que je donne au compteur. Si par exemple je met 100, elle interviendra après un petit moment de jeu. Par contre à 1, 'collision' devient tout de suite égale à 1.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 for (i=1;i<=909;i++){ if(table_x[0]==table_x[i] && table_y[0]==table_y[i]) collision=1; }
Je ne comprends pas où ça coince, et depuis le temps que je suis dessus, j'ai perdu tout recul.
J'ai fait plusieurs autres test avec notamment les fonction 'getpixel()' et 'is_inside_bitmap()' qui sont des fonctions d'Allegro, mais sans parvenir à de meilleurs résultats. Et puis je comprends pas pourquoi mon idée ne marche pas.
Merci d'avance à tout ceux qui se pencheront sur mon problème
Partager