Partage
  • Partager sur Facebook
  • Partager sur Twitter

probleme de snake

Sujet résolu
Anonyme
    9 août 2006 à 19:49:09

    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;
                            }
                            else if ((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
                        }
                        else if(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;
                            }
                            else if((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;
                        }
                        else if(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;
                            }
                            else if((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;
                        }
                        else if(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;
                            }
                            else if((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;
                            }
                        }
                        else if(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 :

    else if(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;
                            }
                            else if((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 :

    else if(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;
                                }
                            }
                        }
    • Partager sur Facebook
    • Partager sur Twitter

    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.
    • Editeur
    • Markdown