diff --git a/resources/Maps.txt b/resources/Maps.txt index 79cb99b30ad75a95b4b0010c1a936749b862cea4..707789f33827b43b93173e1a8815e0a4aae25878 100644 --- a/resources/Maps.txt +++ b/resources/Maps.txt @@ -1,78 +1,67 @@ -MAP1 10*16 +MAP1 6 8 -MFMMMFFPPF -PFFFFFFPPF -PFPPPFFPPF -PFPPPFFPPF -PFPPFFFPPF -PFMMMFFPPF -PFMFFFFPPF -PFMMPFFPPF -PFPPPFFPPF -PFPPFFPPFP -PFFPPFFPPF -PFFFMFFPPF -PFPMMFFPPF -PFMMMFFPPF -PFFFPFFPPF -PFPPPPFPPF +FFMMMF +FFMMMF +FFMMMF +FFMMMF +FFMMMF +FFMMMF +FFMMMF +FFMMMF -MAP2 10*16 +MAP2 5 4 -FFMMMFFPPF -PFFFFFFPPF -PFPPPFFPPF -PFPPPFFPPF -PFPPFFFPPF -PFMMMFFPPF -PFMFFFFPPF -PFMMPFFPPF -PFPPPFFPPF -PFPPFFPPFP -PFFPPFFPPF -PFFFMFFPPF -PFPMMFFPPF -PFMMMFFPPF -PFFFPFFPPF -PFPPPPFPPF +FFPPM +FFPPM +FFPPM +FFPPM -MAP3 10*16 +MAP3 6 10 -FFMMMFFPPF -PFFFFFFPPF -PFPPPFFPPF -PFPPPFFPPF -PFPPFFFPPF -PFMMMFFPPF -PFMFFFFPPF -PFMMPFFPPF -PFPPPFFPPF -PFPPFFPPFP -PFFPPFFPPF -PFFFMFFPPF -PFPMMFFPPF -PFMMMFFPPF -PFFFPFFPPF -PFPPPPFPPF +FFPFMP +FFPFMP +FFPFMP +FFPFMP +FFPFMP +FFPFMP +FFPFMP +FFPFMP +FFPFMP +FFPFMP -MAP4 10*16 +MAP4 16 10 + +MPPFFPPPFMMPPFFP +PPFMMPPFFPPPFMMP +PFFPPPFMMPPFFPPP +FMMPPFFPPPFMMPPF +FPPPFMMPPFFPPPFM +MPPFFPPPEMMPPFFP +PPFMMEEEFPPPFMMP +PFFPPPEEMPPFFPPP +FMMPPFFPPPFMMPPF +FPPPFMMPPFFPPPFM + + +MAP5 10 16 + +MPPFFPPPFM +MPPFFPPPFM +MPPFFPPPFM +MPPFFPPPFM +MPPFFPPPFM +MPPFFPPPFM +MPPFFPPPFM +MPPFFPPPFM +MPPFFPPPFM +MPPFFPPPFM +MPPFFPPPFM +MPPFFPPPFM +MPPFFPPPFM +MPPFFPPPFM +MPPFFPPPFM +MPPFFPPPFM -FFMMMFFPPF -PFFFFFFPPF -PFPPPFFPPF -PFPPPFFPPF -PFPPFFFPPF -PFMMMFFPPF -PFMFFFFPPF -PFMMPFFPPF -PFPPPFFPPF -PFPPFFPPFP -PFFPPFFPPF -PFFFMFFPPF -PFPMMFFPPF -PFMMMFFPPF -PFFFPFFPPF -PFPPPPFPPF \ No newline at end of file diff --git a/resources/case_brillante.bmp b/resources/case_brillante.bmp index 3404ed557f71b7478cb5452288a380eae35d46ac..c8b230bbb3134a6e490e884e616ad209e61fcdb4 100644 Binary files a/resources/case_brillante.bmp and b/resources/case_brillante.bmp differ diff --git a/resources/continuer.bmp b/resources/continuer.bmp new file mode 100644 index 0000000000000000000000000000000000000000..a20ca59407de4c55b89fa2baf63467b19aa7a7b8 Binary files /dev/null and b/resources/continuer.bmp differ diff --git a/resources/foret.bmp b/resources/foret.bmp index ed15b2dfc38a584980251eae08a6cb111f809678..f2a60466e58a6620326ac82f02c583bb83b9b1b2 100644 Binary files a/resources/foret.bmp and b/resources/foret.bmp differ diff --git a/resources/montagne.bmp b/resources/montagne.bmp index 7f9d39d2351285b70850afa38de5448b2481111a..13c39287958ea3a0363709fb8e2f3ed135c60490 100644 Binary files a/resources/montagne.bmp and b/resources/montagne.bmp differ diff --git a/resources/quitter.bmp b/resources/quitter.bmp new file mode 100644 index 0000000000000000000000000000000000000000..a7e3252ff075c070eeb79f7bc9ec3810450bcadb Binary files /dev/null and b/resources/quitter.bmp differ diff --git a/src/SDL.c b/src/SDL.c index 07a4eb5e430c4166346257de7ff7b50b6a4e88cf..4c30a8f7038bb0a78846b5e9f4dbb3162825b2a4 100644 --- a/src/SDL.c +++ b/src/SDL.c @@ -16,9 +16,9 @@ */ -int main_SDL() +int main_SDL(char* Map) { - int i,j; + int i,j,affichermenu; SDL_Surface* ecran=NULL; SDL_Event event; SDL_Surface* guerrier=NULL; @@ -30,13 +30,18 @@ int main_SDL() SDL_Surface* eau=NULL; SDL_Surface* montagne=NULL; SDL_Surface* foret=NULL; + SDL_Surface* bouton_continuer=NULL; + SDL_Surface* bouton_quitter=NULL; SDL_Surface* Case_brillante=NULL; SDL_Rect Position_Case[LARGEUR_CARTE*HAUTEUR_CARTE]; SDL_Rect Position_Perso[NB_PERSO]; SDL_Rect Position_Case_brillante; + SDL_Rect pos_bouton_continuer; + SDL_Rect pos_bouton_quitter; int x_case_brillante; int y_case_brillante; int quitter=0; + affichermenu=0; if ( SDL_Init( SDL_INIT_VIDEO ) < 0 ) { @@ -53,6 +58,11 @@ int main_SDL() SDL_WM_SetCaption("Elder Internal Ignition",NULL); + pos_bouton_quitter.x=(LARGEUR_CARTE*LARGEUR_CASE-LARGEUR_BOUTON)/2; + pos_bouton_continuer.x=(LARGEUR_CARTE*LARGEUR_CASE-LARGEUR_BOUTON)/2; + pos_bouton_quitter.y=(HAUTEUR_CARTE*HAUTEUR_CASE-HAUTEUR_BOUTON)/2+HAUTEUR_BOUTON; + pos_bouton_continuer.y=(HAUTEUR_CARTE*HAUTEUR_CASE-HAUTEUR_BOUTON)/2-HAUTEUR_BOUTON; + guerrier = SDL_LoadBMP("../resources/guerrier.bmp"); if (!guerrier) { @@ -61,6 +71,20 @@ int main_SDL() } SDL_SetColorKey(guerrier, SDL_SRCCOLORKEY, SDL_MapRGB(guerrier->format, 0, 0, 255)); + bouton_continuer = SDL_LoadBMP("../resources/continuer.bmp"); + if (!bouton_continuer) + { + printf("Unable to load bitmap: %s\n", SDL_GetError()); + return 1; + } + + bouton_quitter = SDL_LoadBMP("../resources/quitter.bmp"); + if (!bouton_continuer) + { + printf("Unable to load bitmap: %s\n", SDL_GetError()); + return 1; + } + mage = SDL_LoadBMP("../resources/mage.bmp"); if (!mage) { @@ -156,33 +180,62 @@ int main_SDL() while(quitter==0) { SDL_WaitEvent(&event); - switch(event.type) /* Test du type d'événement */ - { - case SDL_QUIT: /* Si c'est un événement de type "Quitter" */ - quitter=1; - break; - case SDL_MOUSEBUTTONDOWN: - deplacement_personnage(event.button.x,event.button.y); + if(affichermenu==1){ + switch(event.type) /* Test du type d'événement */ + { + case SDL_QUIT: /* Si c'est un événement de type "Quitter" */ + quitter=1; + break; + case SDL_MOUSEBUTTONDOWN: + if(pos_bouton_continuer.x<event.button.x&&event.button.x<pos_bouton_continuer.x+LARGEUR_BOUTON){ + if(pos_bouton_continuer.y<event.button.y&&event.button.y<pos_bouton_continuer.x+HAUTEUR_BOUTON){ + affichermenu=0; + } + if(pos_bouton_quitter.y<event.button.y&&event.button.y<pos_bouton_quitter.x+HAUTEUR_BOUTON){ + quitter=1; + } + } + break; + case SDL_KEYDOWN:/* Si c'est un événement de type "touche pressée" */ + switch(event.key.keysym.sym){ + case SDLK_ESCAPE: + affichermenu=0; + break; + default: + quitter=0; + } break; - case SDL_MOUSEMOTION: - if(event.motion.x<LARGEUR_CARTE*LARGEUR_CASE&&event.motion.y<HAUTEUR_CARTE*HAUTEUR_CASE) - { - x_case_brillante = get_position_case_x(deplacement_brillance(event.motion.x,event.motion.y)); - y_case_brillante = get_position_case_y(deplacement_brillance(event.motion.x,event.motion.y)); - } + } + } + else{ + switch(event.type) /* Test du type d'événement */ + { + case SDL_QUIT: /* Si c'est un événement de type "Quitter" */ + quitter=1; + break; + case SDL_MOUSEBUTTONDOWN: + deplacement_personnage(event.button.x,event.button.y); + break; + case SDL_MOUSEMOTION: + if(event.motion.x<LARGEUR_CARTE*LARGEUR_CASE&&event.motion.y<HAUTEUR_CARTE*HAUTEUR_CASE) + { + x_case_brillante = get_position_case_x(deplacement_brillance(event.motion.x,event.motion.y)); + y_case_brillante = get_position_case_y(deplacement_brillance(event.motion.x,event.motion.y)); + } + break; + case SDL_KEYDOWN:/* Si c'est un événement de type "touche pressée" */ + switch(event.key.keysym.sym){ + case SDLK_n: + persosuivant(); + break; + case SDLK_ESCAPE: + affichermenu=1; + break; + default: + quitter=0; + } break; - case SDL_KEYDOWN:/* Si c'est un événement de type "touche pressée" */ - switch(event.key.keysym.sym){ - case SDLK_n: - persosuivant(); - break; - case SDLK_ESCAPE: - quitter=1; - break; - default: - quitter=0; - } - break; + } } for(i=0;i<NB_PERSO;i++){ Position_Perso[i].x=get_position_perso_x(i); @@ -191,15 +244,37 @@ int main_SDL() Position_Case_brillante.x=x_case_brillante; Position_Case_brillante.y=y_case_brillante; SDL_FillRect(ecran,NULL,SDL_MapRGB(ecran->format,0,0,0)); - for(i=0;i<LARGEUR_CARTE*HAUTEUR_CARTE;i++) - { - SDL_BlitSurface(plaine,NULL,ecran,&Position_Case[i]); - } - SDL_BlitSurface(Case_brillante,NULL,ecran,&Position_Case_brillante); - for(i=0;i<NB_PERSO;i++) + if(affichermenu==0) { - SDL_BlitSurface(guerrier,NULL,ecran,&Position_Perso[i]); + for(i=0;i<LARGEUR_CARTE*HAUTEUR_CARTE;i++) + { + switch(Map[i]) + { + case 80: //"P" en ASCII + SDL_BlitSurface(plaine,NULL,ecran,&Position_Case[i]); + break; + case 70: //"F" en ASCII + SDL_BlitSurface(foret,NULL,ecran,&Position_Case[i]); + break; + case 69: //"E" en ASCII + SDL_BlitSurface(eau,NULL,ecran,&Position_Case[i]); + break; + case 77: //"M" en ASCII + SDL_BlitSurface(montagne,NULL,ecran,&Position_Case[i]); + break; + } + + } + SDL_BlitSurface(Case_brillante,NULL,ecran,&Position_Case_brillante); + for(i=0;i<NB_PERSO;i++) + { + SDL_BlitSurface(guerrier,NULL,ecran,&Position_Perso[i]); + } + }else{ + SDL_BlitSurface(bouton_continuer,NULL,ecran,&pos_bouton_continuer); + SDL_BlitSurface(bouton_quitter,NULL,ecran,&pos_bouton_quitter); } + SDL_Flip(ecran); } quitter=0; diff --git a/src/SDL.h b/src/SDL.h index efc34f953da2cafaa6f1886bf00642fdad52853c..482dc8c364be81e96a553fb264e0af9fe2223ab2 100644 --- a/src/SDL.h +++ b/src/SDL.h @@ -12,8 +12,10 @@ #define LARGEUR_CASE 53 #define HAUTEUR_CASE 71 #define NB_PERSO 3 +#define HAUTEUR_BOUTON 20 +#define LARGEUR_BOUTON 115 -int main_SDL(); +int main_SDL(char* Map); #endif diff --git a/src/carte.c b/src/carte.c index b72e5b8a37625ee34f13e5aa6c77ddb8eaa6d6d7..377658d3649fdda105b192312871cd025d3c181f 100644 --- a/src/carte.c +++ b/src/carte.c @@ -10,6 +10,12 @@ */ +char* ExtraireCarte(int numero) +{ + return LireCarte("../resources/Maps.txt",numero); +} + + /*! * \fn Carte* LireCarte(int num) * \brief La fonction recupere la n-ieme carte dans un fichier et renvoie un pointeur sur la carte cree @@ -18,51 +24,58 @@ */ char* LireCarte(const char *filename, int num) { - char char_num_map[2],char_nb_lignes[2]="",char_nb_colonnes[2]=""; - int num_map = 0, nb_lignes = 0, nb_colonnes = 0, i=0, j=0, k=0; + char char_num_map[1],char_nb_lignes[2]="",char_nb_colonnes[2]=""; + char char_actuel; + int num_map = 0, nb_lignes = 0, nb_colonnes = 0, i=0, j=0, k=0, taille_Tableau = 0; FILE* file_map = NULL; file_map = fopen(filename, "r"); fseek(file_map, 3, SEEK_SET); - (fgets(char_num_map,3,file_map)); - num_map = atoi(char_num_map); - (fgets(char_nb_lignes,3,file_map)); - nb_lignes = atoi(char_nb_lignes); - fseek(file_map, 1, SEEK_CUR); - (fgets(char_nb_colonnes,3,file_map)); - nb_colonnes = atoi(char_nb_colonnes); - - while(num_map < num) + fscanf(file_map,"%d %d %d", &num_map, &nb_lignes, &nb_colonnes); /*! Lecture du nom et de la taille de la premiere map */ + + fgetc(file_map); + fgetc(file_map); + + while(num_map < num) /*! Descend jusqu'à la prochaine map */ { - for(k=0; k<nb_colonnes+4; k++) /*! Descend jusqu'à la prochaine map */ + for(k=0; k<nb_colonnes; k++) /*! Descend jusqu'à la prochaine map */ { - fseek(file_map,nb_lignes,SEEK_CUR); + fseek(file_map,nb_lignes+2,SEEK_CUR); } + fgetc(file_map); + fgetc(file_map); fseek(file_map, 3, SEEK_CUR); - (fgets(char_num_map,3,file_map)); - num_map = atoi(char_num_map); - (fgets(char_nb_lignes,3,file_map)); - nb_lignes = atoi(char_nb_lignes); - fseek(file_map, 1, SEEK_CUR); - (fgets(char_nb_colonnes,3,file_map)); - nb_colonnes = atoi(char_nb_colonnes); - } - fseek(file_map, 4, SEEK_CUR); + fscanf(file_map,"%d %d %d", &num_map, &nb_lignes, &nb_colonnes); /*! Lecture du nom et de la taille de la map */ + fgetc(file_map); + fgetc(file_map); + } char * TableauCarte = NULL; - TableauCarte = malloc(nb_colonnes * nb_lignes * sizeof(char)); + taille_Tableau = nb_colonnes*nb_lignes*sizeof(char); + TableauCarte = malloc(taille_Tableau); for(i=0; i<nb_colonnes; i++) { - for(j=0; j<=nb_lignes; j++) + for(j=0; j<nb_lignes; j++) { - TableauCarte[nb_lignes*i+j]=fgetc(file_map); + char_actuel = fgetc(file_map); + TableauCarte[nb_lignes*i+j] = char_actuel; } + fgetc(file_map); + } + +/* Test Tableau + + for(j=0; j<nb_lignes*nb_colonnes; j++) + { + printf("La valeur %d du tableau vaut : %c\n",j,TableauCarte[j]); } fclose(file_map); +*/ return TableauCarte; } + diff --git a/src/carte.h b/src/carte.h index bc58c4cff4271ba2adf70c07cc06708b09a0e922..abbe315a3df089a09fe7660b8c072a768175785d 100644 --- a/src/carte.h +++ b/src/carte.h @@ -3,6 +3,8 @@ * \brief Fichier contenant les signatures des fonctions liees a la structure carte. */ +char* ExtraireCarte(int numero); + char* LireCarte(const char *filename, int num); #ifndef CARTE_H_INCLUDED diff --git a/src/main.c b/src/main.c index 11dacdda2e37458376a2adbaf6bd2bab135c42b3..ebc090fb6010ce8596452bea24f5fb8cd56c5291 100644 --- a/src/main.c +++ b/src/main.c @@ -10,7 +10,6 @@ int init_jeu(const char *filename){ /* crée les différents types de terrains, de classes et d'attaques en lisant dans un fichier */ FILE *fichier_init; - fichier_init=fopen(filename,"r"); if (!fichier_init==NULL) { @@ -45,6 +44,15 @@ int init_jeu(const char *filename){ /* cr strcat(fichier_text, fichier_temp); Librairie_Terrains(fichier_text); } + if(strcmp(nom,"Cartes")==0) + { + char fichier_text[50]; + char fichier_temp[50]; + strcpy(fichier_text,"../resources/"); + strcpy(fichier_temp,roxml_get_content(roxml_get_attr(config_actuelle, "fichier", 0), NULL, 0, NULL)); + strcat(fichier_text, fichier_temp); + char *Map_B = ExtraireCarte(2); + } if(strcmp(nom,"Competences")==0) { /* Initialisation des compétences à venir */ @@ -58,7 +66,7 @@ int init_jeu(const char *filename){ /* cr fprintf(stderr,"Erreur dans l'ouverture du fichier"); return 1; } - + return 0; } @@ -67,18 +75,15 @@ int init_jeu(const char *filename){ /* cr int main() { - init_jeu("../resources/Init_jeu.xml"); -main_SDL(); - -printf("La case choisie est : %c\n",LireCarte("../resources/Maps.txt",3)[10]); - +char *Map_A = ExtraireCarte(4); +printf("Map en version texte : %s\n", Map_A); -main_SDL(); +main_SDL(Map_A); return 0;