Partage
  • Partager sur Facebook
  • Partager sur Twitter

[SDL] Problème de Mapping

Probablement un problème de lecture d'un fichier .txt

Sujet résolu
    8 juin 2006 à 20:08:30

    Bonjour, pour mieu comprendre le programme je pense que je devrais vous donner le programme entier :
    [Ps : ne faite pas attention au global et a la fonction assez moche (a ce qui parait) waitkey(); je pencais m'en occupé par la suite]

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

    #include "main.h"

    SDL_Event event; 

    int main(int argc, char *argv[])
    {
        SDL_Surface *screen = NULL, *Mur = NULL, *Sol = NULL;      // Création des Surfaces
        FILE* fichier = NULL;                                      //création d'un pointeur sur une structure (struct [typedef  dans stdio]);             
        /*chargement des images*/
        Mur = IMG_Load("mur.jpg")
        Sol = IMG_Load("sol.jpg")
       
        fichier = fopen("level.txt", "r");               // fichier devient un pointeur sur test.txt;
        int caractereActuel = 0;          //création de la variable caractereActuel
       
       
        /*initialisation de SDL*/
        SDL_Init(SDL_INIT_VIDEO);

        screen = SDL_SetVideoMode(LARGEUR_FENETRE, LARGEUR_FENETRE, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
        SDL_WM_SetCaption("Test Mapping", NULL);
       
        SDL_Rect rect1;                                   // création du rectangle servant a l'affichage de l'image
        Coordonnees pixel; pixel.x=0; pixel.y=0;          // création des variable grace a la structure dans main.h puis mise a zero
       
        if (fichier != NULL)       //test si le chargement du fichier a marcher
        {
            for(pixel.y=0;pixel.y<NOMBRE_IMAGE;pixel.y++)    // première boucle qui servira a afficher toutes les lignes pour remplir l'image
            {
                for(pixel.x=0;pixel.x<NOMBRE_IMAGE;pixel.x++)  // seconde boucle qui servira a afficher image par image pour formé une ligne
                {   
                    caractereActuel = fgetc(fichier);          // caractereActuel prend la valeur du caractère dans level.txt
                   
                    rect1.x=pixel.x*TAILLE_IMAGE;               // donne la valeur du rectangle sur les abscisses
                    rect1.y=pixel.y*TAILLE_IMAGE;               // donne la valeur du rectangle sur les ordonnées
                   
                    SDL_BlitSurface(Sol,NULL,screen,&rect1);       //j'affiche déjà a cet emplacement l'image sol
                   
                    if (caractereActuel == 1)                       //si le caractère pri dans level.txt est 1
                      SDL_BlitSurface(Mur,NULL,screen,&rect1);      //le programme affiche un image de mur par dessus
                   
                   
                   
                }
            }
           
        }
     
        SDL_Flip(screen);     //flip
        waitkey();             // fonction d'attente d'evenement       
       
        SDL_FreeSurface(screen);    //libère la surface
        fclose(fichier);            // libération de la mémoire - suppression du fichier chargé dans la mémoire vive;
        SDL_Quit();

        return EXIT_SUCCESS;
    }


    void waitkey()
    {
         while(1)
         {
                 while(SDL_PollEvent(&event))      
                 {
                                               if (event.type == SDL_KEYDOWN) 
                                               {
                                                              if (event.key.keysym.sym == SDLK_RETURN) return
                                                              }
                                               }
                 }
    }


    main.h
    #define NOMBRE_IMAGE        20
    #define TAILLE_IMAGE        32
    #define LARGEUR_FENETRE     NOMBRE_IMAGE * TAILLE_IMAGE


    void waitkey();

    typedef struct Coordonnees;
    struct Coordonnees
    {
        int x;
        int y;
    };


    level.txt

    11111111111111111111
    10000000011000000001
    10000000011000000001
    10000000011000000001
    10000000011000000001
    10000000011000000001
    10000000011000000001
    10000000011000000001
    10000000000000000001
    11111111000011111111
    11111111000011111111
    10000000000000000001
    10000000011000000001
    10000000011000000001
    10000000011000000001
    10000000011000000001
    10000000011000000001
    10000000011000000001
    10000000011000000001
    11111111111111111111


    Voila maintenant je vous esplique, quand je compile j'obtien un resultat comme il il n'y avait que des 0 de partout, j'en conclu donc qu'il y a un sousi aux niveaux des lignes :

                  if (caractereActuel == 1)
                      SDL_BlitSurface(Mur,NULL,screen,&rect1);


    Voila et merci d'avance pour toutes vos réponces :)
    • Partager sur Facebook
    • Partager sur Twitter
      8 juin 2006 à 20:49:48

      Avec une identation plus correcte et des commentaires, on se motivera plus facilement pour te répondre.
      • Partager sur Facebook
      • Partager sur Twitter
        8 juin 2006 à 20:51:41

        Désolé je ne pensais pas que le programme serait compliqué, je vais essayer de voir sa.



        EDIT : je vien de metre les commentaire en espérant que sa vous aide
        • Partager sur Facebook
        • Partager sur Twitter
          9 juin 2006 à 10:02:20

          EDIT : Resolut !

          if (caractereActuel == '1')

          au lieu de
          if (caractereActuel == 1)
          • Partager sur Facebook
          • Partager sur Twitter

          [SDL] Problème de Mapping

          × 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