Partage
  • Partager sur Facebook
  • Partager sur Twitter

problème avec mon jeu (Pong)

problème avec l'affichage d'un texte

Sujet résolu
    17 août 2006 à 11:10:12

    bonjour je suis en train de creer un Pong, et j'ai un problème lors de l'affichage d'un texte: je veut faire apparaitre un texte lorsque le joueur 1 ou le joueur 2 à perdu la balle; Or au lieu de cela , la fenètre du jeu se ferme.
    Voici la partie de mon code concerné:
    SDL_Surface *ecran = NULL, *balle = NULL, *rakette = NULL, *texte = NULL;
    SDL_Rect position, positionRakette1, positionRakette2, positionTexte1;
    TTF_Font *police = NULL;
    SDL_Color couleurRouge = {255, 0, 0};
    int continuer = 1, tempsPrecedent = 0, tempsActuel = 0;
    SDL_Event event;
     
    int main(int argc, char *argv[])
    {
        int direction = 0;
       
        SDL_Init(SDL_INIT_VIDEO);
        TTF_Init();
       
        ecran = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
        SDL_WM_SetCaption("Pong", NULL);
        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
       
        police = TTF_OpenFont("comic.ttf", 32);
       
        balle = IMG_Load("balle.jpg");
        position.x = 400;
        position.y = 300;
       
        rakette = IMG_Load("rakette.jpg");
        positionRakette1.x = 20;
        positionRakette1.y = 250;
       
       
        positionRakette2.x = 760;
        positionRakette2.y = 250;
       
        SDL_EnableKeyRepeat(10, 10);
       
        while(continuer)
        {
        SDL_PollEvent(&event);
        switch(event.type)
        {
          case SDL_QUIT:
          continuer = 0;
          break;
       
          case SDL_KEYDOWN:
          switch (event.key.keysym.sym)
          {
                 case SDLK_UP:
                 positionRakette2.y -= VITESSE_RAKETTE;
                 break;
                 
                 case SDLK_DOWN:
                 positionRakette2.y += VITESSE_RAKETTE;
                 break;
         
                 case SDLK_a:
                 positionRakette1.y -= VITESSE_RAKETTE;
                 break;
                 
                 case SDLK_w:
                 positionRakette1.y += VITESSE_RAKETTE;
                 break;
          }
        }
             
              tempsActuel = SDL_GetTicks();
              if (tempsActuel - tempsPrecedent >= 30)
              {
               switch(direction)
               {
                  case DROITE_MILIEU:
                  position.x += VITESSE_BALLE;
                  break;
                 
                  case DROITE_HAUT:
                  position.x += VITESSE_BALLE;
                  position.y -= VITESSE_BALLE;
                  break;
                 
                  case DROITE_BAS:
                  position.x += VITESSE_BALLE;
                  position.y += VITESSE_BALLE;
                  break;
                 
                  case GAUCHE_MILIEU:
                  position.x -= VITESSE_BALLE;
                  break;
               
                  case GAUCHE_HAUT:
                  position.x -= VITESSE_BALLE;
                  position.y -= VITESSE_BALLE;
                  break;
                 
                  case GAUCHE_BAS:
                  position.x -= VITESSE_BALLE;
                  position.y += VITESSE_BALLE;
                  break;
               
               }
              tempsPrecedent = tempsActuel; 
              }
               else
              {
                  SDL_Delay(30 - (tempsActuel - tempsPrecedent));
              }
               
    if(position.x >= positionRakette2.x - balle->w) //dans ce cas la balle est a hauteur de la raquette
      { 
               if(verif_droite_haut()) //1ere zone
                direction = GAUCHE_HAUT;

                else if(verif_droite_milieu()) //2ieme zone
                direction = GAUCHE_MILIEU;
               
                else if(verif_droite_bas()) //3ieme zone
                direction = GAUCHE_BAS;
               
                else
                {
                TTF_RenderText_Blended(police, "Le joueur de gauche Gagne!!", couleurRouge);
                positionTexte1.x = 150;
                positionTexte1.y = 300;
                SDL_BlitSurface(texte, NULL, ecran, &positionTexte1);   
                }
      }


    else if(position.x <= positionRakette1.x)
     {
               if(verif_gauche_haut())
                direction = DROITE_HAUT;
               
                else if(verif_gauche_milieu())
                direction = DROITE_MILIEU;
               
                else if(verif_gauche_bas())
                direction = DROITE_BAS;

                else
                {
                TTF_RenderText_Blended(police, "Le joueur de droite Gagne!!", couleurRouge);
                positionTexte1.x = 150;
                positionTexte1.y = 300;
                SDL_BlitSurface(texte, NULL, ecran, &positionTexte1);
                }
    }

    else if(mur_haut())
      {
         if(direction == DROITE_HAUT)
         direction = DROITE_BAS;
     
         else if(direction == GAUCHE_HAUT)
         direction = GAUCHE_BAS;
     
         else {}
      }
     

    else if(mur_bas())
      {
         if(direction == DROITE_BAS)
         direction = DROITE_HAUT;     

         else if(direction == GAUCHE_BAS)
         direction = GAUCHE_HAUT;

         else {}
       }

    else {}

    SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
    SDL_BlitSurface(balle, NULL, ecran, &position);
    SDL_BlitSurface(rakette, NULL, ecran, &positionRakette1);
    SDL_BlitSurface(rakette, NULL, ecran, &positionRakette2);
    SDL_Flip(ecran);
    }
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      17 août 2006 à 14:43:18


      TTF_RenderText_Blended(police, "Le joueur de gauche Gagne!!", couleurRouge);
                  positionTexte1.x = 150;
                  positionTexte1.y = 300;
                  SDL_BlitSurface(texte, NULL, ecran, &positionTexte1)


      Il plante car tu doit faire :


      texte      =  TTF_RenderText_Blended(police, "Le joueur de gauche Gagne!!", couleurRouge);
                  positionTexte1.x = 150;
                  positionTexte1.y = 300;
                  SDL_BlitSurface(texte, NULL, ecran, &positionTexte1)


      De plus ,evite de mettre texte = ... dans la boucle, sinon le programma vas a chaque boucle recree une surface et le programme vas prendre de plus en plus de ram.
      Met le avant, et laisse juste le blit a ce moment la ;) .
      • Partager sur Facebook
      • Partager sur Twitter
        17 août 2006 à 16:52:44

        dsl sa na rien changer, sa fait toujours la même chose, j'ai mis sa:
        else
                    {
                    texte = TTF_RenderText_Blended(police, "Le joueur de gauche Gagne!!", couleurRouge);
                    positionTexte1.x = 150;
                    positionTexte1.y = 300;
                    SDL_BlitSurface(texte, NULL, ecran, &positionTexte1);
                    }
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          17 août 2006 à 17:01:42

          je veut pas etre désagréable, mais tu n'a pas tout écouter, enleve

          texte = TTF_RenderText_Blended(police, "Le joueur de gauche Gagne!!", couleurRouge);
                      positionTexte1.x = 150;
                      positionTexte1.y = 300;


          met le la ou tu declare tes variables.
          D'ailleur il faut eviter de declarer les variables hors des fonctions !
          met ce qu'il y a au dessus de main dans main.
          • Partager sur Facebook
          • Partager sur Twitter
            17 août 2006 à 17:11:29

            dsl, lorsque je met les déclaration des variables dans le main sa m'affiche pleins d'erreur:
            int main(int argc, char *argv[])
            {
               SDL_Surface *ecran = NULL, *balle = NULL, *rakette = NULL, *texte = NULL;
            SDL_Rect position, positionRakette1, positionRakette2, positionTexte1;
            TTF_Font *police = NULL;
            SDL_Color couleurRouge = {255, 0, 0};
            int continuer = 1, tempsPrecedent = 0, tempsActuel = 0, direction = 0;;
            SDL_Event event;
               
               
                SDL_Init(SDL_INIT_VIDEO);
                TTF_Init();


            Donc j'ai fait comme tu as dit:
            SDL_Init(SDL_INIT_VIDEO);
                TTF_Init();
               
                ecran = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
                SDL_WM_SetCaption("Pong", NULL);
                SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
               
                police = TTF_OpenFont("comic.ttf", 32);
                texte = TTF_RenderText_Blended(police, "Le joueur de gauche Gagne!!", couleurRouge);
                        positionTexte1.x = 150;
                        positionTexte1.y = 300;

            et j'ai laisser le Blit dans le else mais sa ne marche toujours pas.
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              17 août 2006 à 17:13:04

              Tu me me donné les erreurs qui s'affichent lorsque tu met le tout dans le main ?
              • Partager sur Facebook
              • Partager sur Twitter
                17 août 2006 à 18:46:01

                voila les erreurs que sa me mets:

                In function `verif_droite_haut':
                212 `position' undeclared (first use in this function)
                (Each undeclared identifier is reported only once for each function it appears in.)
                212 `positionRakette2' undeclared (first use in this function)
                In function `verif_droite_milieu':
                222`position' undeclared (first use in this function)
                222`positionRakette2' undeclared (first use in this function)
                In function `verif_droite_bas':
                231`position' undeclared (first use in this function)
                231`positionRakette2' undeclared (first use in this function)
                In function `verif_gauche_haut':
                241`position' undeclared (first use in this function)
                241`positionRakette1' undeclared (first use in this function)
                In function `verif_gauche_milieu':
                251`position' undeclared (first use in this function)
                251`positionRakette1' undeclared (first use in this function)
                In function `verif_gauche_bas':
                260`position' undeclared (first use in this function)
                260`positionRakette1' undeclared (first use in this function)
                In function `mur_haut':
                269`position' undeclared (first use in this function)
                In function `mur_bas':
                278`position' undeclared (first use in this function)
                [Build Error] [pong.o] Error 1


                et voila le haut du code avec les variables dans le main:
                #include <stdio.h>
                #include <stdlib.h>
                #include <SDL/SDL.h>
                #include <SDL/SDL_image.h>
                #include <SDL/SDL_ttf.h>

                #define VITESSE_BALLE 20
                #define VITESSE_RAKETTE 10

                int verif_droite_haut();
                int verif_droite_milieu();
                int verif_droite_bas();
                int verif_gauche_haut();
                int verif_gauche_milieu();
                int verif_gauche_bas();
                int mur_haut();
                int mur_bas();
                enum{DROITE_MILIEU,DROITE_HAUT,DROITE_BAS,GAUCHE_MILIEU,GAUCHE_HAUT,GAUCHE_BAS};


                int main(int argc, char *argv[])
                {
                SDL_Surface *ecran = NULL, *balle = NULL, *rakette = NULL, *texte = NULL;
                SDL_Rect position, positionRakette1, positionRakette2, positionTexte1;
                TTF_Font *police = NULL;
                SDL_Color couleurRouge = {255, 0, 0};
                int continuer = 1, tempsPrecedent = 0, tempsActuel = 0, direction = 0;;
                SDL_Event event;
                   
                    SDL_Init(SDL_INIT_VIDEO);
                    TTF_Init();
                   
                    ecran = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
                    SDL_WM_SetCaption("Pong", NULL);
                    SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
                   
                    police = TTF_OpenFont("comic.ttf", 32);
                   

                Mais lorsque je mets les variables à l'extérieur du main , le jeu n'affiche aucune erreur.
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  17 août 2006 à 18:57:20

                  Si tu veut appel a d'autres fonction c'est normal, tu doit leur envoyer les variables qui sont dans main
                  • Partager sur Facebook
                  • Partager sur Twitter
                    17 août 2006 à 18:58:34

                    ok mais mon problème d'affichage de l'écriture n'est toujours pas résolu
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      17 août 2006 à 19:01:45

                      tu peut passer tes fichiers en .rar (avec les Zupload ou sur un hebergeur ?)
                      • Partager sur Facebook
                      • Partager sur Twitter
                        17 août 2006 à 19:02:56

                        nn dsl j'ai pas de serveur FTP mais si tu veux , je te donne mon add msn et tu me donne la tienne en PV et je t'envoi tous
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          17 août 2006 à 19:04:02

                          Le probleme c'es tque j'ajoute beaucoup de monde, je m'en sort plus :s ,
                          au pire donne tout tes codes sur le forum, je les corrige et j'explique ;)
                          • Partager sur Facebook
                          • Partager sur Twitter
                            17 août 2006 à 19:10:04

                            voici le code de mon jeu au complet:

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

                            #define VITESSE_BALLE 20
                            #define VITESSE_RAKETTE 10

                            int verif_droite_haut();
                            int verif_droite_milieu();
                            int verif_droite_bas();
                            int verif_gauche_haut();
                            int verif_gauche_milieu();
                            int verif_gauche_bas();
                            int mur_haut();
                            int mur_bas();
                            enum{DROITE_MILIEU,DROITE_HAUT,DROITE_BAS,GAUCHE_MILIEU,GAUCHE_HAUT,GAUCHE_BAS};

                            SDL_Surface *ecran = NULL, *balle = NULL, *rakette = NULL, *texte = NULL;
                            SDL_Rect position, positionRakette1, positionRakette2, positionTexte1, positionTexte2;
                            TTF_Font *police = NULL;
                            SDL_Color couleurRouge = {255, 0, 0};
                            int continuer = 1, tempsPrecedent = 0, tempsActuel = 0, direction = 0;;
                            SDL_Event event;

                            int main(int argc, char *argv[])
                            {
                               
                                SDL_Init(SDL_INIT_VIDEO);
                                TTF_Init();
                               
                                ecran = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
                                SDL_WM_SetCaption("Pong", NULL);
                                SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
                               
                                police = TTF_OpenFont("comic.ttf", 32);
                                texte = TTF_RenderText_Blended(police, "Le joueur de gauche Gagne!!", couleurRouge);
                                positionTexte1.x = 150;
                                positionTexte1.y = 300;
                                texte = TTF_RenderText_Blended(police, "Le joueur de droite Gagne!!", couleurRouge);
                                positionTexte2.x = 150;
                                positionTexte2.y = 300;
                               
                                balle = IMG_Load("balle.jpg");
                                position.x = 400;
                                position.y = 300;
                               
                                rakette = IMG_Load("rakette.jpg");
                                positionRakette1.x = 20;
                                positionRakette1.y = 250;
                               
                               
                                positionRakette2.x = 760;
                                positionRakette2.y = 250;
                               
                                SDL_EnableKeyRepeat(10, 10);
                               
                                while(continuer)
                                {
                                SDL_PollEvent(&event);
                                switch(event.type)
                                {
                                  case SDL_QUIT:
                                  continuer = 0;
                                  break;
                               
                                  case SDL_KEYDOWN:
                                  switch (event.key.keysym.sym)
                                  {
                                         case SDLK_UP:
                                         positionRakette2.y -= VITESSE_RAKETTE;
                                         break;
                                         
                                         case SDLK_DOWN:
                                         positionRakette2.y += VITESSE_RAKETTE;
                                         break;
                                 
                                         case SDLK_a:
                                         positionRakette1.y -= VITESSE_RAKETTE;
                                         break;
                                         
                                         case SDLK_w:
                                         positionRakette1.y += VITESSE_RAKETTE;
                                         break;
                                  }
                                }
                                     
                                      tempsActuel = SDL_GetTicks();
                                      if (tempsActuel - tempsPrecedent >= 30)
                                      {
                                       switch(direction)
                                       {
                                          case DROITE_MILIEU:
                                          position.x += VITESSE_BALLE;
                                          break;
                                         
                                          case DROITE_HAUT:
                                          position.x += VITESSE_BALLE;
                                          position.y -= VITESSE_BALLE;
                                          break;
                                         
                                          case DROITE_BAS:
                                          position.x += VITESSE_BALLE;
                                          position.y += VITESSE_BALLE;
                                          break;
                                         
                                          case GAUCHE_MILIEU:
                                          position.x -= VITESSE_BALLE;
                                          break;
                                       
                                          case GAUCHE_HAUT:
                                          position.x -= VITESSE_BALLE;
                                          position.y -= VITESSE_BALLE;
                                          break;
                                         
                                          case GAUCHE_BAS:
                                          position.x -= VITESSE_BALLE;
                                          position.y += VITESSE_BALLE;
                                          break;
                                       
                                       }
                                      tempsPrecedent = tempsActuel; 
                                      }
                                       else
                                      {
                                          SDL_Delay(30 - (tempsActuel - tempsPrecedent));
                                      }
                                       
                            if(position.x >= positionRakette2.x - balle->w) //dans ce cas la balle est a hauteur de la raquette
                              { 
                                       if(verif_droite_haut()) //1ere zone
                                        direction = GAUCHE_HAUT;

                                        else if(verif_droite_milieu()) //2ieme zone
                                        direction = GAUCHE_MILIEU;
                                       
                                        else if(verif_droite_bas()) //3ieme zone
                                        direction = GAUCHE_BAS;
                                       
                                        else
                                        SDL_BlitSurface(texte, NULL, ecran, &positionTexte1);
                                       
                              }


                            else if(position.x <= positionRakette1.x)
                             {
                                       if(verif_gauche_haut())
                                        direction = DROITE_HAUT;
                                       
                                        else if(verif_gauche_milieu())
                                        direction = DROITE_MILIEU;
                                       
                                        else if(verif_gauche_bas())
                                        direction = DROITE_BAS;

                                        else
                                        SDL_BlitSurface(texte, NULL, ecran, &positionTexte2);
                                       
                            }

                            else if(mur_haut())
                              {
                                 if(direction == DROITE_HAUT)
                                 direction = DROITE_BAS;
                             
                                 else if(direction == GAUCHE_HAUT)
                                 direction = GAUCHE_BAS;
                             
                                 else {}
                              }
                             

                            else if(mur_bas())
                              {
                                 if(direction == DROITE_BAS)
                                 direction = DROITE_HAUT;     

                                 else if(direction == GAUCHE_BAS)
                                 direction = GAUCHE_HAUT;

                                 else {}
                               }

                            else {}

                            SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
                            SDL_BlitSurface(balle, NULL, ecran, &position);
                            SDL_BlitSurface(rakette, NULL, ecran, &positionRakette1);
                            SDL_BlitSurface(rakette, NULL, ecran, &positionRakette2);
                            SDL_Flip(ecran);
                            }
                               
                               
                                TTF_CloseFont(police);
                                TTF_Quit();
                               
                                SDL_FreeSurface(texte);
                                SDL_FreeSurface(balle);
                                SDL_FreeSurface(rakette);
                               
                                SDL_Quit();
                                return EXIT_SUCCESS;
                            }   

                            int verif_droite_haut()
                            {
                                 
                                 if(position.y >= positionRakette2.y - 20  && position.y < positionRakette2.y + 40)
                                 return 1;
                                 
                                 else
                                 return 0;
                                 
                            }

                            int verif_droite_milieu()
                            {
                                 if(position.y >= positionRakette2.y + 40  && position.y < positionRakette2.y + 80)
                                 return 1;
                                 
                                 else
                                 return 0;
                            }

                            int verif_droite_bas()
                            {
                                if(position.y >= positionRakette2.y + 80  && position.y < positionRakette2.y + 140)
                                return 1;
                               
                                else
                                return 0;
                            }


                            int verif_gauche_haut()
                            {
                                 if(position.y >= positionRakette1.y - 20 && position.y < positionRakette1.y + 50)
                                 return 1;

                                 else
                                 return 0;
                                 
                            }

                            int verif_gauche_milieu()
                            {
                                if(position.y >= positionRakette1.y + 50 && position.y < positionRakette1.y + 100)
                                return 1;
                               
                                else
                                return 0;
                            }

                            int verif_gauche_bas()
                            {
                                if(position.y >= positionRakette1.y + 100 && position.y < positionRakette1.y + 140)
                                return 1;
                               
                                else
                                return 0;
                            }

                            int mur_haut()
                            {
                                if(position.y == 0)
                                return 1;
                               
                                else
                                return 0;
                            }

                            int mur_bas()
                            {
                                if(position.y == 600)
                                return 1;
                               
                                else
                                return 0;
                            }
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Anonyme
                              17 août 2006 à 19:18:37

                              Tout d'abort met les variables dans main :

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

                              #define VITESSE_BALLE 20
                              #define VITESSE_RAKETTE 10

                              enum{DROITE_MILIEU,DROITE_HAUT,DROITE_BAS,GAUCHE_MILIEU,GAUCHE_HAUT,GAUCHE_BAS};

                              int verif_droite_haut(SDL_Rect positionRakette2); // pareil pour les autres

                              int main(int argc, char *argv[])
                              {
                              SDL_Surface *ecran = NULL, *balle = NULL, *rakette = NULL, *texte = NULL;
                              SDL_Rect position, positionRakette1, positionRakette2, positionTexte1, positionTexte2;
                              TTF_Font *police = NULL;
                              SDL_Color couleurRouge = {255, 0, 0};
                              int continuer = 1, tempsPrecedent = 0, tempsActuel = 0, direction = 0;;
                              SDL_Event event;


                              }


                              je te conseille de mettre toutes tes fonction en une seul (pas besion de 50 pour les collisions ou mouvements ;)

                              Maintenant tu envoie les variables de main au fonctions(je le fait pour une seul, tu feras le reste ;) ) :

                              int verif_droite_haut(SDL_Rect positionRakette2) // Tu lui envoie le Rect qui contient la position de la raquette 2
                              {
                                   
                                   if(position.y >= positionRakette2.y - 20  && position.y < positionRakette2.y + 40)
                                   return 1;
                                   
                                   else
                                   return 0;
                                   
                              }



                              Tu fait de meme pour toutes les autres fonctions , pour le texte , tu as fait comme j'aid dit donc c'est bon ;).
                              Si tu as d'autre erreurs dit le .

                              • Partager sur Facebook
                              • Partager sur Twitter
                                17 août 2006 à 19:32:23

                                voila mon code corriger:
                                #include <stdio.h>
                                #include <stdlib.h>
                                #include <SDL/SDL.h>
                                #include <SDL/SDL_image.h>
                                #include <SDL/SDL_ttf.h>

                                #define VITESSE_BALLE 20
                                #define VITESSE_RAKETTE 10

                                int verif_droite_haut(SDL_Rect positionRakette2);
                                int verif_droite_milieu(SDL_Rect positionRakette2);
                                int verif_droite_bas(SDL_Rect positionRakette2);
                                int verif_gauche_haut(SDL_Rect positionRakette1);
                                int verif_gauche_milieu(SDL_Rect positionRakette1);
                                int verif_gauche_bas(SDL_Rect positionRakette1);
                                int mur_haut();
                                int mur_bas();
                                enum{DROITE_MILIEU,DROITE_HAUT,DROITE_BAS,GAUCHE_MILIEU,GAUCHE_HAUT,GAUCHE_BAS};

                                SDL_Surface *ecran = NULL, *balle = NULL, *rakette = NULL, *texte = NULL;
                                SDL_Rect position, positionRakette1, positionRakette2, positionTexte1, positionTexte2;
                                TTF_Font *police = NULL;
                                SDL_Color couleurRouge = {255, 0, 0};
                                int continuer = 1, tempsPrecedent = 0, tempsActuel = 0, direction = 0;;
                                SDL_Event event;

                                int main(int argc, char *argv[])
                                {
                                   
                                SDL_Surface *ecran = NULL, *balle = NULL, *rakette = NULL, *texte = NULL;
                                SDL_Rect position, positionRakette1, positionRakette2, positionTexte1, positionTexte2;
                                TTF_Font *police = NULL;
                                SDL_Color couleurRouge = {255, 0, 0};
                                int continuer = 1, tempsPrecedent = 0, tempsActuel = 0, direction = 0;;
                                SDL_Event event;
                                   
                                    SDL_Init(SDL_INIT_VIDEO);
                                    TTF_Init();
                                   
                                    ecran = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
                                    SDL_WM_SetCaption("Pong", NULL);
                                    SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
                                   
                                    police = TTF_OpenFont("comic.ttf", 32);
                                    texte = TTF_RenderText_Blended(police, "Le joueur de gauche Gagne!!", couleurRouge);
                                    positionTexte1.x = 150;
                                    positionTexte1.y = 300;
                                    texte = TTF_RenderText_Blended(police, "Le joueur de droite Gagne!!", couleurRouge);
                                    positionTexte2.x = 150;
                                    positionTexte2.y = 300;
                                   
                                    balle = IMG_Load("balle.jpg");
                                    position.x = 400;
                                    position.y = 300;
                                   
                                    rakette = IMG_Load("rakette.jpg");
                                    positionRakette1.x = 20;
                                    positionRakette1.y = 250;
                                   
                                   
                                    positionRakette2.x = 760;
                                    positionRakette2.y = 250;
                                   
                                    SDL_EnableKeyRepeat(10, 10);
                                   
                                    while(continuer)
                                    {
                                    SDL_PollEvent(&event);
                                    switch(event.type)
                                    {
                                      case SDL_QUIT:
                                      continuer = 0;
                                      break;
                                   
                                      case SDL_KEYDOWN:
                                      switch (event.key.keysym.sym)
                                      {
                                             case SDLK_UP:
                                             positionRakette2.y -= VITESSE_RAKETTE;
                                             break;
                                             
                                             case SDLK_DOWN:
                                             positionRakette2.y += VITESSE_RAKETTE;
                                             break;
                                     
                                             case SDLK_a:
                                             positionRakette1.y -= VITESSE_RAKETTE;
                                             break;
                                             
                                             case SDLK_w:
                                             positionRakette1.y += VITESSE_RAKETTE;
                                             break;
                                      }
                                    }
                                         
                                          tempsActuel = SDL_GetTicks();
                                          if (tempsActuel - tempsPrecedent >= 30)
                                          {
                                           switch(direction)
                                           {
                                              case DROITE_MILIEU:
                                              position.x += VITESSE_BALLE;
                                              break;
                                             
                                              case DROITE_HAUT:
                                              position.x += VITESSE_BALLE;
                                              position.y -= VITESSE_BALLE;
                                              break;
                                             
                                              case DROITE_BAS:
                                              position.x += VITESSE_BALLE;
                                              position.y += VITESSE_BALLE;
                                              break;
                                             
                                              case GAUCHE_MILIEU:
                                              position.x -= VITESSE_BALLE;
                                              break;
                                           
                                              case GAUCHE_HAUT:
                                              position.x -= VITESSE_BALLE;
                                              position.y -= VITESSE_BALLE;
                                              break;
                                             
                                              case GAUCHE_BAS:
                                              position.x -= VITESSE_BALLE;
                                              position.y += VITESSE_BALLE;
                                              break;
                                           
                                           }
                                          tempsPrecedent = tempsActuel; 
                                          }
                                           else
                                          {
                                              SDL_Delay(30 - (tempsActuel - tempsPrecedent));
                                          }
                                           
                                if(position.x >= positionRakette2.x - balle->w) //dans ce cas la balle est a hauteur de la raquette
                                  { 
                                           if(verif_droite_haut(SDL_Rect positionRakette2)) //1ere zone
                                            direction = GAUCHE_HAUT;

                                            else if(verif_droite_milieu(SDL_Rect positionRakette2)) //2ieme zone
                                            direction = GAUCHE_MILIEU;
                                           
                                            else if(verif_droite_bas(SDL_Rect positionRakette2)) //3ieme zone
                                            direction = GAUCHE_BAS;
                                           
                                            else
                                            SDL_BlitSurface(texte, NULL, ecran, &positionTexte1);
                                           
                                  }


                                else if(position.x <= positionRakette1.x)
                                 {
                                           if(verif_gauche_haut(SDL_Rect positionRakette1))
                                            direction = DROITE_HAUT;
                                           
                                            else if(verif_gauche_milieu(SDL_Rect positionRakette1))
                                            direction = DROITE_MILIEU;
                                           
                                            else if(verif_gauche_bas(SDL_Rect positionRakette1))
                                            direction = DROITE_BAS;

                                            else
                                            SDL_BlitSurface(texte, NULL, ecran, &positionTexte2);
                                           
                                }

                                else if(mur_haut())
                                  {
                                     if(direction == DROITE_HAUT)
                                     direction = DROITE_BAS;
                                 
                                     else if(direction == GAUCHE_HAUT)
                                     direction = GAUCHE_BAS;
                                 
                                     else {}
                                  }
                                 

                                else if(mur_bas())
                                  {
                                     if(direction == DROITE_BAS)
                                     direction = DROITE_HAUT;     

                                     else if(direction == GAUCHE_BAS)
                                     direction = GAUCHE_HAUT;

                                     else {}
                                   }

                                else {}

                                SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
                                SDL_BlitSurface(balle, NULL, ecran, &position);
                                SDL_BlitSurface(rakette, NULL, ecran, &positionRakette1);
                                SDL_BlitSurface(rakette, NULL, ecran, &positionRakette2);
                                SDL_Flip(ecran);
                                }
                                   
                                   
                                    TTF_CloseFont(police);
                                    TTF_Quit();
                                   
                                    SDL_FreeSurface(texte);
                                    SDL_FreeSurface(balle);
                                    SDL_FreeSurface(rakette);
                                   
                                    SDL_Quit();
                                    return EXIT_SUCCESS;
                                }   

                                int verif_droite_haut(SDL_Rect positionRakette2)
                                {
                                     
                                     if(position.y >= positionRakette2.y - 20  && position.y < positionRakette2.y + 40)
                                     return 1;
                                     
                                     else
                                     return 0;
                                     
                                }

                                int verif_droite_milieu(SDL_Rect positionRakette2)
                                {
                                     if(position.y >= positionRakette2.y + 40  && position.y < positionRakette2.y + 80)
                                     return 1;
                                     
                                     else
                                     return 0;
                                }

                                int verif_droite_bas(SDL_Rect positionRakette2)
                                {
                                    if(position.y >= positionRakette2.y + 80  && position.y < positionRakette2.y + 140)
                                    return 1;
                                   
                                    else
                                    return 0;
                                }


                                int verif_gauche_haut(SDL_Rect positionRakette1)
                                {
                                     if(position.y >= positionRakette1.y - 20 && position.y < positionRakette1.y + 50)
                                     return 1;

                                     else
                                     return 0;
                                     
                                }

                                int verif_gauche_milieu(SDL_Rect positionRakette1)
                                {
                                    if(position.y >= positionRakette1.y + 50 && position.y < positionRakette1.y + 100)
                                    return 1;
                                   
                                    else
                                    return 0;
                                }

                                int verif_gauche_bas(SDL_Rect positionRakette1)
                                {
                                    if(position.y >= positionRakette1.y + 100 && position.y < positionRakette1.y + 140)
                                    return 1;
                                   
                                    else
                                    return 0;
                                }

                                int mur_haut()
                                {
                                    if(position.y == 0)
                                    return 1;
                                   
                                    else
                                    return 0;
                                }

                                int mur_bas()
                                {
                                    if(position.y == 600)
                                    return 1;
                                   
                                    else
                                    return 0;
                                }


                                mais j'ai 2 erreurs a ses lignes la:
                                if(verif_droite_haut(SDL_Rect positionRakette2)) //1ere zone
                                if(verif_gauche_haut(SDL_Rect positionRakette1))


                                In function `SDL_main':
                                139 syntax error before "SDL_Rect"
                                156 syntax error before "SDL_Rect"
                                [Build Error] [pong.o] Error 1
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Anonyme
                                  17 août 2006 à 21:03:26

                                  Peut etre parce que tu as oublié de supprimer les variables avant main ..., si tu n'est pas sur d'avoir compris, relis les cours ;)
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    17 août 2006 à 21:10:55

                                    oups mdr dsl petite erreur d'inatention^^
                                    sisi tinkiète les cours jlé ai lu et relu.

                                    Mais les 2 erreurs y sont toujours...
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Anonyme
                                      17 août 2006 à 21:13:27

                                      L'erreur est tres simple, et tu en a pas fait que deux, quand tu envoie positionRakette à une fonction, tu ne doit pas mettre :
                                      SDL_Rect rakette2 <- ça creer une nouvelle variable :s

                                      Toi tu veut envoyer la valeur de la variable existante.
                                      Pour cela ,il te suffit de mettre :
                                      rakette2 <- tout simplement.

                                      Corrige ton code maintenant ;)
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        17 août 2006 à 21:20:43

                                        c'est comme sa que je doit faire?
                                        if(verif_droite_haut(positionRakette2)) //1ere zone
                                                    direction = GAUCHE_HAUT;

                                                    else if(verif_droite_milieu(positionRakette2)) //2ieme zone
                                                    direction = GAUCHE_MILIEU;
                                                   
                                                    else if(verif_droite_bas(positionRakette2)) //3ieme zone
                                                    direction = GAUCHE_BAS;


                                        car je comprend pas trop car tu me dit de mettre juste "Rakette2", or "Rakette2" tout seul sa existe pas.
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Anonyme
                                          17 août 2006 à 21:22:12

                                          exact, met positionRakette2 , je ne m'etait pas relus :p
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            17 août 2006 à 21:22:59

                                            oué bé maintenant que j'ai mis sa sa me met plein de nouvelles erreurs
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            Anonyme
                                              17 août 2006 à 21:30:15

                                              montre les si tu veut de l'aide ;)
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                17 août 2006 à 21:35:34

                                                In function `verif_droite_haut':
                                                210`position' undeclared (first use in this function)
                                                (Each undeclared identifier is reported only once for each function it appears in.)
                                                In function `verif_droite_milieu':
                                                220 `position' undeclared (first use in this function)
                                                In function `verif_droite_bas':
                                                229 `position' undeclared (first use in this function)
                                                In function `verif_gauche_haut':
                                                239 `position' undeclared (first use in this function)
                                                In function `verif_gauche_milieu':
                                                In function `verif_gauche_milieu':
                                                In function `verif_gauche_bas':
                                                258 `position' undeclared (first use in this function)
                                                In function `mur_haut':
                                                267 `position' undeclared (first use in this function)
                                                In function `mur_bas':
                                                276 `position' undeclared (first use in this function)
                                                [Build Error] [pong.o] Error 1
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                Anonyme
                                                  17 août 2006 à 21:38:43

                                                  tu as laissé juste position ou positionRakette2 ?
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    17 août 2006 à 21:40:12

                                                    j'ai mi positionRakette2 pour la rakette se trouvant a droite et positionRakette1 pour la rakette de gauche:

                                                    if(position.x >= positionRakette2.x - balle->w) //dans ce cas la balle est a hauteur de la raquette
                                                      { 
                                                               if(verif_droite_haut(positionRakette2)) //1ere zone
                                                                direction = GAUCHE_HAUT;

                                                                else if(verif_droite_milieu(positionRakette2)) //2ieme zone
                                                                direction = GAUCHE_MILIEU;
                                                               
                                                                else if(verif_droite_bas(positionRakette2)) //3ieme zone
                                                                direction = GAUCHE_BAS;
                                                               
                                                                else
                                                                SDL_BlitSurface(texte, NULL, ecran, &positionTexte1);
                                                               
                                                      }
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                    Anonyme
                                                      17 août 2006 à 21:42:00

                                                      Tu peut redonner le nouveau code ? car comme ça c'est dur :s
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        17 août 2006 à 21:43:45

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

                                                        #define VITESSE_BALLE 20
                                                        #define VITESSE_RAKETTE 10

                                                        int verif_droite_haut(SDL_Rect positionRakette2);
                                                        int verif_droite_milieu(SDL_Rect positionRakette2);
                                                        int verif_droite_bas(SDL_Rect positionRakette2);
                                                        int verif_gauche_haut(SDL_Rect positionRakette1);
                                                        int verif_gauche_milieu(SDL_Rect positionRakette1);
                                                        int verif_gauche_bas(SDL_Rect positionRakette1);
                                                        int mur_haut();
                                                        int mur_bas();
                                                        enum{DROITE_MILIEU,DROITE_HAUT,DROITE_BAS,GAUCHE_MILIEU,GAUCHE_HAUT,GAUCHE_BAS};

                                                        int main(int argc, char *argv[])
                                                        {
                                                           
                                                        SDL_Surface *ecran = NULL, *balle = NULL, *rakette = NULL, *texte = NULL;
                                                        SDL_Rect position, positionRakette1, positionRakette2, positionTexte1, positionTexte2;
                                                        TTF_Font *police = NULL;
                                                        SDL_Color couleurRouge = {255, 0, 0};
                                                        int continuer = 1, tempsPrecedent = 0, tempsActuel = 0, direction = 0;;
                                                        SDL_Event event;
                                                           
                                                            SDL_Init(SDL_INIT_VIDEO);
                                                            TTF_Init();
                                                           
                                                            ecran = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
                                                            SDL_WM_SetCaption("Pong", NULL);
                                                            SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
                                                           
                                                            police = TTF_OpenFont("comic.ttf", 32);
                                                            texte = TTF_RenderText_Blended(police, "Le joueur de gauche Gagne!!", couleurRouge);
                                                            positionTexte1.x = 150;
                                                            positionTexte1.y = 300;
                                                            texte = TTF_RenderText_Blended(police, "Le joueur de droite Gagne!!", couleurRouge);
                                                            positionTexte2.x = 150;
                                                            positionTexte2.y = 300;
                                                           
                                                            balle = IMG_Load("balle.jpg");
                                                            position.x = 400;
                                                            position.y = 300;
                                                           
                                                            rakette = IMG_Load("rakette.jpg");
                                                            positionRakette1.x = 20;
                                                            positionRakette1.y = 250;
                                                           
                                                           
                                                            positionRakette2.x = 760;
                                                            positionRakette2.y = 250;
                                                           
                                                            SDL_EnableKeyRepeat(10, 10);
                                                           
                                                            while(continuer)
                                                            {
                                                            SDL_PollEvent(&event);
                                                            switch(event.type)
                                                            {
                                                              case SDL_QUIT:
                                                              continuer = 0;
                                                              break;
                                                           
                                                              case SDL_KEYDOWN:
                                                              switch (event.key.keysym.sym)
                                                              {
                                                                     case SDLK_UP:
                                                                     positionRakette2.y -= VITESSE_RAKETTE;
                                                                     break;
                                                                     
                                                                     case SDLK_DOWN:
                                                                     positionRakette2.y += VITESSE_RAKETTE;
                                                                     break;
                                                             
                                                                     case SDLK_a:
                                                                     positionRakette1.y -= VITESSE_RAKETTE;
                                                                     break;
                                                                     
                                                                     case SDLK_w:
                                                                     positionRakette1.y += VITESSE_RAKETTE;
                                                                     break;
                                                              }
                                                            }
                                                                 
                                                                  tempsActuel = SDL_GetTicks();
                                                                  if (tempsActuel - tempsPrecedent >= 30)
                                                                  {
                                                                   switch(direction)
                                                                   {
                                                                      case DROITE_MILIEU:
                                                                      position.x += VITESSE_BALLE;
                                                                      break;
                                                                     
                                                                      case DROITE_HAUT:
                                                                      position.x += VITESSE_BALLE;
                                                                      position.y -= VITESSE_BALLE;
                                                                      break;
                                                                     
                                                                      case DROITE_BAS:
                                                                      position.x += VITESSE_BALLE;
                                                                      position.y += VITESSE_BALLE;
                                                                      break;
                                                                     
                                                                      case GAUCHE_MILIEU:
                                                                      position.x -= VITESSE_BALLE;
                                                                      break;
                                                                   
                                                                      case GAUCHE_HAUT:
                                                                      position.x -= VITESSE_BALLE;
                                                                      position.y -= VITESSE_BALLE;
                                                                      break;
                                                                     
                                                                      case GAUCHE_BAS:
                                                                      position.x -= VITESSE_BALLE;
                                                                      position.y += VITESSE_BALLE;
                                                                      break;
                                                                   
                                                                   }
                                                                  tempsPrecedent = tempsActuel; 
                                                                  }
                                                                   else
                                                                  {
                                                                      SDL_Delay(30 - (tempsActuel - tempsPrecedent));
                                                                  }
                                                                   
                                                        if(position.x >= positionRakette2.x - balle->w) //dans ce cas la balle est a hauteur de la raquette
                                                          { 
                                                                   if(verif_droite_haut(positionRakette2)) //1ere zone
                                                                    direction = GAUCHE_HAUT;

                                                                    else if(verif_droite_milieu(positionRakette2)) //2ieme zone
                                                                    direction = GAUCHE_MILIEU;
                                                                   
                                                                    else if(verif_droite_bas(positionRakette2)) //3ieme zone
                                                                    direction = GAUCHE_BAS;
                                                                   
                                                                    else
                                                                    SDL_BlitSurface(texte, NULL, ecran, &positionTexte1);
                                                                   
                                                          }


                                                        else if(position.x <= positionRakette1.x)
                                                         {
                                                                   if(verif_gauche_haut(positionRakette1))
                                                                    direction = DROITE_HAUT;
                                                                   
                                                                    else if(verif_gauche_milieu(positionRakette1))
                                                                    direction = DROITE_MILIEU;
                                                                   
                                                                    else if(verif_gauche_bas(positionRakette1))
                                                                    direction = DROITE_BAS;

                                                                    else
                                                                    SDL_BlitSurface(texte, NULL, ecran, &positionTexte2);
                                                                   
                                                        }

                                                        else if(mur_haut())
                                                          {
                                                             if(direction == DROITE_HAUT)
                                                             direction = DROITE_BAS;
                                                         
                                                             else if(direction == GAUCHE_HAUT)
                                                             direction = GAUCHE_BAS;
                                                         
                                                             else {}
                                                          }
                                                         

                                                        else if(mur_bas())
                                                          {
                                                             if(direction == DROITE_BAS)
                                                             direction = DROITE_HAUT;     

                                                             else if(direction == GAUCHE_BAS)
                                                             direction = GAUCHE_HAUT;

                                                             else {}
                                                           }

                                                        else {}

                                                        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
                                                        SDL_BlitSurface(balle, NULL, ecran, &position);
                                                        SDL_BlitSurface(rakette, NULL, ecran, &positionRakette1);
                                                        SDL_BlitSurface(rakette, NULL, ecran, &positionRakette2);
                                                        SDL_Flip(ecran);
                                                        }
                                                           
                                                           
                                                            TTF_CloseFont(police);
                                                            TTF_Quit();
                                                           
                                                            SDL_FreeSurface(texte);
                                                            SDL_FreeSurface(balle);
                                                            SDL_FreeSurface(rakette);
                                                           
                                                            SDL_Quit();
                                                            return EXIT_SUCCESS;
                                                        }   

                                                        int verif_droite_haut(SDL_Rect positionRakette2)
                                                        {
                                                             
                                                             if(position.y >= positionRakette2.y - 20  && position.y < positionRakette2.y + 40)
                                                             return 1;
                                                             
                                                             else
                                                             return 0;
                                                             
                                                        }

                                                        int verif_droite_milieu(SDL_Rect positionRakette2)
                                                        {
                                                             if(position.y >= positionRakette2.y + 40  && position.y < positionRakette2.y + 80)
                                                             return 1;
                                                             
                                                             else
                                                             return 0;
                                                        }

                                                        int verif_droite_bas(SDL_Rect positionRakette2)
                                                        {
                                                            if(position.y >= positionRakette2.y + 80  && position.y < positionRakette2.y + 140)
                                                            return 1;
                                                           
                                                            else
                                                            return 0;
                                                        }


                                                        int verif_gauche_haut(SDL_Rect positionRakette1)
                                                        {
                                                             if(position.y >= positionRakette1.y - 20 && position.y < positionRakette1.y + 50)
                                                             return 1;

                                                             else
                                                             return 0;
                                                             
                                                        }

                                                        int verif_gauche_milieu(SDL_Rect positionRakette1)
                                                        {
                                                            if(position.y >= positionRakette1.y + 50 && position.y < positionRakette1.y + 100)
                                                            return 1;
                                                           
                                                            else
                                                            return 0;
                                                        }

                                                        int verif_gauche_bas(SDL_Rect positionRakette1)
                                                        {
                                                            if(position.y >= positionRakette1.y + 100 && position.y < positionRakette1.y + 140)
                                                            return 1;
                                                           
                                                            else
                                                            return 0;
                                                        }

                                                        int mur_haut()
                                                        {
                                                            if(position.y == 0)
                                                            return 1;
                                                           
                                                            else
                                                            return 0;
                                                        }

                                                        int mur_bas()
                                                        {
                                                            if(position.y == 600)
                                                            return 1;
                                                           
                                                            else
                                                            return 0;
                                                        }
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                        Anonyme
                                                          17 août 2006 à 22:21:29

                                                          c'est logique, tu as declarer position dans main, hors il n'est pas dans la fonction, tu doit tout simplement envoyer position aux fonctions .
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            18 août 2006 à 10:18:55

                                                            ok le problème des déclaration des variables dans les fonctions est résolu, le jeu se compile sans erreurs mais la fenètre se ferme instentanément:

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

                                                            #define VITESSE_BALLE 20
                                                            #define VITESSE_RAKETTE 10

                                                            int verif_droite_haut(SDL_Rect positionRakette2, SDL_Rect position);
                                                            int verif_droite_milieu(SDL_Rect positionRakette2, SDL_Rect position);
                                                            int verif_droite_bas(SDL_Rect positionRakette2, SDL_Rect position);
                                                            int verif_gauche_haut(SDL_Rect positionRakette1, SDL_Rect position);
                                                            int verif_gauche_milieu(SDL_Rect positionRakette1, SDL_Rect position);
                                                            int verif_gauche_bas(SDL_Rect positionRakette1, SDL_Rect position);
                                                            int mur_haut(SDL_Rect position);
                                                            int mur_bas(SDL_Rect position);
                                                            enum{DROITE_MILIEU,DROITE_HAUT,DROITE_BAS,GAUCHE_MILIEU,GAUCHE_HAUT,GAUCHE_BAS};

                                                            int main(int argc, char *argv[])
                                                            {
                                                               
                                                            SDL_Surface *ecran = NULL, *balle = NULL, *rakette = NULL, *texte = NULL;
                                                            SDL_Rect position, positionRakette1, positionRakette2, positionTexte1, positionTexte2;
                                                            TTF_Font *police = NULL;
                                                            SDL_Color couleurRouge = {255, 0, 0};
                                                            int continuer = 1, tempsPrecedent = 0, tempsActuel = 0, direction = 0;;
                                                            SDL_Event event;
                                                               
                                                                SDL_Init(SDL_INIT_VIDEO);
                                                                TTF_Init();
                                                               
                                                                ecran = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
                                                                SDL_WM_SetCaption("Pong", NULL);
                                                                SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
                                                               
                                                                police = TTF_OpenFont("comic.ttf", 32);
                                                                texte = TTF_RenderText_Blended(police, "Le joueur de gauche Gagne!!", couleurRouge);
                                                                positionTexte1.x = 150;
                                                                positionTexte1.y = 300;
                                                                texte = TTF_RenderText_Blended(police, "Le joueur de droite Gagne!!", couleurRouge);
                                                                positionTexte2.x = 150;
                                                                positionTexte2.y = 300;
                                                               
                                                                balle = IMG_Load("balle.jpg");
                                                                position.x = 400;
                                                                position.y = 300;
                                                               
                                                                rakette = IMG_Load("rakette.jpg");
                                                                positionRakette1.x = 20;
                                                                positionRakette1.y = 250;
                                                               
                                                               
                                                                positionRakette2.x = 760;
                                                                positionRakette2.y = 250;
                                                               
                                                                SDL_EnableKeyRepeat(10, 10);
                                                               
                                                                while(continuer)
                                                                {
                                                                SDL_PollEvent(&event);
                                                                switch(event.type)
                                                                {
                                                                  case SDL_QUIT:
                                                                  continuer = 0;
                                                                  break;
                                                               
                                                                  case SDL_KEYDOWN:
                                                                  switch (event.key.keysym.sym)
                                                                  {
                                                                         case SDLK_UP:
                                                                         positionRakette2.y -= VITESSE_RAKETTE;
                                                                         break;
                                                                         
                                                                         case SDLK_DOWN:
                                                                         positionRakette2.y += VITESSE_RAKETTE;
                                                                         break;
                                                                 
                                                                         case SDLK_a:
                                                                         positionRakette1.y -= VITESSE_RAKETTE;
                                                                         break;
                                                                         
                                                                         case SDLK_w:
                                                                         positionRakette1.y += VITESSE_RAKETTE;
                                                                         break;
                                                                  }
                                                                }
                                                                     
                                                                      tempsActuel = SDL_GetTicks();
                                                                      if (tempsActuel - tempsPrecedent >= 30)
                                                                      {
                                                                       switch(direction)
                                                                       {
                                                                          case DROITE_MILIEU:
                                                                          position.x += VITESSE_BALLE;
                                                                          break;
                                                                         
                                                                          case DROITE_HAUT:
                                                                          position.x += VITESSE_BALLE;
                                                                          position.y -= VITESSE_BALLE;
                                                                          break;
                                                                         
                                                                          case DROITE_BAS:
                                                                          position.x += VITESSE_BALLE;
                                                                          position.y += VITESSE_BALLE;
                                                                          break;
                                                                         
                                                                          case GAUCHE_MILIEU:
                                                                          position.x -= VITESSE_BALLE;
                                                                          break;
                                                                       
                                                                          case GAUCHE_HAUT:
                                                                          position.x -= VITESSE_BALLE;
                                                                          position.y -= VITESSE_BALLE;
                                                                          break;
                                                                         
                                                                          case GAUCHE_BAS:
                                                                          position.x -= VITESSE_BALLE;
                                                                          position.y += VITESSE_BALLE;
                                                                          break;
                                                                       
                                                                       }
                                                                      tempsPrecedent = tempsActuel; 
                                                                      }
                                                                       else
                                                                      {
                                                                          SDL_Delay(30 - (tempsActuel - tempsPrecedent));
                                                                      }
                                                                       
                                                            if(position.x >= positionRakette2.x - balle->w) //dans ce cas la balle est a hauteur de la raquette
                                                              { 
                                                                       if(verif_droite_haut(positionRakette2, position)) //1ere zone
                                                                        direction = GAUCHE_HAUT;

                                                                        else if(verif_droite_milieu(positionRakette2, position)) //2ieme zone
                                                                        direction = GAUCHE_MILIEU;
                                                                       
                                                                        else if(verif_droite_bas(positionRakette2, position)) //3ieme zone
                                                                        direction = GAUCHE_BAS;
                                                                       
                                                                        else
                                                                        SDL_BlitSurface(texte, NULL, ecran, &positionTexte1);
                                                                       
                                                              }


                                                            else if(position.x <= positionRakette1.x)
                                                             {
                                                                       if(verif_gauche_haut(positionRakette1, position))
                                                                        direction = DROITE_HAUT;
                                                                       
                                                                        else if(verif_gauche_milieu(positionRakette1, position))
                                                                        direction = DROITE_MILIEU;
                                                                       
                                                                        else if(verif_gauche_bas(positionRakette1, position))
                                                                        direction = DROITE_BAS;

                                                                        else
                                                                        SDL_BlitSurface(texte, NULL, ecran, &positionTexte2);
                                                                       
                                                            }

                                                            else if(mur_haut(position))
                                                              {
                                                                 if(direction == DROITE_HAUT)
                                                                 direction = DROITE_BAS;
                                                             
                                                                 else if(direction == GAUCHE_HAUT)
                                                                 direction = GAUCHE_BAS;
                                                             
                                                                 else {}
                                                              }
                                                             

                                                            else if(mur_bas(position))
                                                              {
                                                                 if(direction == DROITE_BAS)
                                                                 direction = DROITE_HAUT;     

                                                                 else if(direction == GAUCHE_BAS)
                                                                 direction = GAUCHE_HAUT;

                                                                 else {}
                                                               }

                                                            else {}

                                                            SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
                                                            SDL_BlitSurface(balle, NULL, ecran, &position);
                                                            SDL_BlitSurface(rakette, NULL, ecran, &positionRakette1);
                                                            SDL_BlitSurface(rakette, NULL, ecran, &positionRakette2);
                                                            SDL_Flip(ecran);
                                                            }
                                                               
                                                               
                                                                TTF_CloseFont(police);
                                                                TTF_Quit();
                                                               
                                                                SDL_FreeSurface(texte);
                                                                SDL_FreeSurface(balle);
                                                                SDL_FreeSurface(rakette);
                                                               
                                                                SDL_Quit();
                                                                return EXIT_SUCCESS;
                                                            }   

                                                            int verif_droite_haut(SDL_Rect positionRakette2, SDL_Rect position)
                                                            {
                                                                 
                                                                 if(position.y >= positionRakette2.y - 20  && position.y < positionRakette2.y + 40)
                                                                 return 1;
                                                                 
                                                                 else
                                                                 return 0;
                                                                 
                                                            }

                                                            int verif_droite_milieu(SDL_Rect positionRakette2, SDL_Rect position)
                                                            {
                                                                 if(position.y >= positionRakette2.y + 40  && position.y < positionRakette2.y + 80)
                                                                 return 1;
                                                                 
                                                                 else
                                                                 return 0;
                                                            }

                                                            int verif_droite_bas(SDL_Rect positionRakette2, SDL_Rect position)
                                                            {
                                                                if(position.y >= positionRakette2.y + 80  && position.y < positionRakette2.y + 140)
                                                                return 1;
                                                               
                                                                else
                                                                return 0;
                                                            }


                                                            int verif_gauche_haut(SDL_Rect positionRakette1, SDL_Rect position)
                                                            {
                                                                 if(position.y >= positionRakette1.y - 20 && position.y < positionRakette1.y + 50)
                                                                 return 1;

                                                                 else
                                                                 return 0;
                                                                 
                                                            }

                                                            int verif_gauche_milieu(SDL_Rect positionRakette1, SDL_Rect position)
                                                            {
                                                                if(position.y >= positionRakette1.y + 50 && position.y < positionRakette1.y + 100)
                                                                return 1;
                                                               
                                                                else
                                                                return 0;
                                                            }

                                                            int verif_gauche_bas(SDL_Rect positionRakette1, SDL_Rect position)
                                                            {
                                                                if(position.y >= positionRakette1.y + 100 && position.y < positionRakette1.y + 140)
                                                                return 1;
                                                               
                                                                else
                                                                return 0;
                                                            }

                                                            int mur_haut(SDL_Rect position)
                                                            {
                                                                if(position.y == 0)
                                                                return 1;
                                                               
                                                                else
                                                                return 0;
                                                            }

                                                            int mur_bas(SDL_Rect position)
                                                            {
                                                                if(position.y == 600)
                                                                return 1;
                                                               
                                                                else
                                                                return 0;
                                                            }

                                                            Je pense que le problème vient de la:
                                                            police = TTF_OpenFont("comic.ttf", 32);
                                                                texte = TTF_RenderText_Blended(police, "Le joueur de gauche Gagne!!", couleurRouge);
                                                                positionTexte1.x = 150;
                                                                positionTexte1.y = 300;
                                                                texte = TTF_RenderText_Blended(police, "Le joueur de droite Gagne!!", couleurRouge);
                                                                positionTexte2.x = 150;
                                                                positionTexte2.y = 300;
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter

                                                            problème avec mon jeu (Pong)

                                                            × 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