Partage
  • Partager sur Facebook
  • Partager sur Twitter

Pense bete en SDL

Creer un espace

Sujet résolu
    10 août 2006 à 13:04:41

    Bonjour tout le monde.
    je me suis heurter à un probleme de taille ( :( ): comme le titre de ce sujet l'indique, je ne parvient pas à creer un espace pour séparer les mots dans mon pense-bete.
    voici le principe du programme :

    La fenetre souvre et affiche pendant 1500 millisecondes le logo du programme en emmetant un son.

    Puis, l'utilisateur tape ce dont il veut se rappeler(ex: Chercher de l'aide).

    Le programme sauvegarde la ligne dans un fichier appellé pensebete.psb(extension du pense-bete).

    Lors de sa prochaine execution, le programme ouvrira ce fichier et affichera la ligne qu'il contient.

    Le probleme:
    au lieu d'afficher "Chercher de l'aide", il affichera "Chercher" et s'arrete au premier espace.


    Apres 2 heures de recherche je "craque" et poste donc sur ce forum. :D

    je vous donne mon code source(Un peu long c'est vrai!):

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

    int main(int argc, char *argv[])
    {

        SDL_Surface *ecran = NULL, *texte[2] = {NULL}, *boutton[2] = {NULL}, *ufo = NULL, *enregistre = NULL;
        int continuer = 1, i = 0;
        SDL_Event event;
        TTF_Font *police = NULL;
        FSOUND_SAMPLE *son = NULL;
        SDL_Color couleurNoire = {0, 0, 0};
        SDL_Color couleurN = {255, 255, 255};
        SDL_Color couleurB = {0, 0, 255};
        SDL_Color couleurNb = {255, 0, 0};
        SDL_Rect position;
        long pos = 0;
        char texteb[100] = {0};
        char valider = 0;
        FILE *fichier = NULL;

        position.x = 7;
        position.y = 20;

        SDL_Rect position_2;

        position_2.x =5;
        position_2.y = 2;

        SDL_Rect position_Valider;
        position_Valider.x = 90;
        position_Valider.y = 50;

        SDL_Rect position_ufo;
        position_ufo.x = 96;// La surface sera centrée
        position_ufo.y = 25;

        SDL_Rect position_enregistre;
        position_enregistre.x = 0;
        position_enregistre.y = 0;


        SDL_Init(SDL_INIT_VIDEO);
        SDL_WM_SetIcon(SDL_LoadBMP("ufo.bmp"), NULL);
        TTF_Init();
        FSOUND_Init(44100, 32, 0);
        SDL_WM_SetCaption("Pense-Bete", NULL);

        SDL_EnableUNICODE(1);
        SDL_EnableKeyRepeat(100, 100);
        ecran = SDL_SetVideoMode(250, 100, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format,255,255,255));
        son = FSOUND_Sample_Load(FSOUND_FREE, "pan.wav", 0, 0, 0);
        SDL_EnableKeyRepeat(90,90);
        fichier = fopen("pensebete.psb", "r");
        if(fichier != NULL)
        {
        fscanf(fichier, "%s", texteb);
        fclose(fichier);
        }

        for(i = 0; i < strlen(texteb); i++)
        {
         if(texteb[i] != NULL)
         pos++;
        }


        ufo = IMG_Load("ufo.jpg");
        SDL_BlitSurface(ufo, NULL, ecran, &position_ufo);
        FSOUND_PlaySound(FSOUND_FREE, son);
        SDL_Flip(ecran);


        SDL_Delay(1500);

        police = TTF_OpenFont("times.ttf", 15);

        texte[1] = TTF_RenderText_Shaded(police, "Il faut penser à ", couleurB, couleurN);

        boutton[0] = TTF_RenderText_Shaded(police, "Valider", couleurNoire, couleurN);
        boutton[1] = TTF_RenderText_Shaded(police, "Valider", couleurNoire, couleurNb);
        SDL_BlitSurface(texte, NULL, ecran, &position);
        SDL_Flip(ecran);

    while (continuer)
    {



        texte[0] = TTF_RenderText_Shaded(police, texteb, couleurNoire, couleurN);

        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format,255,255, 255));
        SDL_BlitSurface(texte[0], NULL, ecran, &position);
        SDL_BlitSurface(texte[1], NULL, ecran, &position_2);

        if(event.motion.y > 48 && event.motion.y < 69 && event.motion.x > 59 && event.motion.x < 105)
        {
            SDL_BlitSurface(boutton[1], NULL, ecran, &position_Valider);
        }
        else
        {
            SDL_BlitSurface(boutton[0], NULL, ecran, &position_Valider);
        }
        SDL_Flip(ecran);
        SDL_WaitEvent(&event);

        if(event.type == SDL_QUIT)
            {
                    continuer = 0;
            }
        if(valider == 0)
        {
            if(event.type == SDL_KEYDOWN)
            {
                if(event.key.keysym.sym == SDLK_BACKSPACE && pos > 0)
                    {
                        pos--;
                        texteb[pos] = '\0';
                    }
                else if(event.key.keysym.sym == SDLK_RETURN)
                    {
                        SDL_EnableUNICODE(0);
                    }
                else if(event.key.keysym.sym == SDLK_ESCAPE)
                    {
                        SDL_EnableUNICODE(0);
                        texteb[0] = '\0';
                    }
                else if(event.key.keysym.sym == SDLK_SPACE )// Comment creer un espace et SAVEGARDER CELUI-CI pour pouvoir le réafficher?
                    {

                        texteb[i] = pos++;           

                    }
                else if( ( (event.key.keysym.sym & 0xFF00) == 0x0000) && (pos+1 < 100) )
                    {

                        texteb[pos] = event.key.keysym.unicode;
                        pos++;
                        texteb[pos] = '\0';
                    }
            }
        }
        if(event.type == SDL_MOUSEBUTTONUP)
            if(event.motion.y > 48 && event.motion.y < 69 && event.motion.x > 59 && event.motion.x < 105)
            {
            valider = 1;
            continuer = 0;
            }
    }

    if(valider)
    {
        fichier = fopen("pensebete.psb", "w+");
        if(fichier != NULL)
        {
        fprintf(fichier, "%s", texteb);
        fclose(fichier);
        }


        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format,255,255, 255));
        ufo = IMG_Load("ufo.jpg");
        SDL_BlitSurface(ufo, NULL, ecran, &position_ufo);
       FSOUND_PlaySound(FSOUND_FREE, son);
        enregistre = TTF_RenderText_Shaded(police, "Enregistré", couleurNoire, couleurN);
        SDL_Flip(ecran);
        SDL_Delay(1500);
    }
        SDL_FreeSurface(ufo);
        SDL_FreeSurface(boutton[0]);
        SDL_FreeSurface(boutton[1]);
        SDL_FreeSurface(texte[0]);
        SDL_FreeSurface(texte[1]);
        TTF_CloseFont(police);
        TTF_Quit();
        FSOUND_Sample_Free(son);
        FSOUND_Close();
        SDL_Quit();
        return EXIT_SUCCESS;
    }



    Je vous demande donc si vous pouvez m'aider et vous remercie d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
      10 août 2006 à 13:14:49

      Pour lire dans ton fichier il vaut mieux utiliser fgets():
      fgets(texteb, 100, fichier);
      • Partager sur Facebook
      • Partager sur Twitter
        10 août 2006 à 13:55:09

        Merci Seb 13 t'es un genie!
        vraiment, je me demande commnent j'ai pu ne pas y penser.
        merci
        • Partager sur Facebook
        • Partager sur Twitter

        Pense bete 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