Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme avec mon tout premier jeu en SDL

    15 juin 2006 à 20:39:37

    bonjour j'ai un probleme avec mon tout premier jeu en SDL : carte j'expliquerai le but de ce jeu plus tard j'ai a peine commencé a le coder que BOUMMM !! un beug voici mon code :

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

    void pause();

    int main(int argc, char *argv[])
    {
    SDL_Surface *ecran = NULL, *cartes = NULL, *carteRouge = NULL, *carteBleu = NULL, *menu = NULL;

    ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE);

    menu = IMG_Load("menu.png");
    SDL_Rect positionMenu;
    positionMenu.x = 0;
    positionMenu.y = 0;

    SDL_Init(SDL_INIT_VIDEO);
    SDL_BlitSurface(menu, NULL, ecran, &positionMenu);

    SDL_Flip(ecran);
    pause();

    SDL_FreeSurface(menu);
        SDL_Quit();

        return EXIT_SUCCESS;
    }




    void pause()
    {
        int continuer = 1;
        SDL_Event event;

        while (continuer)
        {
            SDL_WaitEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
            }
        }
    }



    et les erreurs:

    [Linker error] undefined reference to `IMG_Load'
    ld returned 1 exit status
    C:\Dev-Cpp\sdl\cartes\Makefile.win [Build Error] [cartes.exe] Error 1

    voila j'espere que vous porrez m'aidé

    ++ Nico
    • Partager sur Facebook
    • Partager sur Twitter
      15 juin 2006 à 20:44:33

      Tu as inclu la librairie SDL_image dans l'éditeur de lien ?

      Dev-C++ : Projet -> Options du projet -> Onglet paramètres -> Ajouter fichier -> tu trouve le .lib qui était avec la librairie SDL_image
      • Partager sur Facebook
      • Partager sur Twitter
        15 juin 2006 à 20:46:56

        Essaie de mettre l'initialisation de la SDL avant l'initialisation de l'écran ;) .
        Edit : ton code marche a merveille, essaie de voir si tu as linké les .a et les .lib de ton projet comme te le précise Thedownloader .
        • Partager sur Facebook
        • Partager sur Twitter
          15 juin 2006 à 20:51:12

          Citation : Thedownloader

          Tu as inclu la librairie SDL_image dans l'éditeur de lien ?

          Dev-C++ : Projet -> Options du projet -> Onglet paramètres -> Ajouter fichier -> tu trouve le .lib qui était avec la librairie SDL_image



          Non sa venai effectivement de là merci
          • Partager sur Facebook
          • Partager sur Twitter
            16 juin 2006 à 13:39:07

            voila un nouveau pb voici mon code :

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



            int main(int argc, char *argv[])
            {
                SDL_Surface *ecran = NULL, *cartes = NULL, *carteRouge = NULL, *carteBleu = NULL, *menu = NULL, *texte = NULL;
                TTF_Font *police = NULL;
                SDL_Color couleurNoire = {0,0,0};
                int continuer = 1, score = 0, hasar, gagne = 0, texte2;
                const long MAX = 2, MIN = 1;
               
                srand(time(NULL));

               
                TTF_Init();
               
                ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE);
               
                police = TTF_OpenFont("Castle.ttf", 65);
               
                menu = IMG_Load("menu.png");
                SDL_Rect positionMenu;
                positionMenu.x = 0;
                positionMenu.y = 0;
               
                SDL_Init(SDL_INIT_VIDEO);
                SDL_BlitSurface(menu, NULL, ecran, &positionMenu);
                SDL_Flip(ecran);
               
               
                SDL_Event event;
                    do
                    {
                        hasar = (rand() % (MAX - MIN + 1)) + MIN;
                        SDL_WaitEvent(&event);
                        switch(event.type)
                        {
                            case SDL_QUIT:
                                continuer = 0;
                                break;
                               
                            case SDL_KEYDOWN:
                                switch(event.key.keysym.sym)
                                {
                                    case SDLK_KP1:
                                       
                                       
                                        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 85, 125, 170));
                     
               
                                         
                                        carteRouge = IMG_Load("carteRouge.bmp");
                                        carteBleu = IMG_Load("carteBleu.bmp");
                                       
                                       
                                        sprintf(texte2, "Score : %d", score);
                                       
                                        texte = TTF_RenderText_Blended(police, texte2, couleurNoire);
                                       
                                        SDL_Rect position1, position2, position3;
                                        position2.x = 400 - 61;
                                        position2.y = ecran->h / 2 - carteBleu-> h / 2;
                                                             
                                        position1.x = 240 - 61;
                                        position1.y = ecran->h / 2 - carteBleu-> h / 2;
                                       
                                        position3.x = 0;
                                        position3.y = 0;
                                                             
                                     
                                       
                                        SDL_BlitSurface(carteBleu, NULL, ecran, &position2);
                                        SDL_BlitSurface(carteBleu, NULL, ecran, &position1);
                                        SDL_BlitSurface(carteBleu, NULL, ecran, &position3);
                                                             
                                       
                                        SDL_Flip(ecran);
                                         
                                       
                                        while (continuer)
                                        {
                                            SDL_WaitEvent(&event);
                                            switch(event.type)
                                            {
                                                   case SDL_KEYDOWN:
                                                    switch(event.key.keysym.sym)
                                                    {
                                                       case SDLK_LEFT:
                                                            if ( hasar = 1 )
                                                            {
                                                                 score++;
                                                                 gagne = 1;   
                                                            break;
                                                             
                                                    }
                                                    break;
                                             }
                                             
                                         }
               
                                             break;
                                   
                                    case SDLK_KP2:
                                         continuer = 0;
                                         break;
                                         
                                }
                                break;
                        }
               
               
               
                } while (gagne = 1)
                       
                       
                   
                   
                       
                   
                    TTF_CloseFont(police);
                    TTF_Quit();
                   
                    SDL_FreeSurface(menu);
                    SDL_Quit();
               
                    return EXIT_SUCCESS;
            }


            et voila les erreurs :

            64 C:\Dev-Cpp\sdl\cartes\cartes.c [Warning] passing arg 1 of `sprintf' makes pointer from integer without a cast

            66 C:\Dev-Cpp\sdl\cartes\cartes.c [Warning] passing arg 2 of `TTF_RenderText_Blended' makes pointer from integer without a cast

            135 C:\Dev-Cpp\sdl\cartes\cartes.c syntax error at end of input

            C:\Dev-Cpp\sdl\cartes\Makefile.win [Build Error] [cartes.o] Error 1
            • Partager sur Facebook
            • Partager sur Twitter
              16 juin 2006 à 14:28:10

              Pense a rajouter une autre accolade fermante, parce que l'erreur vient probablement de ça.
              • Partager sur Facebook
              • Partager sur Twitter
                16 juin 2006 à 14:45:22

                } while (gagne = 1)

                et le point virgule il est où ? et le double == aussi pendant qu'on y est !
                • Partager sur Facebook
                • Partager sur Twitter
                  16 juin 2006 à 17:28:35

                  voila j'ai essayé de corriger mon code sa compile bien mais sa se referme directement
                  • Partager sur Facebook
                  • Partager sur Twitter
                    16 juin 2006 à 17:34:59

                    Comment ça, ça ne donne aucune erreur?
                    1: On doit mettre un FreeSurface a tout les SDL_Surface.
                    2: vérifie ton srand car on doit l'appeller une seule fois dans tout le code
                    • Partager sur Facebook
                    • Partager sur Twitter
                      16 juin 2006 à 17:58:47

                      Citation : Pierre89

                      } while (gagne = 1)


                      et le point virgule il est où ? et le double == aussi pendant qu'on y est !



                      Bin non pas pour un while ? o_O
                      • Partager sur Facebook
                      • Partager sur Twitter
                        16 juin 2006 à 18:05:04

                        Citation : piclem

                        Citation : Pierre89

                        } while (gagne = 1)


                        et le point virgule il est où ? et le double == aussi pendant qu'on y est !



                        Bin non pas pour un while ? o_O



                        si c un do .... while();

                        EDIT: voila j'ai reessayé de corriger voici mon code :

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




                        int main(int argc, char *argv[])
                        {
                            SDL_Surface *ecran = NULL, *cartes = NULL, *carteRouge = NULL, *carteBleu = NULL, *menu = NULL, *texte = NULL;
                            TTF_Font *police = NULL;
                            SDL_Color couleurNoire = {0,0,0};
                            int continuer = 1, score = 0, hasar, gagne = 0, texte2;
                            const long MAX = 2, MIN = 1;
                           

                           
                            TTF_Init();
                           
                            ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE);
                           
                            police = TTF_OpenFont("Castle.ttf", 65);
                           
                            menu = IMG_Load("menu.png");
                            SDL_Rect positionMenu;
                            positionMenu.x = 0;
                            positionMenu.y = 0;
                           
                            SDL_Init(SDL_INIT_VIDEO);
                            SDL_BlitSurface(menu, NULL, ecran, &positionMenu);
                            SDL_Flip(ecran);
                           
                           
                            SDL_Event event;
                                do
                                {
                                    hasar = (rand() % (MAX - MIN + 1)) + MIN;
                                    srand(time(NULL));
                                    SDL_WaitEvent(&event);
                                    switch(event.type)
                                    {
                                        case SDL_QUIT:
                                            continuer = 0;
                                            break;
                                           
                                        case SDL_KEYDOWN:
                                            switch(event.key.keysym.sym)
                                            {
                                                case SDLK_KP1:
                                                   
                                                   
                                                    SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 85, 125, 170));
                                 
                           
                                                     
                                                    carteRouge = IMG_Load("carteRouge.bmp");
                                                    carteBleu = IMG_Load("carteBleu.bmp");
                                                   
                                                   
                                                    sprintf(texte2, "Score : %d", score);
                                                   
                                                    texte = TTF_RenderText_Blended(police, texte2, couleurNoire);
                                                   
                                                    SDL_Rect position1, position2, position3;
                                                    position2.x = 400 - 61;
                                                    position2.y = ecran->h / 2 - carteBleu-> h / 2;
                                                                         
                                                    position1.x = 240 - 61;
                                                    position1.y = ecran->h / 2 - carteBleu-> h / 2;
                                                   
                                                    position3.x = 0;
                                                    position3.y = 0;
                                                                         
                                                 
                                                   
                                                    SDL_BlitSurface(carteBleu, NULL, ecran, &position2);
                                                    SDL_BlitSurface(carteBleu, NULL, ecran, &position1);
                                                    SDL_BlitSurface(carteBleu, NULL, ecran, &position3);
                                                                         
                                                   
                                                    SDL_Flip(ecran);
                                                     
                                                   
                                                    while (continuer)
                                                    {
                                                        SDL_WaitEvent(&event);
                                                        switch(event.type)
                                                        {
                                                               case SDL_KEYDOWN:
                                                                switch(event.key.keysym.sym)
                                                                {
                                                                   case SDLK_LEFT:
                                                                        if ( hasar = 1 )
                                                                        {
                                                                             score++;
                                                                             gagne = 1;   
                                                                        break;
                                                                         
                                                                }
                                                                break;
                                                         }
                                                         
                                                     }
                                                 
                           
                                                         break;
                                               
                                                case SDLK_KP2:
                                                     continuer = 0;
                                                     break;
                                                     
                                            }
                                            break;
                                    }
                            }
                           
                           
                        } while (gagne ==1);
                                   
                                   
                               
                               
                                   
                               
                                TTF_CloseFont(police);
                                TTF_Quit();
                               
                                SDL_FreeSurface(menu);
                                SDL_FreeSurface(carteBleu);
                                SDL_FreeSurface(carteRouge);
                                SDL_FreeSurface(texte);
                                SDL_FreeSurface(ecran);
                                SDL_Quit();
                           
                                return EXIT_SUCCESS;
                        }


                        il me sort les erreur suivante :

                        C:\Dev-Cpp\sdl\cartes\cartes.c In function `SDL_main':

                        63 C:\Dev-Cpp\sdl\cartes\cartes.c [Warning] passing arg 1 of `sprintf' makes pointer from integer without a cast

                        65 C:\Dev-Cpp\sdl\cartes\cartes.c [Warning] passing arg 2 of `TTF_RenderText_Blended' makes pointer from integer without a cast

                        voila j'espère que vous pourrez m'aidais

                        ++ Nico
                        • Partager sur Facebook
                        • Partager sur Twitter
                          16 juin 2006 à 21:58:14

                          Le texte2 doit être un tableau de char.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            18 juin 2006 à 17:17:07

                            j'ai tj pas reussi aidé moi svp
                            • Partager sur Facebook
                            • Partager sur Twitter
                              18 juin 2006 à 17:26:31

                              Citation : Nico63

                              j'ai tj pas reussi aidé moi svp


                              Tu as eu la reponse :

                              Citation : oussama1305

                              Le texte2 doit être un tableau de char.



                              C'est de là que viennent les deux erreurs tu dit que texte2 est un int !
                              • Partager sur Facebook
                              • Partager sur Twitter
                                18 juin 2006 à 22:54:07

                                sa s'ouvre et se referme directement voici le code :

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




                                int main(int argc, char *argv[])
                                {
                                    SDL_Surface *ecran = NULL, *cartes = NULL, *carteRouge = NULL, *carteBleu = NULL, *menu = NULL, *texte = NULL;
                                    TTF_Font *police = NULL;
                                    SDL_Color couleurNoire = {0,0,0};
                                    int continuer = 1, score = 0, hasar, gagne = 0;
                                    char texte2[20];
                                    const long MAX = 2, MIN = 1;
                                   

                                   
                                    TTF_Init();
                                   
                                    ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE);
                                   
                                    police = TTF_OpenFont("Castle.ttf", 65);
                                   
                                    menu = IMG_Load("menu.png");
                                    SDL_Rect positionMenu;
                                    positionMenu.x = 0;
                                    positionMenu.y = 0;
                                   
                                    SDL_Init(SDL_INIT_VIDEO);
                                    SDL_BlitSurface(menu, NULL, ecran, &positionMenu);
                                    SDL_Flip(ecran);
                                   
                                   
                                    SDL_Event event;
                                        do
                                        {
                                            hasar = (rand() % (MAX - MIN + 1)) + MIN;
                                            srand(time(NULL));
                                            SDL_WaitEvent(&event);
                                            switch(event.type)
                                            {
                                                case SDL_QUIT:
                                                    continuer = 0;
                                                    break;
                                                   
                                                case SDL_KEYDOWN:
                                                    switch(event.key.keysym.sym)
                                                    {
                                                        case SDLK_KP1:
                                                           
                                                           
                                                            SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 85, 125, 170));
                                         
                                   
                                                             
                                                            carteRouge = IMG_Load("carteRouge.bmp");
                                                            carteBleu = IMG_Load("carteBleu.bmp");
                                                           
                                                           
                                                            sprintf(texte2, "Score : %d", score);
                                                           
                                                            texte = TTF_RenderText_Blended(police, texte2, couleurNoire);
                                                           
                                                            SDL_Rect position1, position2, position3;
                                                            position2.x = 400 - 61;
                                                            position2.y = ecran->h / 2 - carteBleu-> h / 2;
                                                                                 
                                                            position1.x = 240 - 61;
                                                            position1.y = ecran->h / 2 - carteBleu-> h / 2;
                                                           
                                                            position3.x = 0;
                                                            position3.y = 0;
                                                                                 
                                                         
                                                           
                                                            SDL_BlitSurface(carteBleu, NULL, ecran, &position2);
                                                            SDL_BlitSurface(carteBleu, NULL, ecran, &position1);
                                                            SDL_BlitSurface(carteBleu, NULL, ecran, &position3);
                                                                                 
                                                           
                                                            SDL_Flip(ecran);
                                                             
                                                           
                                                            while (continuer)
                                                            {
                                                                SDL_WaitEvent(&event);
                                                                switch(event.type)
                                                                {
                                                                       case SDL_KEYDOWN:
                                                                        switch(event.key.keysym.sym)
                                                                        {
                                                                           case SDLK_LEFT:
                                                                                if ( hasar = 1 )
                                                                                {
                                                                                     score++;
                                                                                     gagne = 1;   
                                                                                break;
                                                                                 
                                                                        }
                                                                        break;
                                                                 }
                                                                 
                                                             }
                                                         
                                   
                                                                 break;
                                                       
                                                        case SDLK_KP2:
                                                             continuer = 0;
                                                             break;
                                                             
                                                    }
                                                    break;
                                            }
                                    }
                                   
                                   
                                } while (gagne ==1);
                                           
                                           
                                       
                                       
                                           
                                       
                                        TTF_CloseFont(police);
                                        TTF_Quit();
                                       
                                        SDL_FreeSurface(menu);
                                        SDL_FreeSurface(carteBleu);
                                        SDL_FreeSurface(carteRouge);
                                        SDL_FreeSurface(texte);
                                        SDL_FreeSurface(ecran);
                                        SDL_Quit();
                                   
                                        return EXIT_SUCCESS;
                                }
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  18 juin 2006 à 23:00:47

                                  Essaie de mettre une fonction Texte pour économiser de la place, et pour qu'on détecte l'erreur assez rapidement.
                                  ;)
                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  Probleme avec mon tout premier jeu en SDL

                                  × 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