Partage
  • Partager sur Facebook
  • Partager sur Twitter

Utiliser les structures dans une boucle for

Sujet résolu
    1 décembre 2019 à 23:30:24

    Bonjour,

    Je dois programmer un casse brique en utilisant le langage C et la bibliothèque OpenGL. Du coup, pour dessiner mes briques j'utilise ce code :

    glBegin(GL_QUADS);
        glColor3f(1.0f, 1.0f, 0.0f);
    
        glVertex3f(b1.xbrique1, b1.ybrique1, -5.0f);
        glVertex3f(b1.xbrique2, b1.ybrique1, -5.0f);
        glVertex3f(b1.xbrique2, b1.ybrique2, -5.0f);
        glVertex3f(b1.xbrique1, b1.ybrique2, -5.0f);
    
    glEnd();
    


    Avec

    typedef struct coor{
        float xbrique1;
        float xbrique2;
        float ybrique1;
        float ybrique2;
    } Brique;
    
    
    Brique b1={-1.48,-1.18,1.9,1.84};
    Brique b2={-1.1,-0.8,1.9,1.84};
    Brique b3={-0.72,-0.42,1.9,1.84};
    Brique b4={-0.34,-0.04,1.9,1.84};

    Ce que j'aimerai faire, c'est une boucle for, pour éviter de copier coller a chaque fois le code qui permet de dessiner et d'avoir trop de lignes de code, en sachant que j'ai 40 briques a dessiner sauf que je ne sais pas comment faire, pouvez-vous m'aider svp ?

    Merci de votre aide

    PS j'ai essayé ce code mais ça ne marche pas

    for(int j=1;j<=40;j++){
    
    glBegin(GL_QUADS);
    glColor3f(1.0f, 1.0f, 0.0f);
    
        glVertex3f(bj.xbrique1, bj.ybrique1, -5.0f);
        glVertex3f(bj.xbrique2, bj.ybrique1, -5.0f);
        glVertex3f(bj.xbrique2, bj.ybrique2, -5.0f);
        glVertex3f(bj.xbrique1, bj.ybrique2, -5.0f);
    
    glEnd();
    }



    -
    Edité par SAMIRMOURAD 1 décembre 2019 à 23:32:53

    • Partager sur Facebook
    • Partager sur Twitter
      2 décembre 2019 à 9:12:48

      Bonjour, pourquoi n'utiliserais tu pas un tableau de Brique.

      Un truc dans le genre:

      typedef struct coor {
          float xbrique1;
          float xbrique2;
          float ybrique1;
          float ybrique2;
      } Brique;
      
      #define LARGEUR 10
      #define HAUTEUR 4
      
      int main(int argc, char** argv) {
          Brique tabBriques[LARGEUR * HAUTEUR];
          Brique briqueRef = {-1.48, -1.18, 1.9, 1.84};
          int x, y;
          int cpt;
          cpt = 0;
          for (y = 0; y < HAUTEUR; y++) {
              briqueRef.xbrique1 = -1.48;
              briqueRef.xbrique2 = -1.18;
              for (x = 0; x < LARGEUR; x++) {
                  tabBriques[cpt++] = briqueRef;
                  briqueRef.xbrique1 += 0.38;
                  briqueRef.xbrique2 += 0.62;
              }
              briqueRef.ybrique1 += 0.4;
              briqueRef.ybrique2 += 0.4;
          }
          glBegin(GL_QUADS);
          glColor3f(1.0f, 1.0f, 0.0f);
          for (cpt = 0; cpt < LARGEUR * HAUTEUR; cpt++) {
              glVertex3f(tabBriques[cpt].xbrique1, tabBriques[cpt].ybrique1, -5.0f);
              glVertex3f(tabBriques[cpt].xbrique2, tabBriques[cpt].ybrique1, -5.0f);
              glVertex3f(tabBriques[cpt].xbrique2, tabBriques[cpt].ybrique2, -5.0f);
              glVertex3f(tabBriques[cpt].xbrique1, tabBriques[cpt].ybrique2, -5.0f);
          }
      
          glEnd();
      
          return (EXIT_SUCCESS);
      }



      • Partager sur Facebook
      • Partager sur Twitter
        3 décembre 2019 à 1:49:42

        Tout d'abord merci pour ta reponse.

        Je comprends bien ce que tu as fait, du coup ce j'aimerai faire c'est de donner les variables de mes briques manuellement dans un header, j'ai essayé ça mais j'ai une erreur  

        typedef struct coor{
            float xbrique1;
            float xbrique2;
            float ybrique1;
            float ybrique2;
        } Brique;
        
        
        Brique brik[35];
        brik[1]={-1.48,-1.18,1.9,1.84};
        brik[2]={-1.1,-0.8,1.9,1.84};
        ....


        mon erreur : 

        -error: conflicting types for 'brik'

        j'ai aussi essayé ca

        typedef struct coor{
            float xbrique1;
            float xbrique2;
            float ybrique1;
            float ybrique2;
        } Brique;
        
        
        Brique brik[35];
        brik[1].xbrique1=-1.48;
        

        l'erreur que j'ai ici : error : expected '=', ',' ,';', 'asm' or '__attribute__' before '.' token

        Merci de ton aide

        • Partager sur Facebook
        • Partager sur Twitter
          3 décembre 2019 à 9:54:49

          Bonjour, la syntaxe est la suivante:

          Brique brik[35]={
          {-1.48,-1.18,1.9,1.84},
          {-1.1,-0.8,1.9,1.84},
          ...
          };
          



          • Partager sur Facebook
          • Partager sur Twitter
            3 décembre 2019 à 16:31:14

            Hello,

            Ta ligne 10 est correcte.... à condition de se trouver dans une fonction. Sinon, voir le code de bxdfr pour l'initialisation.

            Et pour rappel, un tableau de N éléments en C a son indice qui va de 0 à N-1

            • Partager sur Facebook
            • Partager sur Twitter

            On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

            Utiliser les structures dans une boucle for

            × 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