Partage
  • Partager sur Facebook
  • Partager sur Twitter

Mon éditeur terrain n'arrive pas à charger ma carte

j'ai plusieurs éditeurs, c'est pas le même que hier

Sujet résolu
    3 juillet 2007 à 9:52:23

    Bonjour,
    encore un problème avec un éditeur, j'avais cré un éditeur qui collait tous mes caractères, donc j'étais limité dans le nombree d'objets ( je ne pouvais pas faire case 10 : sinon il serait interprété par case 0 et case 1). Dans cet éditeur mon terrain est découp" en carrés, contrairement à ce que vous avez vu hier.
    Mais en codant la fonction charger niveau en C++, l'éditeur ne veut plus afficher mon terrain et toutes les cases sont remplacées par TERRE, soit case 0; La fonction sauvegarder marche, j'ai regardé dans mon fichier terrain.lvl .

    Voici mon code:
    #include <sstream>

    #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;
    int chargerNiveau(int carte[][BLOCS_HAUTEUR]);
    int sauvegarderNiveau(int carte[][BLOCS_HAUTEUR]);
    enum {TERRE,HERBE};

    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 terrains rpg", NULL);
        SDL_Surface *terre = IMG_Load("sprites/decors/sol.bmp");
        SDL_Surface *herbe = IMG_Load("sprites/decors/herbes/herbe1.bmp");
        SDL_Surface *objetchoisi = herbe;
        int objetActuel = HERBE;
        int i = 0, j = 0;
        SDL_Surface *menu = IMG_Load("menu.bmp");

        SDL_Rect posobj;

        SDL_Rect posmenu;
        bool clicGaucheEnCours = false;

        int carte[BLOCS_LARGEUR][BLOCS_HAUTEUR] = {0};

        SDL_Rect position;

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



        SDL_Event event;

        bool continuer = true;

       chargerNiveau(carte);

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

        while (continuer)
        {
            if(objetchoisi == herbe)
            {objetActuel = HERBE;}

            if(objetchoisi == terre)
            {objetActuel = TERRE;}



            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) /* On arrête le programme si on a fait un clic droit */
            {
                if(event.motion.x >=BLOCS_LARGEUR * TAILLE_BLOC && event.motion.x <= BLOCS_LARGEUR * TAILLE_BLOC + 34 && event.motion.y >= 0 && event.motion.y <= 34)
                {objetchoisi = terre;}
                if(event.motion.x >=BLOCS_LARGEUR * TAILLE_BLOC + 35 && event.motion.x <= BLOCS_LARGEUR * TAILLE_BLOC + 70 && event.motion.y >= 0 && event.motion.y <= 34)
                {objetchoisi = herbe;}
                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(carte);}
                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(carte);}

                if(posobj.x <= BLOCS_LARGEUR * TAILLE_BLOC)
                {
                carte[event.button.x / TAILLE_BLOC][event.button.y / TAILLE_BLOC] = objetActuel;
                clicGaucheEnCours = 1;
                }



            }

            break;

            case SDL_MOUSEBUTTONUP: // On désactive le booléen qui disait qu'un bouton était enfoncé
            if (event.button.button == SDL_BUTTON_LEFT)
            {clicGaucheEnCours = 0;}

           break;

           case SDL_MOUSEMOTION:
           posobj.x = event.motion.x;
                posobj.y = event.motion.y;
        if (clicGaucheEnCours) // Si on déplace la souris et que le bouton gauche de la souris est enfoncé
        {

            carte[event.motion.x / TAILLE_BLOC][event.motion.y / TAILLE_BLOC] = objetActuel;

        }
       break;
            }
            // Effacement de l'écran
    SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));

    // Placement des objets à l'écran
    for (i = 0 ; i < BLOCS_LARGEUR ; i++)
    {
        for (j = 0 ; j < BLOCS_HAUTEUR ; j++)
        {
            position.x = i * TAILLE_BLOC;
            position.y = j * TAILLE_BLOC;

            switch(carte[i][j])
            {
                case HERBE:
                    SDL_BlitSurface(herbe, NULL, ecran, &position);
                    break;
                case TERRE:
                    SDL_BlitSurface(terre, NULL, ecran, &position);
                    break;

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

        SDL_FreeSurface(terre);
        SDL_FreeSurface(herbe);
        SDL_FreeSurface(objetchoisi);
        SDL_Quit();
        return EXIT_SUCCESS;
    }


    int chargerNiveau(int carte[][BLOCS_HAUTEUR])
    {
        int i,j;
        fstream fichier;
            fichier.open("terrain.lvl");
            string tmp;

            if(fichier)
            {
            for (i = 0 ; i < BLOCS_HAUTEUR ; i++)
        {


            for (j = 0 ; j < BLOCS_LARGEUR ; j++)
            {
                fichier >> tmp;

                fichier << carte[j][i]<< endl;

            }
        }


            }
            fichier.close();




        }

    int sauvegarderNiveau(int carte[][BLOCS_HAUTEUR])
    {
        int i, j;
            ofstream fichier;
            fichier.open("terrain.lvl", ios::out|ios::trunc);

            if(fichier)
            {

    for (i = 0 ; i < BLOCS_HAUTEUR ; i++)
        {
            for (j = 0 ; j < BLOCS_LARGEUR ; j++)
            {
                fichier << carte[j][i] << endl;
            }
        }

            }

        fichier.close();



    }

    Je vois pas où j'ai fait une erreur.
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      3 juillet 2007 à 11:00:47

      Salut,

      dans ta fonction charger niveau, tu récupères qqch et tu le mets dans tmp; dans la ligne en dessous, tu ecrit dans le fichier le contenu de ton tableau ce qui revient à sauvegarder ! (regarde tes deux fonctions : c'est les meme !)

      Ensuite, tu inclut string et plus bas tu remet string.h (le deuxieme : pas besoin)

      Xav57
      • Partager sur Facebook
      • Partager sur Twitter
        3 juillet 2007 à 11:31:39

        Bon,
        J'ai refait ma fonction chargerNiveau mais il y a une erreur:
        int chargerNiveau(int carte[][BLOCS_HAUTEUR])
        {
            int i,j;
            fstream fichier;
                fichier.open("terrain.lvl");
               
                int test;

                if(fichier)
                {
                for (i = 0 ; i < BLOCS_HAUTEUR ; i++)
            {


                for (j = 0 ; j < BLOCS_LARGEUR ; j++)
                {
                    fichier >> test;

                    test >> carte[j][i] >> endl; // l'erreur: invalid operands of type 'int' to '<unknow type> ' to binary 'oparator>>'

                }
            }


                }
                fichier.close();




            }
        • Partager sur Facebook
        • Partager sur Twitter
          3 juillet 2007 à 11:40:50

          enlève fichier>>test; et en dessous remplace test par fichier
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            3 juillet 2007 à 12:30:04

            tu peut montrer la structure du fichier terrain.lvl
            • Partager sur Facebook
            • Partager sur Twitter
              3 juillet 2007 à 12:40:22

              Je comprends pas la question, mais bon, je te montre ce qu'il y a dedans:
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              1
              1
              1
              1
              1
              1
              1
              1
              1
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              1
              0
              0
              0
              0
              0
              0
              0
              1
              0
              0
              0
              0
              0
              1
              1
              1
              1
              1
              1
              1
              0
              0
              0
              0
              0
              0
              0
              1
              1
              1
              1
              1
              1
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
              0
               

              Un peu long, si c'est pas ça, regarde la dernière fonction de mon code, sauvegarderniveau.
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                3 juillet 2007 à 13:06:51

                Non, c'est bon, c'est ce que voulais !

                essaie ça :


                int chargerNiveau(int carte[][BLOCS_HAUTEUR])
                {
                    int i,j;
                    fstream fichier;
                    fichier.open("terrain.lvl");
                       
                    int tmp;

                    if(fichier)
                    {
                        for (i = 0 ; i < BLOCS_HAUTEUR ; i++)
                       {
                             for (j = 0 ; j < BLOCS_LARGEUR ; j++)
                             {
                                   fichier >> tmp;
                                   carte[i][j] = tmp;
                             }
                       }
                    }
                    fichier.close();
                }
                 


                mais il y aura un problème : BLOCS_LARGEUR est inconnue pour la fonction, non ?
                • Partager sur Facebook
                • Partager sur Twitter
                  3 juillet 2007 à 13:12:43

                  ça marche!! Dans ton code, j'ai remplacé carte[i][j](dans laquelle il y a plein de bugs) par carte[j][i] et il n'y a plus de bug. Merci
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme

                  Mon éditeur terrain n'arrive pas à charger ma carte

                  × 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