Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme sur un début de serpent

    14 mai 2006 à 22:52:09

    Donc voila je me suis lancé dernierement dans la réalisation d'un serpent ( snake ..) mais voila que j'ai un problême dont je ne trouve pas la raison !!

    Pourquoi mon serpent se divise ...
    En gros quand on lance le prog bah par moment on a deux serpents un peu comme une translation du deuxiéme sur le coté.

    Voila le code :


    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>


    int main(int argc, char *argv[])
    {
        SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER);
       
        SDL_Surface *ecran = NULL;
       
        ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE|SDL_DOUBLEBUF);
        SDL_WM_SetCaption("Snake version beta 0.02", NULL);
        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 240, 240, 240));
        SDL_Flip(ecran);
        SDL_Surface *rectangle = NULL;
        rectangle = SDL_CreateRGBSurface(SDL_HWSURFACE, 6, 6, 32, 0, 0, 0, 0);
        SDL_FillRect(rectangle, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
        int direction = 0;
        int pour = 1;
        int i =0;
        int x=0,p=0,g=0;
       
        int sauvegarde[100],t=0,sauvegard[100];
       
        for (t = 0 ; t < 100 ; t++)
        {
         sauvegarde[t]=0;
         sauvegard[t]=0;
        }
       
        SDL_Event event;
        SDL_Rect position;
        position.x = 0;
        position.y = 0;


    /* choix de la direction a prendre */
        while (pour)
        {
              while(x<10000000)
              {x=x+1;}
              x=0;

              SDL_PollEvent(&event);

             switch (event.type)
        {
        case SDL_KEYDOWN:
            switch (event.key.keysym.sym)
            {
            case SDLK_ESCAPE :
            pour = 0;
            break;
            case SDLK_DOWN :
            direction=3;
            break;
            case SDLK_UP :
            direction=4;
            break;
            case SDLK_RIGHT :
            direction=1;
            break;
            case SDLK_LEFT :
            direction=2;
            break;
            }
            break;
        }

    /* fin de la choix de la direction */

    /* sauvegardes des positions précedente*/
    for(p = 100 ; p > 0 ; p--)
    {
          g=p-1;
          sauvegarde[p]=sauvegarde[g];
          sauvegard[p]=sauvegard[g];
    }
    /*fin des sauvegarde */

    /* déplacement du serpent */
    switch (direction)
    {
     case 1 :
     position.x=position.x+6;
     position.y=position.y;
     break;
     case 2 :
     position.x=position.x-6;
     position.y=position.y;
     break;
     case 3 :
     position.y=position.y+6;
     position.x=position.x;
     break;
     case 4 :
     position.y=position.y-6;
     position.x=position.x;
     break;
    }
    /* fin du déplacement du serpent */

    /*sauvegarde de dernier déplacement*/
    sauvegard[0]=position.x;
    sauvegarde[0]=position.y;
    /* fin dernier déplamcent*/

    /* positionnement des case composant le serpent sur l'ecran*/
    for(p = 30 ; p > 0 ; p--)
    {
          position.y=sauvegarde[p];
          position.x=sauvegard[p];
          SDL_BlitSurface(rectangle, NULL, ecran, &position);
    }
    /* fin dui rajouts des cases */
           
           SDL_Flip(ecran);
           SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 240, 240, 240));
         

       

           
        }

        SDL_FreeSurface(rectangle);
        SDL_Quit();
        return 0;
    }




    je sait c'est pas superbement bien codéé mais je ne trouve pas la raison de ce dédoublement donc si vous pouviez m'aidez sa serai cool merci d'avance.

    Si vous voulez voir ce que sa donne ce que je dit :
    Image utilisateur
    Et théoriquement je devrai en avoir qu'un !

    Le while x<100000 sera biensur remplacer par la foction time de la sdl mais plsu tard apres la résolution de ce problême la.
    • Partager sur Facebook
    • Partager sur Twitter

    Probleme sur un début de serpent

    × 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