Salut, j'essaie de programmer un serpent, c'est que le début et je ne comprends pas, si j'appuie sur la touche s ou d, le serpent se déplace normalement par contre quand j'appuie sur q ou z, le serpent ne bouge pas!!! Quelqu'un comprends t'il pourquoi??
Merci
PS: Je développe sous devcpp 4.9.9.0
#include <iostream>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
const int T=20;
char terrain[T][T];
using namespace std;
struct maillon{
int x,y;
maillon *suiv;
};
void creapom()
{
int a,b;
srand((int)time(NULL)); //Pour initialiser le random sur l'heure de la machine pour éviter qu'a chaque éxecution les graines soient au meme endroit
a=1+rand()%((T/2)-2);
b=1+rand()%(T-2);
if(terrain[a][b]!='X')
{
terrain[a][b]='@';
}
else creapom();
}
void affiche_terrain()
{
system("CLS");
for(int i=0;i<T/2;i++)
{
for(int j=0;j<T;j++)cout<<terrain[i][j];
cout<<endl;
}
}
class serpent
{
public:
maillon *tete;
char nom[32];
int score;
//Fonction pour ajouter un élément à la tête de la liste chainée
void ajouterdeb(int abs,int ord){
maillon*aux=new maillon;
aux->x=abs;
aux->y=ord;
aux->suiv=tete;
tete=aux;
}
//Fonction pour supprimer le dernier maillon de la liste chainée
void supprfin(){
maillon *aux,*aux2;
aux=tete;
while(aux->suiv!=NULL){
aux2=aux;
aux=aux->suiv;
}
aux2->suiv=NULL;
//aux->suiv=aux2->suiv;
delete aux;
}
void recuppos(int *x,int *y){
maillon *aux= tete;
*x=aux->x;
*y=aux->y;
/*cout<<*x<<*y;
system("PAUSE");*/
}
//Fonction de préaffichage
void preaff(){
int xx,yy;
for(int i=0;i<T/2;i++){
for(int j=0;j<T;j++)
if(terrain[i][j]=='X'||terrain[i][j]=='A'||terrain[i][j]=='B')terrain[i][j]=' ';}
maillon *aux= tete;
xx=aux->x;
yy=aux->y;
terrain[xx][yy]='A';
aux=aux->suiv;
while(aux){
xx=aux->x;
yy=aux->y;
aux=aux->suiv;
terrain[xx][yy]='X';
}
}
//Fonction pour déplacer le serpent
void deplacer_serpent()
{
int x,y,ord,abs;
int c;
c=getch();
recuppos(&ord,&abs); //Fonction qui récupère la position de la tête du serpent dans la liste chainée
x=ord;
y=abs;
switch(c){
case 'z' : x=x-1;
case 's' : x=x+1;
case 'q' : y=y-1;
case 'd' : y=y+1;
}
ajouterdeb(x,y);
touche(x,y);
if(terrain[x][y]!='@')
{
supprfin();
}
else {
creapom();
score++;
}
preaff(); //Supprimer les X, A et B du terrain, mettre les éléments de la liste chainée dans la matrice
affiche_terrain();
}
void touche(int x,int y)
{
if((terrain[x][y])=='A' || (terrain[x][y])=='X' || (terrain[x][y])=='B' || (terrain[x][y])=='*')gameover();
}
void gameover()
{
system("CLS");
cout<<"*****GAME OVER******"<<endl<<"score: "<<score<<endl;
system("PAUSE");
exit(0);
}
serpent(int xi,int yi,char c)
{
score=0;
tete=NULL;
maillon*aux=new maillon;
aux->x=xi;
aux->y=yi;
aux->suiv=tete;
tete=aux;
terrain[aux->x][aux->y]=c;
}
};
void initialise_terrain()
{
for(int i=0;i<T/2;i++) //lignes
{
for(int j=0;j<T;j++)terrain[i][j]='*'; //Colonnes
}
for(int i=1;i<T/2;i++) //lignes
{
terrain[i][0]='*';
for(int j=1;j<T-1;j++)terrain[i][j]=' '; //Colonnes
terrain[i][T]='*';
}
for(int i=T/2-1;i<T/2;i++) //lignes
{
for(int j=0;j<T;j++)terrain[i][j]='*'; //Colonnes
}
creapom();
}
int main(int argc, char *argv[])
{
system("CLS");
serpent a(1,1,'A');
initialise_terrain();
a.preaff();
affiche_terrain();
for(;;)
{
a.deplacer_serpent();
}
system("PAUSE");
}