origine de l'erreur incomprise Bus Error (lib GLUT OpenGL)

origine de l'erreur incomprise Bus Error (lib GLUT OpenGL) - C++ - Programmation

Marsh Posté le 29-12-2011 à 15:36:53    

Bonjour, si je viens quérir de l'aide ici c'est que je n'ai pas réussi malgré mes recherches à comprendre mon erreur.
Je programme un tetris avec la librairie GLUT de OpenGL. Le problème survient lorsque que je désire déplacer la pièce vers la gauche. Ceci viens de la manière de détecter la collision du bords gauche. Mais je ne trouve pas mon erreur.
voici mon code:

Code :
  1. #include <stdlib.h> /*Utilisé pour la fonction "exit"*/
  2. #include <math.h>
  3. #include <string.h>
  4. #include <stdio.h>
  5. #include <stdarg.h>
  6. #include <time.h>
  7. #ifdef __APPLE__
  8. #include <OpenGL/OpenGL.h>
  9. #include <GLUT/glut.h>
  10. #else
  11. #include <GL/glut.h>
  12. #endif
  13. #define X_MIN 100  // Les positions du cadre
  14. #define X_MAX 350
  15. #define Y_MIN 050
  16. #define Y_MAX 550
  17. /*fonction update timer*/
  18. /*fonction décrémente*/
  19. /******************************************---Variables********************************************************************************************/    
  20. int pieces[7][4][4][4]={
  21.      {//L
  22.       {//p1
  23.        {0,0,0,0},
  24.        {0,1,1,0},
  25.        {0,1,0,0},
  26.        {0,1,0,0}
  27.       },
  28.       {//p2
  29.        {0,0,0,0},
  30.        {0,1,1,1},
  31.        {0,0,0,1},
  32.        {0,0,0,0}
  33.       },
  34.       {//p3
  35.        {0,0,0,0},
  36.        {0,0,1,0},
  37.        {0,0,1,0},
  38.        {0,1,1,0}
  39.       },
  40.       {//p4
  41.        {0,0,0,0},
  42.        {0,1,0,0},
  43.        {0,1,1,1},
  44.        {0,0,0,0}
  45.       }
  46.      },
  47.      {//L2
  48.       {//p1
  49.        {0,0,0,0},
  50.        {0,1,1,0},
  51.        {0,0,1,0},
  52.        {0,0,1,0}
  53.       },
  54.       {//p2
  55.        {0,0,0,0},
  56.        {0,0,0,1},
  57.        {0,1,1,1},
  58.        {0,0,0,0}
  59.       },
  60.       {//p3
  61.        {0,0,0,0},
  62.        {0,1,0,0},
  63.        {0,1,0,0},
  64.        {0,1,1,0}
  65.       },
  66.       {//4
  67.        {0,0,0,0},
  68.        {0,1,1,1},
  69.        {0,1,0,0},
  70.        {0,0,0,0}
  71.       }
  72.      },
  73.      {//barre
  74.       {//bh
  75.        {0,0,0,0},
  76.        {1,1,1,1},
  77.        {0,0,0,0},
  78.        {0,0,0,0}
  79.       },
  80.       {//bv
  81.        {0,1,0,0},
  82.        {0,1,0,0},
  83.        {0,1,0,0},
  84.        {0,1,0,0}
  85.       },
  86.       {//bh
  87.        {0,0,0,0},
  88.        {1,1,1,1},
  89.        {0,0,0,0},
  90.        {0,0,0,0}
  91.       },
  92.       {//bv
  93.        {0,1,0,0},
  94.        {0,1,0,0},
  95.        {0,1,0,0},
  96.        {0,1,0,0}
  97.       }
  98.      },
  99.      {//carre
  100.       {//p1
  101.        {0,0,0,0},
  102.        {0,1,1,0},
  103.        {0,1,1,0},
  104.        {0,0,0,0}
  105.       },
  106.       {//p2
  107.        {0,0,0,0},
  108.        {0,1,1,0},
  109.        {0,1,1,0},
  110.        {0,0,0,0}
  111.       },
  112.       {//p3
  113.        {0,0,0,0},
  114.        {0,1,1,0},
  115.        {0,1,1,0},
  116.        {0,0,0,0}
  117.       },
  118.       {//p4
  119.        {0,0,0,0},
  120.        {0,1,1,0},
  121.        {0,1,1,0},
  122.        {0,0,0,0}
  123.       }
  124.      },
  125.      {//T
  126.       {//p1
  127.        {0,0,0,0},
  128.        {0,1,1,1},
  129.        {0,0,1,0},
  130.        {0,0,0,0}
  131.       },
  132.       {//p2
  133.        {0,0,0,0},
  134.        {0,1,0,0},
  135.        {0,1,1,0},
  136.        {0,1,0,0}
  137.       },
  138.       {//p3
  139.        {0,0,0,0},
  140.        {0,0,1,0},
  141.        {0,1,1,1},
  142.        {0,0,0,0}
  143.       },
  144.       {//p4
  145.        {0,0,0,0},
  146.        {0,0,1,0},
  147.        {0,1,1,0},
  148.        {0,0,1,0}
  149.       }
  150.      },
  151.      {//S
  152.       {//p1
  153.        {0,0,0,0},
  154.        {0,1,1,0},
  155.        {0,0,1,1},
  156.        {0,0,0,0}
  157.       },
  158.       {//p2
  159.        {0,0,0,0},
  160.        {0,0,1,0},
  161.        {0,1,1,0},
  162.        {0,1,0,0}
  163.       },
  164.       {//p3
  165.        {0,0,0,0},
  166.        {0,1,1,0},
  167.        {0,0,1,1},
  168.        {0,0,0,0}
  169.       },
  170.       {//p4
  171.        {0,0,0,0},
  172.        {0,0,1,0},
  173.        {0,1,1,0},
  174.        {0,1,0,0}
  175.       }
  176.      },
  177.      {//Z
  178.       {//p1
  179.        {0,0,0,0},
  180.        {0,0,1,1},
  181.        {0,1,1,0},
  182.        {0,0,0,0}
  183.       },
  184.       {//p2
  185.        {0,0,0,0},
  186.        {0,1,0,0},
  187.        {0,1,1,0},
  188.        {0,0,1,0}
  189.       },
  190.       {//p3
  191.        {0,0,0,0},
  192.        {0,0,1,1},
  193.        {0,1,1,0},
  194.        {0,0,0,0}
  195.       },
  196.       {//p4
  197.        {0,0,0,0},
  198.        {0,1,0,0},
  199.        {0,1,1,0},
  200.        {0,0,1,0}
  201.       }
  202.      }
  203.     };
  204. int terrain[22][12]={{0,0,0,0,0,0,0,0,0,0,0,0},
  205.      {0,0,0,0,0,0,0,0,0,0,0,0},
  206.      {0,0,0,0,0,0,0,0,0,0,0,0},
  207.      {0,0,0,0,0,0,0,0,0,0,0,0},
  208.      {0,0,0,0,0,0,0,0,0,0,0,0},
  209.      {0,0,0,0,0,0,0,0,0,0,0,0},
  210.      {0,0,0,0,0,0,0,0,0,0,0,0},
  211.      {0,0,0,0,0,0,0,0,0,0,0,0},
  212.      {0,0,0,0,0,0,0,0,0,0,0,0},
  213.      {0,0,0,0,0,0,0,0,0,0,0,0},
  214.      {0,0,0,0,0,0,0,0,0,0,0,0},
  215.      {0,0,0,0,0,0,0,0,0,0,0,0},
  216.      {0,0,0,0,0,0,0,0,0,0,0,0},
  217.      {0,0,0,0,0,0,0,0,0,0,0,0},
  218.      {0,0,0,0,0,0,0,0,0,0,0,0},
  219.      {0,0,0,0,0,0,0,0,0,0,0,0},
  220.      {0,0,0,0,0,0,0,0,0,0,0,0},
  221.      {0,0,0,0,0,0,0,0,0,0,0,0},
  222.      {0,0,0,0,0,0,0,0,0,0,0,0},
  223.      {0,0,0,0,0,0,0,0,0,0,0,0},
  224.      {0,0,0,0,0,0,0,0,0,0,0,0},
  225.      {0,0,0,0,0,0,0,0,0,0,0,0}};
  226. int terrainfix[22][12]={{1,1,1,1,1,1,1,1,1,1,1,1},
  227.      {1,0,0,0,0,0,0,0,0,0,0,1},
  228.      {1,0,0,0,0,0,0,0,0,0,0,1},
  229.      {1,0,0,0,0,0,0,0,0,0,0,1},
  230.      {1,0,0,0,0,0,0,0,0,0,0,1},
  231.      {1,0,0,0,0,0,0,0,0,0,0,1},
  232.      {1,0,0,0,0,0,0,0,0,0,0,1},
  233.      {1,0,0,0,0,0,0,0,0,0,0,1},
  234.      {1,0,0,0,0,0,0,0,0,0,0,1},
  235.      {1,0,0,0,0,0,0,0,0,0,0,1},
  236.      {1,0,0,0,0,0,0,0,0,0,0,1},
  237.      {1,0,0,0,0,0,0,0,0,0,0,1},
  238.      {1,0,0,0,0,0,0,0,0,0,0,1},
  239.      {1,0,0,0,0,0,0,0,0,0,0,1},
  240.      {1,0,0,0,0,0,0,0,0,0,0,1},
  241.      {1,0,0,0,0,0,0,0,0,0,0,1},
  242.      {1,0,0,0,0,0,0,0,0,0,0,1},
  243.      {1,0,0,0,0,0,0,0,0,0,0,1},
  244.      {1,0,0,0,0,0,0,0,0,0,0,1},
  245.      {1,0,0,0,0,0,0,0,0,0,0,1},
  246.      {1,0,0,0,0,0,0,0,0,0,0,1},
  247.      {1,1,1,1,1,1,1,1,1,1,1,1}};
  248. int piece_choisie[4][4]={{0}};
  249. int score=0;
  250. int x,y;
  251. int i;int d=1;
  252. int my=450, mx=100;
  253. int choix; int orientation=0 ;
  254. /***choix*/
  255. void determination()
  256.    {
  257. srand(time(NULL));
  258.     choix= rand()%6;
  259. printf (" choix = %d \n", choix);
  260. }
  261. /******************************************---Base/Carre---****************************************************************************************/
  262. void base(int x,int y) // creation de la base qui servira pour toutes les figures (ensemble de carre) float r,float v,float b
  263. {
  264. // float colr = (rand()%255)/255.0;
  265. // float colv = (rand()%255)/255.0;
  266. // float colb = (rand()%255)/255.0;
  267. int colr=0;
  268. int colv=1;
  269. int colb=1;
  270. glBegin(GL_POLYGON);
  271.     glColor3f(colr,colv,colb);
  272.     glVertex2f(x*25,y*25);
  273.     glColor3f(colr,colv,0);
  274.     glVertex2f(25+x*25,y*25);
  275.     glColor3f(colr,colv,colb);
  276.     glVertex2f(25+x*25,25+y*25);
  277.     glColor3f(1,1,1);
  278.     glVertex2f(x*25,25+y*25);
  279.     glEnd();
  280.     glFlush();
  281. glutSwapBuffers() ;
  282. }
  283. /************************/
  284. int Collision(int terrain[22][12],int terrainfix[22][12],int piece_choisie[4][4],int my,int mx)
  285. int i,j;
  286. for(i=0;i<4;i++)
  287. {
  288.  for(j=0;j<4;j++)
  289.  {
  290.   if(piece_choisie[i][j]==1 && terrainfix[i+my][j+mx]==1) // permet de garder les contours lorsque la piece les approches
  291.   {
  292.   return 1;
  293.   }
  294.   if(piece_choisie[i][j]==1 && terrain[i+my][j+mx]==1) // permet de garder les contours lorsque la piece les approches
  295.   {
  296.   return 1;
  297.   }
  298.  }
  299. }
  300. return 0;
  301. }
  302. /******************************************---Chute---**********************************************************************************************/
  303. int Chute(int y, int x)
  304. {
  305. if(my>0)
  306. {
  307.   my=my-1;
  308.   printf (" chute my = %d \n", my);
  309.   printf (" chute mx = %d \n", mx);
  310.   glutPostRedisplay();
  311. }
  312. else
  313. {
  314. my=my;
  315. printf (" chute my = %d \n", my);
  316. printf (" chute mx = %d \n", mx);
  317. int i,j;
  318. for(i=0;i<4;i++)
  319.         {
  320.             for(j=0;j<4;j++)
  321.             {
  322.   terrain[i+my][j+mx]=terrain[i+my][j+mx]+piece_choisie[i][j];
  323.   }
  324.         }
  325. for( x=0;x<12;x++)
  326. {
  327.  for(y=0;y<22;y++)
  328.  {
  329.   printf (" terrain[%d][%d] = %d \n", y, x, terrain[y][x]);
  330.  }
  331. }
  332. }
  333. return 0;
  334. }
  335. /******************************************---Dessine les pieces---********************************************************************************/
  336. void dessin_piece(int pieces[7][4][4][4])
  337. {
  338.   
  339. for( x=0;x<4;x++)
  340. {
  341.      for(y=0;y<4;y++)
  342.      {
  343.   piece_choisie[y][x]=pieces[choix][orientation][y][x];
  344.   printf (" piece[%d][%d][%d][%d] = %d \n", choix, orientation, y, x, pieces[choix][orientation][y][x]);
  345.          if(piece_choisie[y][x]==1)
  346.          {
  347.              base(x,y);
  348.          }
  349.     }
  350. }
  351. }
  352. /******************************************---Dessine le terrain---********************************************************************************/
  353. void dessin_terrainfix(int terrainfix[22][12])
  354. {
  355.     
  356. for( x=0;x<12;x++)
  357. {
  358.      for(y=0;y<22;y++)
  359.      {
  360.          if(terrainfix[y][x]==1)
  361.          {
  362.              base(x,y);
  363.          }
  364.     }
  365. }
  366. }
  367. void dessin_terrain(int terrain[22][12])
  368. {
  369.     
  370. for( x=0;x<12;x++)
  371. {
  372.      for(y=0;y<22;y++)
  373.      {
  374.          if(terrain[y][x]==1)
  375.          {
  376.              base(x,y);
  377.          }
  378.     }
  379. }
  380. }
  381. /******************************************---Fonction pour utiliser du texte---*******************************************************************/
  382. void bitmap_output(int x,int y,char *string,void *font) {
  383.   int len,i;
  384.   glRasterPos2f(x,y);
  385.   len = (int) strlen(string);
  386.   for (i = 0; i < len; i++) {
  387.     glutBitmapCharacter(font,string[i]); }
  388. }
  389. /******************************************---Fenetre---*******************************************************************************************/
  390. void dessin(void) //fonction de dessin
  391. {
  392.     glClear(GL_COLOR_BUFFER_BIT);
  393. glLoadIdentity();
  394. glColor3f(1, 0, 0);
  395. bitmap_output(470,350,"Score:",GLUT_BITMAP_HELVETICA_18);
  396. glTranslatef(100,25,0);
  397. dessin_terrainfix(terrainfix);
  398. dessin_terrain(terrain);
  399. printf (" dessin mx = %d \n ", mx);
  400. glTranslatef(mx,my,0);
  401. Chute(my,mx);
  402. dessin_piece(pieces);
  403. }
  404. /******************************************---Restructuration de la fenetre et changement de repere---*********************************************/
  405. void reshape(int w, int h)
  406. {
  407. glViewport(0, 0, (GLsizei) w, (GLsizei) h);
  408. glMatrixMode(GL_PROJECTION);
  409. glLoadIdentity();
  410. glOrtho(0, 600, 0, 600, -1, 1);
  411. glMatrixMode(GL_MODELVIEW);
  412. glLoadIdentity();
  413. }
  414. /******************************************---Fonctions de Déplacements---*************************************************************************/
  415. void deplacement_gauche()
  416. {
  417. if(Collision(terrain,terrainfix,piece_choisie,my,mx-1)==0)
  418. {
  419. mx=mx-5;
  420. printf (" key mx = %d \n", mx);
  421. glutPostRedisplay();
  422. }
  423. else
  424. {
  425. mx=mx;
  426. }
  427. }
  428. /******************************************---Touches Special du Clavier---*************************************************************************/
  429. void GestionSpecial(int key, int x, int y)
  430. {
  431. switch (key)
  432.   {
  433.   case GLUT_KEY_RIGHT:
  434.  
  435.  if(mx<200)
  436.     {mx=mx+5;
  437.  printf (" key mx = %d \n", mx);
  438.  glutPostRedisplay();
  439.  break;}
  440.  else
  441.  {mx=mx;
  442.  break;}
  443.   case GLUT_KEY_LEFT:
  444.  deplacement_gauche();break;
  445.   case GLUT_KEY_UP:
  446.  
  447.  if(my<450)
  448.     {my=my+1;
  449.  printf (" key my = %d \n", my);
  450.  glutPostRedisplay();
  451.  break;}
  452.  else
  453.  {my=my;
  454.  break;}
  455.   case GLUT_KEY_DOWN:
  456.  
  457.  if(my>0)
  458.     {my=my-5;
  459.  printf (" key my = %d \n", my);
  460.  glutPostRedisplay();
  461.  break;}
  462.  else
  463.  {my=my;
  464.  break;}
  465.   case GLUT_KEY_F1 :
  466.  glutPostRedisplay() ;
  467.  break;
  468.   }
  469. }
  470. /******************************************---Touches du Clavier---*********************************************************************************/
  471. void keyboard(unsigned char key, int x, int y)
  472. {
  473.   switch (key)
  474.   {
  475.   case ' ':
  476.   if(orientation!=3)
  477.    {
  478. orientation=orientation+1 ;
  479.     glutPostRedisplay();
  480. break;
  481.    }
  482.    else
  483.    {
  484.    orientation=0;
  485.    glutPostRedisplay();
  486.    break;}
  487.  
  488.  
  489.   case 99 /*c*/:
  490.     if(choix!=6)
  491.    {
  492. choix=choix+1 ;
  493.     glutPostRedisplay() ;
  494. break;
  495.    }
  496.    else
  497.    {
  498.    choix=0;
  499.    glutPostRedisplay();
  500.    break;}
  501.  
  502.    case 120/*x*/:
  503.  
  504.     printf (" dessin \n" );
  505. srand(time(NULL));
  506.     choix= rand()%6;
  507. glutPostRedisplay() ;
  508. break;
  509.   case 27 /* Esc */:
  510.     exit(1) ;
  511.   }
  512. }
  513. /******************************************---Fonction Principal---*********************************************************************************/
  514. int main(int argc, char **argv)
  515. {
  516.  
  517.   glutInit(&argc, argv) ;
  518.   glutInitWindowSize(600,600);
  519.   glutInitWindowPosition(300,150);
  520.   glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE) ;
  521.   glutCreateWindow("Tetris" ) ;
  522.   determination();
  523.   glutDisplayFunc(dessin) ;
  524.   glutReshapeFunc(reshape);
  525.   //glutMotionFunc(motion) ;
  526.   glutKeyboardFunc(keyboard) ;
  527.   glutSpecialFunc(GestionSpecial);
  528.   glutMainLoop() ;
  529.   return 0 ;
  530. }


 
J'espère que vous pourrez m'aider.
Merci.

Reply

Marsh Posté le 29-12-2011 à 15:36:53   

Reply

Marsh Posté le 29-12-2011 à 15:38:30    

Je précise que la compilation se fait sans problème mais le Bus Error survient à l'exécution.

Reply

Marsh Posté le 29-12-2011 à 16:51:00    

c'ets du C, mauvaise cat.
Ensuite, gdb est ton ami.

Reply

Marsh Posté le 29-12-2011 à 18:46:54    

je suis sous mac. oui je sais c'est bizarre de faire du C sur mac. Mais c la consigne.

Reply

Marsh Posté le 30-12-2011 à 07:48:44    

et ? y a gdb sous mac aussi, et je te parlais que la categorie du forum etait incorrect.

Reply

Marsh Posté le 30-12-2011 à 15:28:56    

les bus error, ca peut pas être du à des accès mal alignés ? T'es sur du mac PowerPC ou x86 ?


---------------
last.fm
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed