Partage
  • Partager sur Facebook
  • Partager sur Twitter

Jeu de la vie.

Bug tableau.

    23 janvier 2006 à 0:25:42

    Bonjour à tous,
    alors voila j'ai fait un jeu de la vie en opengl, mais j'ai quelques bugs assez ennuyeux:
    il me remet tout le temps les deux même tableaux,
    et il me faits des symboles bizarres sur les cotés.
    Voici un zip ou se trouve le projet ainsi que son exe(projet opengl/glut sous devcpp)
    http://portnaouak59.free.fr/lifegame.rar

    Merci de votre aide dans l'éradiction de ses bugs.
    EDIT: je me suis trompé dans le format du fichier.
    • Partager sur Facebook
    • Partager sur Twitter
      23 janvier 2006 à 8:27:02

      Peut tu mettre la source, (par precotion)
      • Partager sur Facebook
      • Partager sur Twitter
        23 janvier 2006 à 8:37:59

        Ton lien est dead.
        Je sais pas si ça peut t'aider en attendant de voir ta source->
        #include <stdlib.h>
        #include <SDL/SDL.h>
        #include <SDL/SDL_ttf.h>
        #include <windows.h>
        #include <SDL/FonctSDL.h>
        #include <time.h>

        #define COTE 90

        SDL_Surface* font = LoadImageSDL("font.bmp",1);


        int Tableau[COTE][COTE] = {0}, Tableau_bis[COTE][COTE] = {0};

        void Distrib(){     
                for(int Nbre = (rand()%(COTE*COTE))+1 ; Nbre !=0 ; Nbre--)
                {
                        int y=(rand()%COTE)+1;
                        int x=(rand()%COTE)+1;
                        Tableau[x][y]=1;
             }
        }



        int main (int argc, char *argv[])
        {
           Init_Lib(800, 600, 32);
           
           SDL_ShowCursor(0);
           srand(time(NULL));
           Distrib();
           int Compte=0;
           int i;
           SDL_Surface* firstscreen;
           firstscreen = SDL_LoadBMP("life.bmp");   
            SDL_Rect rect1;          // structure rectangle
            firstscreen = SDL_LoadBMP("life.bmp");      // charge l'image
            // on dessine
            rect1.x = 0;
            rect1.y = 0;
            rect1.w = 7;                // défini le rectangle
            rect1.h = 7;
             
           
           
           

            while(1)
            {

                        UpdateEvents();
                        if (key[SDLK_RETURN]){ SDL_FreeSurface (font);Liberer_Ress(); return (0);}
                       
                       
                        for (int k=0 ; k<COTE ; k++)
                        {
                                for (i=0 ; i<COTE ; i++)
                                        Tableau_bis[k][i] = Tableau[k][i];
                        }

                        for (int k=0 ; k<COTE ; k++)
                        {
                                for (i=0 ; i<COTE ; i++)
                                {
                                        Compte = 0;
                                        if (Tableau[k+1][i+1]==1)Compte++;
                                        if (Tableau[k+1][i]==1)Compte++;
                                        if (Tableau[k+1][i-1]==1)Compte++;
                                         
                                        if (Tableau[k-1][i+1]==1)Compte++;
                                        if (Tableau[k-1][i]==1)Compte++;
                                        if (Tableau[k-1][i-1]==1)Compte++;
                                     
                                        if (Tableau[k][i+1]==1)Compte++;
                                        if (Tableau[k][i-1]==1)Compte++;
                       
                                        if (Compte != 2)
                                                Tableau_bis[k][i] = 0;
                                        if (Compte == 3)
                                                Tableau_bis[k][i] = 1;
                                }
                        }
               
                        for (int k=0 ; k<COTE ; k++)
                        {
                                for (i=0 ; i<COTE ; i++)
                                        Tableau[k][i] = Tableau_bis[k][i];
                        }
                                       
                        for (int j=0 ; j<COTE ; j++)
                        {
                                for (int l=0 ; l<COTE ; l++)
                                {
                                       
                                        if(Tableau[j][l]==1){
                                                             rect1.x =j*10;
                                                             rect1.y =l*10;
                                                             SDL_BlitSurface(firstscreen,NULL,screen,&rect1);}
                                        else{AffichRect (j*10, l*10, 10, 10, 0, 0, 0);}
                                }
                        }
                     


           
           SDL_Flip(screen);

                       
                 
                       
                       


            }
        } 
        • Partager sur Facebook
        • Partager sur Twitter
          23 janvier 2006 à 9:10:34

          Bon j'ai résolu mon probléme en copiant la fonction a l'endroit ou j'en avais besoin, mais bon, ca ne m'interresse pas vraiment car j'aimerai pouvoir reutiliser le fichier class du projet pour améliorer la gestion(plusieurs matrices,nouvelles regles...)
          donc j'aimerai quand même savoir ce qui ne vas pas.
          Voici la source:
          main.cpp:
          #include <gl/glut.h>
          #include "class.h"

          int WindowName;
          double a=0;
          tableau array[2];
          int x=0;
          int y=0;
          int curseurx=0;
          int curseury=0;
          int i=0;
          int iancien;
          int islaunched=0;

          void Draw();

          void GestionSpecial(int key, int x, int y)
          {      
          switch (key)
          {      
          case GLUT_KEY_LEFT :
               curseurx++;
               if(curseurx <0){
                           curseurx=SIZE_X-1;
               }
               if(curseurx>SIZE_X-1){
                           curseurx=0;
               }
               break;
          case GLUT_KEY_UP :
               curseury--;
               if(curseury <0){
                           curseury=SIZE_Y-1;
               }
               if(curseury>SIZE_Y-1){
                           curseury=0;
               }
               break;
          case GLUT_KEY_RIGHT :
               curseurx--;
               if(curseurx <0){
                           curseurx=SIZE_X-1;
               }
               if(curseurx>SIZE_X-1){
                           curseurx=0;
               }
               break;
          case GLUT_KEY_DOWN :
               curseury++;
               if(curseury <0){
                           curseury=SIZE_Y-1;
               }
               if(curseury>SIZE_Y-1){
                           curseury=0;
               }
               break;
          }      
          }

          void GestionClavier(unsigned char key, int x, int y)
          {      
                   switch(key){
                           case 27:
                                exit(0);
                                break;
                           case 13:
                                if(islaunched){
                                               islaunched=0;
                                }
                                else{
                                     islaunched=1;
                                };
                                break;
                           case 32:
                                if(!islaunched){
                                     if(array[i].getstate(curseurx,curseury)==0){
                                          array[0].changestate(curseurx,curseury,1);
                                          array[1].changestate(curseurx,curseury,1);
                                     }
                                     else if(array[i].getstate(curseurx,curseury)==1){
                                          array[0].changestate(curseurx,curseury,0);
                                          array[1].changestate(curseurx,curseury,0);
                                     }
                                }
                                if(islaunched){
                                                glutPostRedisplay();
                                }
                           
               }  
          }

          void Reshape(int width, int height)
          {       
                   glViewport(0,0,width,height);
                   glMatrixMode(GL_PROJECTION);
                  glLoadIdentity();
                  gluPerspective(45,float(width)/float(height),0.1,100);
                  glMatrixMode(GL_MODELVIEW);
          }

          void Draw()
          {      
                 
          glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

          glMatrixMode(GL_MODELVIEW);
          glLoadIdentity();
          gluLookAt(0,0,-100,0,0,0,0,1,0);
          glScaled(0.5,0.5,0.5);

          x=0;
          y=0;
          while(y<SIZE_Y){//parcourre le tableau
                          while(x<SIZE_X){
                                          switch(array[i].getstate(x,y)){
                                             case 0:
                                                  glBegin(GL_QUADS);
                                                                         glColor3f(1,1,1);
                                                                         glVertex2i(x-SIZE_X/2,-y+SIZE_Y/2);
                                                                         glVertex2i(x+1-SIZE_X/2,-y+SIZE_Y/2);
                                                                         glVertex2i(x+1-SIZE_X/2,-y+1+SIZE_Y/2);
                                                                         glVertex2i(x-SIZE_X/2,-y+1+SIZE_Y/2);
                                                  glEnd();
                                                  break;
                                             case 1:
                                                  glBegin(GL_QUADS);
                                                                         glColor3f(1,0,0);
                                                                         glVertex2i(x-SIZE_X/2,-y+SIZE_Y/2);
                                                                         glVertex2i(x+1-SIZE_X/2,-y+SIZE_Y/2);
                                                                         glVertex2i(x+1-SIZE_X/2,-y+1+SIZE_Y/2);
                                                                         glVertex2i(x-SIZE_X/2,-y+1+SIZE_Y/2);
                                                  glEnd();
                                                  break;                           
                                          };
                          x++;
                          };
          y++;
          x=0;
          };
          if(!islaunched){
                          glBegin(GL_LINE_STRIP);
                          glColor3f(0,0,0);
                          glVertex3f(curseurx-SIZE_X/2,-curseury+SIZE_Y/2,-0.01);
                          glVertex3f(curseurx+1-SIZE_X/2,-curseury+SIZE_Y/2,-0.01);
                          glVertex3f(curseurx+1-SIZE_X/2,-curseury+1+SIZE_Y/2,-0.01);
                          glVertex3f(curseurx-SIZE_X/2,-curseury+1+SIZE_Y/2,-0.01);
                          glVertex3f(curseurx-SIZE_X/2,-curseury+SIZE_Y/2,-0.01);
                          glEnd();
          }
          if(islaunched){
                                if(i == 1){
                                i=0;
                                iancien=1;
                                }
                                else if(i == 0){
                                i=1;
                                iancien=0;
                                };
                                int x=0;
                                int y=0;
                                while(y<SIZE_Y){//parcourre le tableau
                                while(x<SIZE_X){
                                          int vivants=0;
                                         
                                          if(x!=0 && y!=0){
                                                   if(array[iancien].getstate(x-1,y-1)){
                                                     vivants++;
                                                     };
                                          };
                                          if(x!=0){
                                                   if(array[iancien].getstate(x,y-1)){
                                                     vivants++;
                                                     };
                                          };
                                          if(x!=SIZE_X-1 && y!=0){
                                                          if(array[iancien].getstate(x+1,y-1)){
                                                     vivants++;
                                                     };
                                          }
                                          if(x!=SIZE_X-1){
                                                          if(array[iancien].getstate(x+1,y)){
                                                     vivants++;
                                                     };
                                          }
                                          if(x!=SIZE_X-1 && y!=SIZE_Y-1){
                                                         if(array[iancien].getstate(x+1,y+1)){
                                                     vivants++;
                                                     };
                                          };
                                          if(y!=SIZE_Y-1){
                                                          if(array[iancien].getstate(x,y+1)){
                                                     vivants++;
                                                     };
                                          };
                                          if(y!=SIZE_Y-1 && x!=0){
                                                          if(array[iancien].getstate(x-1,y+1)){
                                                     vivants++;
                                                     };
                                          };
                                          if(x!=0){
                                                   if(array[iancien].getstate(x-1,y)){
                                                   vivants++;
                                                     };
                                                     };
                                          switch(array[iancien].getstate(x,y)){
                                             case 0:
                                                  if(vivants==3){
                                                       array[i].changestate(x,y,1);         
                                                  }
                                                  else{
                                                       array[i].changestate(x,y,0);
                                                  }
                                                  break;
                                             case 1:
                                                  if(vivants==2||vivants==3){
                                                       array[i].changestate(x,y,1);         
                                                  }
                                                  else{
                                                       array[i].changestate(x,y,0);
                                                  }
                                                  break;
                                          }                                                       
                                          x++;
                                };
                                y++;
                                x=0;
                                };
          };

          glutSwapBuffers();
          if(!islaunched){
          glutPostRedisplay();
          }
          }

          void InitGL(){
               glEnable(GL_DEPTH_TEST);
               glEnable(GL_COLOR_MATERIAL)
          };

          int main( int argc, char *argv[ ], char *envp[ ] )
          {       
                  glutInit(&argc, argv);
              glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
              glutInitWindowSize(1024,768);       //Optionnel
              WindowName = glutCreateWindow("LifeGame");
           
              glutReshapeFunc(Reshape);
              glutDisplayFunc(Draw);
              glutSpecialFunc(GestionSpecial);
              glutKeyboardFunc(GestionClavier);
              InitGL();
           
              glutMainLoop();
           
              return 0;
           
          }       

          class.h:
          #define SIZE_X 128
          #define SIZE_Y 128

          class point{//class de chaque cellule du tableau
                public:
                       int getstate(){ return state; };//on recupere l'état
                       void changestate(int newstate){//on change l'état de la cellule
                           state=newstate;
                       };
                private:
                        int state;
                       
                       
          };
          class tableau{//class de tableau
                public:
                       tableau(){
                                 for (int compteur = 0 ; compteur < SIZE_Y ; compteur++)//on parcoure le tableau
                                 {
                                     for (int compteur2 = 0 ; compteur2 < SIZE_X ; compteur2++)
                                         {
                                                   array[compteur2][compteur].changestate(0);//on initialise à un état nul.
                                         };
                                 };
                       };
                       int getstate(int x, int y){//pour recuperer l'état d'une cellule
                          return  array[x][y].getstate();
                       }
                       void changestate(int x, int y, int newstate){//changement de l'état d'une cellule
                           array[x][y].changestate(newstate);
                       }
                private:
                        point array[SIZE_X][SIZE_Y];//tableau de points
          };
          • Partager sur Facebook
          • Partager sur Twitter
            23 janvier 2006 à 14:02:08

            Stp Portnaouak, tu pourrais mettre le lien de l'application final ? Merci :)
            • Partager sur Facebook
            • Partager sur Twitter
              23 janvier 2006 à 20:59:01

              La derniere version se trouve à la même adresse que l'ancienne donc retelecharge le fichier dans le premier post.
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                25 janvier 2006 à 11:14:24

                lol j'ai un bel écran noir!
                • Partager sur Facebook
                • Partager sur Twitter
                  25 janvier 2006 à 12:12:34

                  moi aussi je lance l'exe et pof un écran noir :lol:
                  • Partager sur Facebook
                  • Partager sur Twitter
                    25 janvier 2006 à 13:07:31

                    pilote pas à jour? il vous faut les dernier pilotes glut et opengl...faux mettre a jour vos pilotes graphiques.
                    Chez moi cela marche sans probleme.(je travaille avec une ati radeon 9600 pro en 1280*1024)
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      25 janvier 2006 à 13:35:56

                      Et on les a où ces pilotes? (désolé j'ai pas envie de chercher)
                      • Partager sur Facebook
                      • Partager sur Twitter
                        25 janvier 2006 à 14:36:16

                        Sur le site de ton fabriquant de carte graphique. Et a toi de voir si c'est Ati, Nvidia, ou un autre.
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          26 janvier 2006 à 18:05:16

                          Citation : ErGo_404

                          Sur le site de ton fabriquant de carte graphique. Et a toi de voir si c'est Ati, Nvidia, ou un autre.


                          C'est ATI
                          Mais sur le site (http://www.ati.com/ si je ne m'abuse), je vais où après?
                          • Partager sur Facebook
                          • Partager sur Twitter
                            26 janvier 2006 à 19:00:32

                            T'as pas pensé a aller dans la partie "drivers" ?
                            Cherchez un peu bordel y'en a marre des gros flemmards qui pensent que tout leur est du :/
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Anonyme
                              27 janvier 2006 à 16:19:08

                              Bon alors je vais dans driver. Après comme j'ai windows XP, je vais dans windows XP. Là, je cherche PARTOUT (quand je dis partout c'est vraiment partout) et je ne trouve nulle part glut ou openGL (à la limite fireGL mais je pense pas que ce soit ça)
                              • Partager sur Facebook
                              • Partager sur Twitter
                              Anonyme
                                27 janvier 2006 à 17:07:08

                                Citation : SadiX

                                Stp Portnaouak, tu pourrais mettre le lien de l'application final ? Merci :)

                                Bah non, c'est pas une bonne idée de poster des executables.
                                1. Risque de virus ou autre coup fourré
                                2. Une compilation sous windows donne un executable qui ne marche pas sous linux ni mac os
                                • Partager sur Facebook
                                • Partager sur Twitter

                                Jeu de la vie.

                                × 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