Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Au secour ! ] Le programme démar :) puis s'arrette ! :(

quelques ligne font crasher mon programme

    22 décembre 2006 à 22:14:28

    EDIT : Désolé pour l'orthographe du titre


    bon voila mon programme


        /******************************
        **** PROGRAMME D'INTERFACE ****
        **** CREE PAR : Oly        ****
        **** LE 22/12/06           ****
        **** DERNNIERE MISE A JOUR ****
        **** LE 22/12/06           ****
        ******************************/


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

    #include "variables.h"
    #include "fonction.cpp"

    char T_scanf(SDL_Event event);

    int main(int argc, char *argv[])
    {
        SDL_Init(SDL_INIT_VIDEO);          // Initialisation SDL
        TTF_Init();                        // Initialisation SDL_TTF


        SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE);
        SDL_WM_SetCaption("Oly Interface 1.0", NULL);

        /***************************
        **** DEBUT DU PROGRAMME ****
        ****************************/


        bool continuer = true;            // Bool pour la boucle principale
        SDL_Event event;                  // evenement principale

        struct TEXT Text;                 // variable pour le text
        SDL_Color Couleur = {0, 0, 0};
        Text.police = TTF_OpenFont("Polices/police.ttf", 65);
        Text.afficher = true;

        SDL_Surface *ecran;               // Variable principale pour l ecran

        while (continuer) /// BOUCLE PRINCIPALE
        {                                 // Début de la boucle principale

            SDL_WaitEvent(&event);        // Attente d'un évènement

            switch(event.type)            // Analyse d'un évènement
            {
                case SDL_QUIT:            // Si on appuis sur fermer on ferme :)
                    continuer = false;
                break;

                case SDL_KEYDOWN:         // Si on enfonce une touche
                switch(event.key.keysym.sym)
                {
                        case SDLK_ESCAPE: // Si on appui sur la touche [Echap] on ferme le programe
                        continuer = false;
                        break;

                        default:
                        Text.lettre[Text.i] = T_scanf(event);
                        break;

                }
                break;
            }

        /// AFFICHAGE ///
        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));

        if(Text.afficher)
        {
            Text.text = TTF_RenderText_Blended(Text.police, Text.lettre, Couleur);
            SDL_BlitSurface(Text.text, NULL, ecran, &Text.position);
        }

        SDL_Flip(ecran);
        /// FIN AFFICHAGE ///
        }                                 // Fin de la boucle principale

        /*************************
        **** FIN DU PROGRAMME ****
        **************************/


        /// /// /// ///

        SDL_Quit();
        /// /// /// ///
        TTF_Quit();
        /// /// /// ///

        return EXIT_SUCCESS;
    }


        /*************************
        **** FONCTION T_SCANF ****
        **************************/


        char T_scanf(SDL_Event event)
        {
            char charactere;

            switch(event.key.keysym.sym)
            {
                case SDLK_a:
                charactere = 'a';
                break;

                case SDLK_b:
                charactere = 'b';
                break;

                case SDLK_c:
                charactere = 'c';
                break;

                case SDLK_d:
                charactere = 'd';
                break;

                case SDLK_e:
                charactere = 'e';
                break;

                case SDLK_f:
                charactere = 'f';
                break;

                case SDLK_g:
                charactere = 'g';
                break;

                case SDLK_h:
                charactere = 'h';
                break;

                case SDLK_i:
                charactere = 'i';
                break;

                case SDLK_j:
                charactere = 'j';
                break;

                case SDLK_k:
                charactere = 'k';
                break;

                case SDLK_l:
                charactere = 'l';
                break;

                case SDLK_m:
                charactere = 'm';
                break;

                case SDLK_n:
                charactere = 'n';
                break;

                case SDLK_o:
                charactere = 'o';
                break;

                case SDLK_p:
                charactere = 'p';
                break;

                case SDLK_q:
                charactere = 'q';
                break;

                case SDLK_r:
                charactere = 'r';
                break;

                case SDLK_s:
                charactere = 's';
                break;

                case SDLK_t:
                charactere = 't';
                break;

                case SDLK_u:
                charactere = 'u';
                break;

                case SDLK_v:
                charactere = 'v';
                break;

                case SDLK_w:
                charactere = 'w';
                break;

                case SDLK_x:
                charactere = 'x';
                break;

                case SDLK_y:
                charactere = 'y';
                break;

                case SDLK_z:
                charactere = 'z';
                break;

                default:

                break;

            }

        return charactere;

        }

        /*****************************
        **** FIN FONCTION T_SCANF ****
        ******************************/






    Bon voila si j enleve les lignes suivante le code marche donc l erreur n'est pas ailleur


    /// AFFICHAGE ///
        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));

        if(Text.afficher)
        {
            Text.text = TTF_RenderText_Blended(Text.police, Text.lettre, Couleur);
            SDL_BlitSurface(Text.text, NULL, ecran, &Text.position);
        }

        SDL_Flip(ecran);
        /// FIN AFFICHAGE ///



    Pls aider moi voila seulment 1h que je suis sur ce programme et sa plante deja !!!!
    • Partager sur Facebook
    • Partager sur Twitter
      22 décembre 2006 à 22:21:05

      Tu pourrais rajouter la declaration de "struct TEXT Text"?
      • Partager sur Facebook
      • Partager sur Twitter
        22 décembre 2006 à 22:26:36

        /**********************************
        **** CREATION DE LA CLASS TEXT ****
        ***********************************/

        class TEXT
        {
        public:

        char lettre[150];
        SDL_Color couleur;
        SDL_Surface *text;
        SDL_Rect position;
        TTF_Font *police;
        bool afficher;
        int i;
        };

        /*****************************
        **** FIN DE LA CLASS TEXT ****
        ******************************/

        Merci de te préocuper de mon cas
        • Partager sur Facebook
        • Partager sur Twitter
          22 décembre 2006 à 22:36:38

          Regarde deja si ta police est chargée correctement (on ne sait jamais).

          Sinon, j'ai relevé 2-3 trucs, ta fonction T_scanf aurait pu etre plus simple :
          if (event.key.keysym.sym>=SDLK_a &&event.key.keysym.sym<=SDLK_z)
                      charactere = 265+event.key.keysym.sym-SDLK_a;



          Ensuite, ton fameux bout de code qui ne marche pas, il manque la libération de la surface; a chaque fois tu la re-rempli, mais tu ne vide pas l'ancien contenu.


          Comme dit, essai de verifier l'ouverture de la police. ;)
          • Partager sur Facebook
          • Partager sur Twitter
            22 décembre 2006 à 22:43:12

            Peut tu me réécrire ma fonction T_scanf avec tes amélioration ? :)

            sinon c'etait bien le chargement de la police et j aimerai bien savoir pourquoi car j avais fait le chose dans les regle de l art :)

            voila maintenant mon code


                /******************************
                **** PROGRAMME D'INTERFACE ****
                **** CREE PAR : Oly        ****
                **** LE 22/12/06           ****
                **** DERNNIERE MISE A JOUR ****
                **** LE 22/12/06           ****
                ******************************/


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

            #include "variables.h"
            #include "fonction.cpp"

            char T_scanf(SDL_Event event);

            int main(int argc, char *argv[])
            {
                SDL_Init(SDL_INIT_VIDEO);          // Initialisation SDL
                TTF_Init();                        // Initialisation SDL_TTF


                SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE);
                SDL_WM_SetCaption("Oly Interface 1.0", NULL);

                /***************************
                **** DEBUT DU PROGRAMME ****
                ****************************/


                bool continuer = true;            // Bool pour la boucle principale
                SDL_Event event;
                TTF_Font *police = NULL;                 // evenement principale

                struct TEXT Text;                 // variable pour le text
                SDL_Color Couleur = {0, 0, 0};
                police = TTF_OpenFont("Polices/police.ttf", 65);
                Text.afficher = true;

                SDL_Surface *ecran;               // Variable principale pour l ecran

                while (continuer) /// BOUCLE PRINCIPALE
                {                                 // Début de la boucle principale

                    SDL_WaitEvent(&event);        // Attente d'un évènement

                    switch(event.type)            // Analyse d'un évènement
                    {
                        case SDL_QUIT:            // Si on appuis sur fermer on ferme :)
                            continuer = false;
                        break;

                        case SDL_KEYDOWN:         // Si on enfonce une touche
                        switch(event.key.keysym.sym)
                        {
                                case SDLK_ESCAPE: // Si on appui sur la touche [Echap] on ferme le programe
                                continuer = false;
                                break;

                                default:
                                Text.lettre[Text.i] = T_scanf(event);
                                break;

                        }
                        break;
                    }

                /// AFFICHAGE ///
                SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));

                if(Text.afficher)
                {
                    Text.text = TTF_RenderText_Blended(police, Text.lettre, Couleur);
                    SDL_BlitSurface(Text.text, NULL, ecran, &Text.position);
                }

                SDL_Flip(ecran);
                /// FIN AFFICHAGE ///
                }                                 // Fin de la boucle principale

                /*************************
                **** FIN DU PROGRAMME ****
                **************************/


                /// /// /// ///

                SDL_Quit();
                /// /// /// ///
                TTF_Quit();
                /// /// /// ///

                return EXIT_SUCCESS;
            }


                /*************************
                **** FONCTION T_SCANF ****
                **************************/


                char T_scanf(SDL_Event event)
                {
                    char charactere;

                    switch(event.key.keysym.sym)
                    {
                        case SDLK_a:
                        charactere = 'a';
                        break;

                        case SDLK_b:
                        charactere = 'b';
                        break;

                        case SDLK_c:
                        charactere = 'c';
                        break;

                        case SDLK_d:
                        charactere = 'd';
                        break;

                        case SDLK_e:
                        charactere = 'e';
                        break;

                        case SDLK_f:
                        charactere = 'f';
                        break;

                        case SDLK_g:
                        charactere = 'g';
                        break;

                        case SDLK_h:
                        charactere = 'h';
                        break;

                        case SDLK_i:
                        charactere = 'i';
                        break;

                        case SDLK_j:
                        charactere = 'j';
                        break;

                        case SDLK_k:
                        charactere = 'k';
                        break;

                        case SDLK_l:
                        charactere = 'l';
                        break;

                        case SDLK_m:
                        charactere = 'm';
                        break;

                        case SDLK_n:
                        charactere = 'n';
                        break;

                        case SDLK_o:
                        charactere = 'o';
                        break;

                        case SDLK_p:
                        charactere = 'p';
                        break;

                        case SDLK_q:
                        charactere = 'q';
                        break;

                        case SDLK_r:
                        charactere = 'r';
                        break;

                        case SDLK_s:
                        charactere = 's';
                        break;

                        case SDLK_t:
                        charactere = 't';
                        break;

                        case SDLK_u:
                        charactere = 'u';
                        break;

                        case SDLK_v:
                        charactere = 'v';
                        break;

                        case SDLK_w:
                        charactere = 'w';
                        break;

                        case SDLK_x:
                        charactere = 'x';
                        break;

                        case SDLK_y:
                        charactere = 'y';
                        break;

                        case SDLK_z:
                        charactere = 'z';
                        break;

                        default:

                        break;

                    }

                return charactere;

                }

                /*****************************
                **** FIN FONCTION T_SCANF ****
                ******************************/






            MAIS GROS PROBLEME !!!! Dé que j appuie sur un touche le programme s'arrette :!
            • Partager sur Facebook
            • Partager sur Twitter
              22 décembre 2006 à 22:58:54

              Essai d'initiliser ta police a null avant de l'envoyer dans openfont (sinon je ne vois pas)

              Pour T_scanf f c'est simple,
              si t'a une touche entre a et z d'enfoncé,
              if((event.key.keysym.sym>=SDLK_a)
              &&(event.key.keysym.sym<=SDLK_z))

              alors, tu prends la touche et tu lui donne une valeur de 0 à 25 (comme l'alphabet)
              lettre=(event_saisie.key.keysym.sym - SDLK_a)


              Mais tu sais qu'en aski la lettre a ce n'est pas 0 mais 65, donc tu fais +65 :
              lettre=(event_saisie.key.keysym.sym - SDLK_a)+65  ; 
              • Partager sur Facebook
              • Partager sur Twitter
                22 décembre 2006 à 23:04:13

                Mais voila quand on appui sur une touche le programme s'arette

                pour la fonction es ce sa ?


                char T_scanf(SDL_Event event)
                    {
                        char charactere;

                        if((event.key.keysym.sym>=SDLK_a)&&(event.key.keysym.sym<=SDLK_z))
                        {
                            charactere=(event.key.keysym.sym - SDLK_a)+65  ;
                        }

                    return charactere;

                    }
                • Partager sur Facebook
                • Partager sur Twitter

                [Au secour ! ] Le programme démar :) puis s'arrette ! :(

                × 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