Partage
  • Partager sur Facebook
  • Partager sur Twitter

problème, mon éditeur permet de sauvegarder mais pas de charger

Sujet résolu
    2 juillet 2007 à 13:58:44

    voici mon code:

    #include <iostream>
    #include <string>
    #include <fstream>

    #include <SDL.h>
    #include <SDL_image.h>
    #include <string.h>
    #define TAILLE_BLOC 35
    #define BLOCS_LARGEUR 20
    #define BLOCS_HAUTEUR 20

    using namespace std;
    SDL_Rect poscentrepoke;
    int chargerNiveau(SDL_Rect poscentrepoke);
    int sauvegarderNiveau(SDL_Rect poscentrepoke);


    int main ( int argc, char** argv )
    {
        SDL_Init(SDL_INIT_VIDEO);
        SDL_Surface *ecran = SDL_SetVideoMode(175 + BLOCS_LARGEUR * TAILLE_BLOC  ,BLOCS_HAUTEUR * TAILLE_BLOC,32,SDL_HWSURFACE);
        SDL_WM_SetCaption("editeur de batiments rpg", NULL);
        SDL_Surface *centrepoke = IMG_Load("sprites/decors/bâtiments/centrepc.bmp");

        SDL_Surface *objetchoisi = centrepoke;


        SDL_Surface *menu = IMG_Load("menu.bmp");

        SDL_Rect posmenu;
        bool clicGaucheEnCours = false;

        SDL_Rect posobj;



        posmenu.x = BLOCS_LARGEUR * TAILLE_BLOC;
        posmenu.y = 0;



        SDL_Event event;

        bool continuer = true;

       chargerNiveau(poscentrepoke);

       SDL_WarpMouse(ecran->w / 2, ecran->h / 2);

        while (continuer)
        {


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

                case SDL_KEYDOWN:
                    switch(event.key.keysym.sym)
                    {
                        case SDLK_ESCAPE:
                        continuer = false;
                        break;

                    }
                    break;


                case SDL_MOUSEBUTTONDOWN:

            if (event.button.button == SDL_BUTTON_LEFT)
            {
                if(event.motion.x >=BLOCS_LARGEUR * TAILLE_BLOC && event.motion.x <= BLOCS_LARGEUR * TAILLE_BLOC + 69 && event.motion.y >= 0 && event.motion.y <= 69)
                {objetchoisi = centrepoke;}

                if(event.motion.x >=BLOCS_LARGEUR * TAILLE_BLOC + 140 && event.motion.x <= BLOCS_LARGEUR * TAILLE_BLOC + 175 && event.motion.y >= 0 && event.motion.y <= 34)
                {sauvegarderNiveau( poscentrepoke);}
                if(event.motion.x >=BLOCS_LARGEUR * TAILLE_BLOC + 140 && event.motion.x <= BLOCS_LARGEUR * TAILLE_BLOC + 175 && event.motion.y >= 35 && event.motion.y <= 74)
                {chargerNiveau( poscentrepoke);}

                if(posobj.x < BLOCS_LARGEUR * TAILLE_BLOC)
                {

                    poscentrepoke.x = event.motion.x;
                    poscentrepoke.y = event.motion.y;

                }
            }
            break;



           case SDL_MOUSEMOTION:
           posobj.x = event.motion.x;
           posobj.y = event.motion.y;
           break;
            }
            // Effacement de l'écran
    SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));

    // Placement des objets à l'écran
    SDL_BlitSurface(centrepoke,NULL,ecran,&poscentrepoke);
    SDL_BlitSurface(menu,NULL,ecran,&posmenu);
    SDL_BlitSurface(objetchoisi,NULL,ecran,&posobj);
    // Mise à jour de l'écran
    SDL_Flip(ecran);
    }

        SDL_FreeSurface(centrepoke);

        SDL_FreeSurface(objetchoisi);

        SDL_Quit();
        return EXIT_SUCCESS;
    }


    int chargerNiveau(SDL_Rect poscentrepoke)
    {
            ifstream fichier;
            fichier.open("centrepoke.pos");

            if(fichier)
            {

            string contenu;
            getline(fichier, contenu) >> poscentrepoke.x;
            getline(fichier, contenu) >> poscentrepoke.y;
            }
            fichier.close();



    }

    int sauvegarderNiveau(SDL_Rect poscentrepoke)
    {
            ofstream fichier;
            fichier.open("centrepoke.pos", ios::out|ios::trunc);

            if(fichier)
            {


                    fichier << poscentrepoke.x << endl;
                    fichier << poscentrepoke.y << endl;
            }

            fichier.close();

    }

    Je ne sais pas pourquoi mais quand je clique sur l'icone de sauvegare de mon éditeur, la position de mon centre poke est sauvée, il y a un saut à la ligne grâce à endl; mais quand je clique sur charger, ça ne me fait rien. Est ce qu l'on pourrait regarder mes erreurs?
    • Partager sur Facebook
    • Partager sur Twitter
      2 juillet 2007 à 14:03:40

      Utilise les références comme je l'ai dans l'autre poste.

      int chargerNiveau(SDL_Rect& poscentrepoke)
      {
              ifstream fichier;
              fichier.open("centrepoke.pos");

              if(fichier)
              {

              string contenu;
              getline(fichier, contenu) >> poscentrepoke.x;
              getline(fichier, contenu) >> poscentrepoke.y;
              }
              fichier.close();



      }


      N'oublie pas de modifier le prototype.
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        2 juillet 2007 à 14:10:55

        et transforme le string en int (comme dit dans l'autre post :D )



        #include <string>
        #include <sstream>
        #include <fstream>
        using namespace std;

        int chargerNiveau(SDL_Rect poscentrepoke)
        {
                fstream fichier;
                fichier.open("centrepoke.pos");
                string tmp;

                if(fichier)
                {
                       fichier >> tmp;
                       istringstream iss(tmp);
                       iss >> poscentrepoke.x;
                }
                fichier.close();
        }
         
         
        • Partager sur Facebook
        • Partager sur Twitter
          2 juillet 2007 à 14:13:37

          @Xav57 : J'adore quand on écoute ce que je dit : LES REFERENCES !!!!!! Non de dieu :D
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            2 juillet 2007 à 14:41:29

            oui, d'accord les références, mais n'empêche qu'il récupèrera des chaines, alors que d'après l'erreur de compilation, faut que ce soit des int, donc :


            #include <string>
            #include <sstream>
            #include <fstream>
            using namespace std;

            int chargerNiveau(SDL_Rect& poscentrepoke)
            {
                    fstream fichier;
                    fichier.open("centrepoke.pos");
                    string tmp;

                    if(fichier)
                    {
                           fichier >> tmp;
                           istringstream iss(tmp);
                           iss >> poscentrepoke.x;
                           fichier >> tmp;
                           istringstream iss2(tmp);
                           iss2 >> poscentrepoke.y;
                    }
                    fichier.close();
            }
             
            • Partager sur Facebook
            • Partager sur Twitter
              2 juillet 2007 à 15:31:12

              Merci pour votre aide, le fait de mettre un astérix (&) a fait que mon prog marche parfaitement, merci!! Et c'est mon tit frère qui sra content!
              • Partager sur Facebook
              • Partager sur Twitter

              problème, mon éditeur permet de sauvegarder mais pas de charger

              × 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