Bonjour a tous voila j'essaie de faire un snake et j'ai a moitié réussi (littéralement vous allez voir) le probleme est que la pomme je peux la manger en allant vers la gauche et le haut mais en allant vers la droite et le bas ben la pomme est mangée mais je grandi pas et elle réapparait pas :S.
ben voila le bout de code qui beug :
int jouer(int carte[][NB_BLOC_LARGEUR],SDL_Surface *ecran,serpent snake,int tempsPrecedent,int continuer,int tdirection[][NB_BLOC_LARGEUR]) { int direction=0; int deplace=0; int deplaceQ=0; int * pcontinuer; int i=0,j=0;
pcontinuer=&continuer; int y=0,x=0; int pomme=1; int tempsActuel; int ok=0; //interval de temps régulier
tempsActuel=SDL_GetTicks(); if(tempsActuel-tempsPrecedent>40)//si ca fait 30ms qu'on a pas bougé { //déplacement du snake for(y=0;y<NB_BLOC_HAUTEUR;y++) { for(x=0;x<NB_BLOC_LARGEUR;x++) { switch(carte[y][x]) { case TETE://si on arrive a la tete if(!deplace) {
direction=snake.GetDirection(); if(direction==DROITE)//si il doit aller vers la droite { if((carte[y][x+1]==RIEN)&&((x+1)<NB_BLOC_LARGEUR))//regarder qu'il ya rien devant ou qu'il ne dépasse pas les limites {
carte[y][x+1]=TETE;
carte[y][x]=CORPS;
tdirection[y][x]=DROITE;//la tete est allée a droite en passant par ce bloc
deplace=1; } elseif((carte[y][x+1]==OBJECTIF)&&((x+1)<NB_BLOC_LARGEUR))//regarder si pomme il y a {
carte[y][x+1]=TETE;
carte[y][x]=CORPS;
tdirection[y][x]=DROITE;
pomme=0;
deplace=1; } else *pcontinuer=0; //sinon perdu } elseif(direction==GAUCHE)// si le serpent va vers la gauche { if((carte[y][x-1]==RIEN)&&((x-1)>0)) {
carte[y][x-1]=TETE;
carte[y][x]=CORPS;
tdirection[y][x]=GAUCHE;
deplace=1; } elseif((carte[y][x-1]==OBJECTIF)&&((x-1)>0)) {
carte[y][x-1]=TETE;
carte[y][x]=CORPS;
tdirection[y][x]=GAUCHE;
pomme=0;
deplace=1; } else *pcontinuer=0; } elseif(direction==BAS)//si le serpent va en bas { if((carte[y+1][x]==RIEN)&&((y+1)<NB_BLOC_HAUTEUR)) {
carte[y+1][x]=TETE;
carte[y][x]=CORPS;
tdirection[y][x]=BAS;
deplace=1; } elseif((carte[y+1][x]==OBJECTIF)&&((y+1)<NB_BLOC_HAUTEUR)) {
carte[y+1][x]=TETE;
carte[y][x]=CORPS;
tdirection[y][x]=BAS;
pomme=0;
deplace=1; } else *pcontinuer=0; } elseif(direction==HAUT)//si le serpent va en haut { if((carte[y-1][x]==RIEN)&&((y-1)>0)) {
carte[y-1][x]=TETE;
carte[y][x]=CORPS;
tdirection[y][x]=HAUT;
deplace=1; } elseif((carte[y-1][x]==OBJECTIF)&&((y-1)>0)) {
carte[y-1][x]=TETE;
carte[y][x]=CORPS;
tdirection[y][x]=HAUT;
pomme=0;
deplace=1; } else *pcontinuer=0; } } break; case QUEUE://si on trouve la queue if(!deplaceQ)//et que l'on l'a pas déja deplacée { if(pomme==1)// si on a pas mangé de pomme {
carte[y][x]=RIEN;//la queue disparait if(tdirection[y][x]==DROITE)//si la tete a pris a droite lors de son passage a ce bloc {
carte[y][x+1]=QUEUE;
tdirection[y][x]=5;
deplaceQ=1; } if(tdirection[y][x]==GAUCHE) {
carte[y][x-1]=QUEUE;
tdirection[y][x]=5;
deplaceQ=1; } if(tdirection[y][x]==HAUT) {
carte[y-1][x]=QUEUE;
tdirection[y][x]=5;
deplaceQ=1; } if(tdirection[y][x]==BAS) {
carte[y+1][x]=QUEUE;
tdirection[y][x]=5;
deplaceQ=1; } } elseif(pomme==0) {
carte[y][x]=QUEUE;//sinon la queue reste
deplaceQ=1; //score augmente //pomme réapparait while(!ok) {
i = pif(NB_BLOC_LARGEUR);
j = pif(NB_BLOC_HAUTEUR); if(carte[j][i]==RIEN) {
ok=1;
carte[j][i]=OBJECTIF; } } } break; } } } }
charger(carte,ecran,snake);
tempsPrecedent=tempsActuel; } else//si ca fait moins de 30ms alors {
SDL_Delay(40-(tempsActuel-tempsPrecedent-1));
} return tempsPrecedent;
}
expliquation : pour avancé le serpent représentant un objet stoque la direction dans laquelle il doit aller la tete avance et vérifie si il n'ya pas de mur ou de pomme si il ya une pomme alors pomme=0 et alors au lieu de garder la meme taille le serpent s'agrandi et la pomme est placée dans un endroit au pif.
a mon avis l'erreur viens soit de ce bout :
elseif(direction==BAS)//si le serpent va en bas { if((carte[y+1][x]==RIEN)&&((y+1)<NB_BLOC_HAUTEUR)) {
carte[y+1][x]=TETE;
carte[y][x]=CORPS;
tdirection[y][x]=BAS;
deplace=1; } elseif((carte[y+1][x]==OBJECTIF)&&((y+1)<NB_BLOC_HAUTEUR)) {
carte[y+1][x]=TETE;
carte[y][x]=CORPS;
tdirection[y][x]=BAS;
pomme=0;
deplace=1; }
soit de celui la :
elseif(pomme==0) {
carte[y][x]=QUEUE;//sinon la queue reste
deplaceQ=1; //score augmente //pomme réapparait while(!ok) {
i = pif(NB_BLOC_LARGEUR);
j = pif(NB_BLOC_HAUTEUR); if(carte[j][i]==RIEN) {
ok=1;
carte[j][i]=OBJECTIF; } } }
probleme de snake
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.