begin process at 2012 05 29 14:40:02
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Problème de déplacement de serpent


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème de déplacement de serpent

mardi 23 novembre 2004 à 14:26:07 | Problème de déplacement de serpent

triso1007

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");
}
mardi 23 novembre 2004 à 14:50:36 | Re : Problème de déplacement de serpent

djl

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++
mardi 23 novembre 2004 à 15:28:27 | Re : Problème de déplacement de serpent

triso1007

Merci djl ça marche nickel et désolé j'avais oublié le truc tout simple!!!!!
mardi 23 novembre 2004 à 18:39:21 | Re : Problème de déplacement de serpent

Gendal67


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 !


Cette discussion est classée dans : int, void, terrain, serpent, suiv


Répondre à ce message

Sujets en rapport avec ce message

équation et tableaux [ par cabarrus ] je ne trouve pas l'erreur dans mon programme?#include#includeint deltanul(int);float deltainf(float);float deltasup(float);void main(void){float a,b,c Fch. Header :: CONIO.H [ par TontOnDuWeb ] Pour ce que ca interesse (avec vc++ les fonctions suivantes e sont pas incluse (du moins je crois...))>>#if !defined(__CONIO_H)#define __CONIO_H#if !d void et int [ par xionoxid ] SalutC koi la difference entre unvoid a;et int a; ?? Snake tsssssssssss aidez moiiiiiiii [ par AmK ] Salut ,Je suis en train de coder un snake et la je crois avoir bien compris le principe de l'algo mais niveau code ça foire je sais pas pourquoi voila class.... [ par Tautau ] voila j'ai un petit prob lors de ma compilation et j'ai un test dessus lundi :#include "conio.h"#include "iostream.h"class C_Tableau{ private: pb de Z-buffer ac openGL -> Help! [ par Arnaud16022 ] bonjour tt le monde!quelqun pourrait me dire pourqoui le Z-buffer marche pas?pasque le dernier (4ème) triangle dessiné apparait tjs au dessus, meme s' pb de compilation [ par norton ] bonjour, je desir compiler le code suivant mais j'ai une erreur.mon code :#include #include #include void Display();void Reshape(int,int);int main( in une fiche de renseignement [ par cabarrus ] je cherche à faire un programme qui demande des renseignements pour pouvoir ensuite les affiché comme une fiche d'identité!!!voici monprogramme mais m Probleme fonctions [niveau debutant] [ par zzzzzz ] en fait je voulais faire une applic qui nous demande un nombre de part et de fin si on met par exemple 2 et 7 sa ecrira 234567 grace a une boucle. le getch ou getchar() ? [niveau debutant] [ par zzzzzz ] :P //---------------------------------------------------------------------------#include #include // getch()#include // c


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,671 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales