Partage
  • Partager sur Facebook
  • Partager sur Twitter

problème charger map

Sujet résolu
    3 novembre 2006 à 18:23:32

    Salut a tous ,
    Problème résolu , vous pouvez utiliser le code pour vos jeux de plateforme:

    affichage.c :
    1. #include <SDL/SDL.h>
    2. #include <SDL/SDL_image.h>
    3. #include "structures.h"
    4. int chargerNiveau(int niveau[][NB_BLOCS_HAUTEUR])
    5. {
    6.     FILE* fichier = NULL;
    7.     char ligneFichier[NB_BLOCS_LARGEUR * NB_BLOCS_HAUTEUR + 1] = {0};
    8.     int i = 0, j = 0;
    9.     fichier = fopen("niveaux.lvl", "r");
    10.     if (fichier == NULL)
    11.         return 0;
    12.     for (i = 0 ; i < NB_BLOCS_HAUTEUR ; i++)
    13.     {
    14.         fgets(ligneFichier, NB_BLOCS_LARGEUR * NB_BLOCS_HAUTEUR + 1, fichier);
    15.         for (j = 0 ; j < NB_BLOCS_LARGEUR ; j++)
    16.         {
    17.             switch (ligneFichier[j])
    18.             {
    19.                 case 's':
    20.                     niveau[j][i] = 0;
    21.                     break;
    22.                 case 'p':
    23.                     niveau[j][i] = 1;
    24.                     break;
    25.                 case 'c':
    26.                     niveau[j][i] = 2;
    27.                     break;
    28.                 case 'm':
    29.                     niveau[j][i] = 3;
    30.                     break;
    31.                 case 'b':
    32.                     niveau[j][i] = 4;
    33.                     break;
    34.                 case ' ':
    35.                     niveau[j][i] = 5;
    36.                     break;
    37.             }
    38.         }
    39.     }
    40.     fclose(fichier);
    41.     return 1;
    42. }





    Main.c :

    1. #include <stdlib.h>
    2. #include <SDL/SDL.h>
    3. #include <SDL/SDL_image.h>
    4. #include "affichage.h"
    5. #include "structures.h"
    6. int main(int argc, char *argv[])
    7. {
    8.     // Les varibales -----------------------------------------------------------
    9.     SDL_Surface *ecran=NULL;
    10.     SDL_Surface *sol=NULL,*pipe=NULL,*mur=NULL,*bloc=NULL,*bonus=NULL, *marioActuel = NULL , *mario[9] = {NULL};
    11.     SDL_Rect position;
    12.     SDL_Event event;
    13.     int continuer = 1 , i = 0 , j = 0;
    14.     // Initialisation SDL ------------------------------------------------------
    15.     SDL_Init(SDL_INIT_VIDEO);
    16.     ecran = SDL_SetVideoMode(TAILLE_BLOC * NB_BLOCS_LARGEUR, TAILLE_BLOC * NB_BLOCS_HAUTEUR, 32, SDL_HWSURFACE|SDL_DOUBLEBUF);
    17.     if (ecran == NULL)
    18.     {
    19.         fprintf(stderr,"Erreur lors de l'initialisation SDL");
    20.         return EXIT_FAILURE;
    21.     }
    22.     int carte[NB_BLOCS_LARGEUR][NB_BLOCS_HAUTEUR] = {0};
    23.     sol = IMG_Load("sol.bmp");
    24.     pipe = IMG_Load("pipe.gif");
    25.     mur = IMG_Load("mur.gif");
    26.     bloc =IMG_Load("bloc.gif");
    27.     bonus = IMG_Load("bonus.gif");
    28.    if (!chargerNiveau(carte))
    29.         exit(EXIT_FAILURE);
    30.     while(continuer)
    31.     {
    32.         SDL_WaitEvent(&event);
    33.         switch(event.type)
    34.         {
    35.             case SDL_QUIT:
    36.             continuer = 0;
    37.             break;
    38.             case SDL_KEYDOWN:
    39.             switch(event.key.keysym.sym)
    40.             {
    41.                 case SDLK_ESCAPE:
    42.                 continuer = 0;
    43.                 break;
    44.             }
    45.         }
    46.         SDL_FillRect(ecran,NULL,SDL_MapRGB(ecran->format , 92,148,252));
    47.         for (i = 0 ; i < NB_BLOCS_LARGEUR ; i++)
    48.         {
    49.             for (j = 0 ; j < NB_BLOCS_HAUTEUR ; j++)
    50.             {
    51.                 position.x = i * TAILLE_BLOC;
    52.                 position.y = j * TAILLE_BLOC;
    53.                 switch(carte[i][j])
    54.                 {
    55.                         case SOL:
    56.                             SDL_BlitSurface(sol , NULL , ecran , &position);
    57.                         break;
    58.                         case TUBE:
    59.                             SDL_BlitSurface(pipe , NULL , ecran , &position);
    60.                         break;
    61.                         case CHANCE:
    62.                             SDL_BlitSurface(bonus , NULL , ecran , &position);
    63.                         break;
    64.                         case BLOC:
    65.                             SDL_BlitSurface(bloc , NULL , ecran , &position);
    66.                         break;
    67.                         case MUR:
    68.                             SDL_BlitSurface(mur , NULL , ecran , &position);
    69.                         break;
    70.                         case VIDE:
    71.                         break;
    72.                 }
    73.             }
    74.         }
    75.         SDL_Flip(ecran);
    76.     }
    77. }


    et structures.c :

    1. #ifndef DEF_STRUCTURES
    2. #define DEF_STRUCTURES
    3. #include <stdio.h>
    4. #include <stdlib.h>
    5. #include <SDL/SDL.h>
    6. #define TAILLE_BLOC 32
    7. #define LARGEUR_ECRAN 800
    8. #define HAUTEUR_ECRAN 400
    9. #define NB_BLOCS_LARGEUR 25
    10. #define NB_BLOCS_HAUTEUR 15
    11. enum { SOL, TUBE , BLOC , MUR , CHANCE ,VIDE };
    12. #endif

    • Partager sur Facebook
    • Partager sur Twitter
      4 novembre 2006 à 15:39:27

      non en fait c bon pas la peine j'ai trouvé l'erreur
      ca marche nickel , je peux faire des maps pour plateforme très facilement maintenant avec ce système, j' edit mon code au dessus pour ceux qui veulent !

      le fichier niveaux.lvl ressemble a cà :



      b                        b
      b bbb                    b
      b                        b
      b            bbbbbbbb    b
      b                        b
      b    bbbbbb              b
      b                        b
      bbbbb        bbbbbb      b
      b                        b
      b                        b
      b       mmbmmbmm      c  b
      bp                   ccc b
      b                   cccccb
      ssssssssssssssssssssssssss
      ssssssssssssssssssssssssss



      s->sol
      p->tuyau
      c->bloc
      m->mur
      b->bloc chance

      vous l'aurez compris les chiffres correspondent a un blit
      par contre selon la taille de l'image , il faut laisser de l'espace à coté.
      par exemple le tuyau du départ correspond au p sur la gauche et correspond a 4 blocs donc je le met au dessus car il prendra 2 blocs de largeur, pensez-y !
      voilà j'espere que ca servira parce que des comme cà j'en ai pas trouvé.... :(
      en tout cas c'est plus lisible et plus pratique que le fichier lvl qui prend une ligne. :)
      • Partager sur Facebook
      • Partager sur Twitter

      problème charger map

      × 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