Partage
  • Partager sur Facebook
  • Partager sur Twitter

Morpion qui nous fait un bug étrange

il tourne a l'infini !

    10 avril 2006 à 21:29:28

    Bonjour à tous!

    Pour m'exercer un peu, j'ai voulu faire un beau morpion ! :D

    Seuleument, j'ai un problème, sur l'interface, dès que la souris bouge d'un pixel, la boucle fait un tour. Normalement, elle devrait faire un tour après que j'ai cliqué une fois.

    bon voici le code :
    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>



    int main(int argc, char *argv[])
    {
        //variables
       
        int continuer=1,numeroRond[9]={0,0,0,0,0,0,0,0,0},numeroCroix[9]={0,0,0,0,0,0,0,0,0},i=0,tour=2;

        //Positions
        //   _____
        //  |0|1|2|
        //  |3|4|5|
        //  |6|7|8|
       
        SDL_Rect positionQuadrillage,positionChoix,p[9];
       
        positionQuadrillage.x=0;
        positionQuadrillage.y=0;
       
        positionChoix.x=370;
        positionChoix.y=0;
       
        p[0].x=0;
        p[0].y=0;
       
        p[1].x=120;
        p[1].y=0;
       
        p[2].x=240;
        p[2].y=0;
       
        p[3].x=0;
        p[3].y=120;
       
        p[4].x=120;
        p[4].y=120;
       
        p[5].x=240;
        p[5].y=120;
       
        p[6].x=0;
        p[6].y=240;
       
        p[7].x=120;
        p[7].y=240;
       
        p[8].x=240;
        p[8].y=240;
       
        //Surface
        SDL_Surface *ecran,*croix,*rond,*quadrillage;
       
        ecran=SDL_SetVideoMode(490,340,32,SDL_HWSURFACE | SDL_DOUBLEBUF);
        SDL_FillRect(ecran,NULL,SDL_MapRGB(ecran->format,255,255,255));
       
        quadrillage=IMG_Load("quadrillage.bmp");
        SDL_BlitSurface(quadrillage,NULL,ecran,&positionQuadrillage);

        croix=IMG_Load("croix.bmp");
        SDL_BlitSurface(croix,NULL,ecran,&positionChoix);

        rond=IMG_Load("rond.bmp");


        SDL_Init(SDL_INIT_VIDEO);
        //Evenements

        SDL_Event event;
       
        while(continuer){
       
           SDL_WaitEvent(&event);
           switch(event.type){
              //DEBUT
             
              case SDL_QUIT:
                   continuer=0;
              break;
       
              case SDL_MOUSEBUTTONUP:
                   if(event.button.button==SDL_BUTTON_RIGHT)
                      continuer=0;
                   if(event.button.button==SDL_BUTTON_LEFT){
                   
                   //Differentes positions de la souris
                   
                   //CARRE0
                   if(event.button.x<=100 && event.button.y<=100 ){
                      if(tour==1)
                      numeroCroix[0]=1;
                      if(tour==2)
                      numeroRond[0]=1;
                   }
                     
                   //CARRE1
                   if( (event.button.x<=220 && event.button.x>120) && event.button.y<=100){
                      if(tour==1)
                      numeroCroix[1]=1;
                      if(tour==2)
                      numeroRond[1]=1;
                   }
                   
                   //CARRE2
                   if( (event.button.x<=340 && event.button.x>240) && event.button.y<=100){
                      if(tour==1)
                      numeroCroix[2]=1;
                      if(tour==2)
                      numeroRond[2]=1;
                   }
                   
                   //CARRE3 
                   if( event.button.x<=100 && (event.button.y<=220 && event.button.y > 120)){
                      if(tour==1)
                      numeroCroix[3]=1;
                      if(tour==2)
                      numeroRond[3]=1;
                   }
                     
                   //CARRE4
                   if((event.button.x<=220 && event.button.x>120) && (event.button.y<=220 && event.button.y > 120)){
                      if(tour==1)
                      numeroCroix[4]=1;
                      if(tour==2)
                      numeroRond[4]=1;
                   }
                     
                   //CARRE5
                   if((event.button.x<=340 && event.button.x>240) && (event.button.y<=220 && event.button.y > 120)){
                      if(tour==1)
                      numeroCroix[5]=1;
                      if(tour==2)
                      numeroRond[5]=1;
                   }
                   
                   //CARRE6
                   if(event.button.x<=100 && event.button.y>240){
                      if(tour==1)
                      numeroCroix[6]=1;
                      if(tour==2)
                      numeroRond[6]=1;
                   }
                   
                   //CARRE7
                   if((event.button.x<=220 && event.button.x>120)&& event.button.y>240){
                      if(tour==1)
                      numeroCroix[7]=1;
                      if(tour==2)
                      numeroRond[7]=1;
                   }
                     
                   //CARRE8
                   if((event.button.x<=340 && event.button.x>240) && event.button.y>240){
                      if(tour==1)
                      numeroCroix[8]=1;
                      if(tour==2)
                      numeroRond[8]=1;
                   }
                     
                   }
              break;
       
              //FIN
              }
        for(i=0;i<9;i++){
           if(numeroRond[i]==1)
           SDL_BlitSurface(rond,NULL,ecran,&p[i]);
        }
       
        for(i=0;i<9;i++){
           if(numeroCroix[i]==1)
           SDL_BlitSurface(croix,NULL,ecran,&p[i]);
           }
       
        if(tour==2){
           tour=1;
           SDL_BlitSurface(croix,NULL,ecran,&positionChoix);
        }
       
        else if(tour==1){
           tour=2;
           SDL_BlitSurface(rond,NULL,ecran,&positionChoix);
        }
       
       
        SDL_Flip(ecran);
        }
       
        //Liberation des surfaces
       
        SDL_FreeSurface(rond);
        SDL_FreeSurface(quadrillage);   
        SDL_FreeSurface(croix);

        return EXIT_SUCCESS;
    }


    Alors, j'ai mis des commentaires pour être plus clair, si je me suis planté dès le début sur la structuration du code dîtes le moi, je recommencerai.
    • Partager sur Facebook
    • Partager sur Twitter
      11 avril 2006 à 21:19:51

      Y'as personne ???? :(

      Donc je réexplque en gros, dans mon code je veux que la boucle principale fasse un tour au bout d'un clic de souris et là et elle fait un tour des que la souris bouge d'un pixel.



      • Partager sur Facebook
      • Partager sur Twitter
        11 avril 2006 à 22:26:57

        Tu ne peux pas l'éviter !
        Dès que tu génères un évènement (en bougeant la souris par exemple) la boucle fera un tour. A toi de repenser le code de ton programme en conséquence pour que ça ne pose plus problème. Je peux pas le faire pour toi ;)
        • Partager sur Facebook
        • Partager sur Twitter

        If you'd like to join us, read "How do we work at OpenClassrooms"! :)

          11 avril 2006 à 22:50:09

          ok je pense avoir trouvé le truc de toute facon.
          • Partager sur Facebook
          • Partager sur Twitter
            12 avril 2006 à 1:02:54

            Je crois que j'aurais ta réponse:


            SDL_Event event;
            while (continuer)
            {
            while(&event.type != SDL_MOUSEBUTTONDOWN);
            {
            SDL_WaitEvent(&event);
            }
            }


            J'y ai été un peu avec le parcoeur, il est possible qu'il y ait une érreur dans le code, mais le principe est là, tu fais une boucle qui recommence tant et aussi longtemps que l'on ne clique pas avec le bouton.
            • Partager sur Facebook
            • Partager sur Twitter
              12 avril 2006 à 3:56:30

              Sauf que la tu peux plus quitter ;)
              (ni faire rien d'autre d'ailleurs)
              • Partager sur Facebook
              • Partager sur Twitter
                12 avril 2006 à 5:28:17

                Citation : Dravick

                Sauf que la tu peux plus quitter ;)
                (ni faire rien d'autre d'ailleurs)




                SDL_Event event;
                while (continuer)
                {
                while(&event.type != SDL_MOUSEBUTTONDOWN || &event.type != SDL_QUIT || etc....);
                {
                SDL_WaitEvent(&event);
                }
                }
                ^^
                • Partager sur Facebook
                • Partager sur Twitter

                Morpion qui nous fait un bug étrange

                × 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