Problème de déplacement de serpent

triso1007 Messages postés 2 Date d'inscription samedi 23 octobre 2004 Statut Membre Dernière intervention 23 novembre 2004 - 23 nov. 2004 à 14:26
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 - 23 nov. 2004 à 18:39
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

cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
23 nov. 2004 à 14:50
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++
0
triso1007 Messages postés 2 Date d'inscription samedi 23 octobre 2004 Statut Membre Dernière intervention 23 novembre 2004
23 nov. 2004 à 15:28
Merci djl ça marche nickel et désolé j'avais oublié le truc tout simple!!!!!
0
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
23 nov. 2004 à 18:39
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 !
0
Rejoignez-nous