Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème dans mes événements

Sujet résolu
    11 avril 2006 à 18:16:15

    :) Bonjour amis zéro

    J'ai commencé à créer le jeu "snake". La première chose que j'ai faite est de pouvoir le déplacer manuellement dans toutes les directions et de le stopper une fois à la fin de la fenêtre ^^

    Sauf que ... il ne va pas du tout dans les directions que je veux, et parfois laisse des trainée noires ou parfois blanches o_O

    Quand il doit aller à gauche il part au nord ouest et marque proprement son passage :-°
    :euh: Bref je comprends pas bien ce qui se passe dans mon fichier source, pourtant pas très compliqué ...


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

    #define hauteur  800
    #define longueur  600
    #define long_snake 135
    #define haut_snake 9

    int main(int argc, char *argv[])
    {

    //Ouverture de la SDL , mode VIDEO et DOUBLEBUF
        if (SDL_Init(SDL_INIT_VIDEO) ==-1)
        {
            fprintf(stderr,"Erreur : %s\n",SDL_GetError());
            exit(EXIT_FAILURE);
        }


    //l'écran et le snake
    SDL_Surface *ecran = NULL, *snake = NULL;

    //Paramètres de l'écran
    ecran = SDL_SetVideoMode(800,600,32,SDL_HWSURFACE|SDL_DOUBLEBUF);

    //Coloration de l'écran
    SDL_FillRect(ecran,NULL,SDL_MapRGB(ecran->format,255,255,255));

    //Chargement du serpent :
    snake = IMG_Load("snake.jpg");

    //Position serpent + Collage
    SDL_Rect position_snake ;

    position_snake.x = 200;
    position_snake.y = 200;

    SDL_BlitSurface(snake,NULL,ecran,&position_snake);

    //Chargement des événements
    SDL_Event event;
    SDL_EnableKeyRepeat(1,1);
    int continuer = 1;
    while (continuer)
    {
        SDL_WaitEvent(&event);
        switch(event.type)
        {

            case SDL_QUIT:
            continuer = 0;
            break;


            case SDL_KEYDOWN:
            {
                switch(event.key.keysym.sym)
                {
                //Le serpent va à droite
                case SDLK_RIGHT:
                position_snake.x++;
                SDL_BlitSurface(snake,NULL,ecran,&position_snake);
                break;

                //Le serpent va à gauche
                case SDLK_LEFT:
                position_snake.x--;
                SDL_BlitSurface(snake,NULL,ecran,&position_snake);

                //Le serpent descend
                case SDLK_UP:
                position_snake.y--;
                SDL_BlitSurface(snake,NULL,ecran,&position_snake);
                break;
                //Le serpent monte
                case SDLK_DOWN:
                position_snake.y++;
                SDL_BlitSurface(snake,NULL,ecran,&position_snake);
                break;
                }

                //Si le serpent déborde à droite,le jeu quitte
                if ((position_snake.x - (long_snake/2)-1)  > longueur)
                    {
                        continuer = 0;
                    }


                SDL_Flip(ecran);


            }
        }

    }


    SDL_FreeSurface(snake);

    SDL_Quit();
    return EXIT_SUCCESS;
    }




    ^^ Thanks in advance
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      11 avril 2006 à 18:19:44

      Ru aurais dû suivre le code "squelette" que donne M@téo: tu modifies la position, puis tu met la fenêtre avec la couleur de fond puis tu reblittes dessus (va voir dans le cours c'est mieux expliqué)
      • Partager sur Facebook
      • Partager sur Twitter
        11 avril 2006 à 18:22:33

        :) merci, cela m'enlève désormais ces foutus traces que laissait le serpent, j'aurais du y penser ...

        :-° Mais je n'arrive toujours pas à partir sur la gauche, il part au nord-ouest
        • Partager sur Facebook
        • Partager sur Twitter
          11 avril 2006 à 18:27:04



                      //Le serpent va à gauche
                      case SDLK_LEFT:
                      position_snake.x--;
                      SDL_BlitSurface(snake,NULL,ecran,&position_snake);

                      //Le serpent descend
                      case SDLK_UP:
                      position_snake.y--;
                      SDL_BlitSurface(snake,NULL,ecran,&position_snake);
                      break;


          C'est un oubli de break qui crée ton erreur.
          • Partager sur Facebook
          • Partager sur Twitter
            11 avril 2006 à 18:30:58

            o_Oo_Oo_Oo_O

            Dire que j'ai oublié SA !!!

            J'en reviens pas, en tout cas merci vieux sa marche mnt :p

            ( Faudra que je fasse plus attention :-° )
            • Partager sur Facebook
            • Partager sur Twitter

            Problème dans mes événements

            × 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