Problème de déplacement de serpent

Signaler
Messages postés
2
Date d'inscription
samedi 23 octobre 2004
Statut
Membre
Dernière intervention
23 novembre 2004
-
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
24 juillet 2011
-
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
#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");
}

3 réponses

Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
break; pour quitter le switch et pas descendre dedans

switch(c){
case 'z' : x=x-1;break;
case 's' : x=x+1;break;
case 'q' : y=y-1;break;
case 'd' : y=y+1;break;
default:;
}

mais serieux tu veux pas commencer par apprendre un peu ?
la poo faut quand meme un minimun de reflexion, et utilise la stl au lieu de faire des classes qui fuient

c'est plus du c que du c++
Messages postés
2
Date d'inscription
samedi 23 octobre 2004
Statut
Membre
Dernière intervention
23 novembre 2004

Merci djl ça marche nickel et désolé j'avais oublié le truc tout simple!!!!!
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
24 juillet 2011

Et oui, comme quoi parfois la programmation apparait ici comme de la magie ^^ nan, lol, sans déconner, ça m'arrive aussi ce genre de trucs! mdr, et apres tu cherches pendant un bon moment si tu penses pas à ces choses simples ^^
Allez, bon courage pour ton prog'....j'espère le voir prochainement sur cppfrance :-)

Gendal67, à votre service !