From e4da73ece2c62ba84bef8beadcfa5b6853b30f7d Mon Sep 17 00:00:00 2001 From: Henri Montjoie <henri.montjoie@insa-rennes.fr> Date: Thu, 12 May 2016 16:51:37 +0200 Subject: [PATCH] ajout de la possibilite de selectionner une carte perso --- resources/Maps.xml | 6 +-- src/affichage.c | 113 +++++++++++++++++++++++++++++++++++++++------ src/affichage.h | 1 + 3 files changed, 102 insertions(+), 18 deletions(-) diff --git a/resources/Maps.xml b/resources/Maps.xml index 203583d..d0d290c 100644 --- a/resources/Maps.xml +++ b/resources/Maps.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <Maps> -<Map id="MAP_1" name="Comté de la sieste" desc="Cette map est so-mmeil" taille_lignes="10"> +<Map id="MAP_1" name="Comte de la sieste" desc="Cette map est so-mmeil" taille_lignes="10"> <Line>MFPPRRPPFM</Line> <Line>MFPPRRPPFM</Line> <Line>MFPPRRPPFM</Line> @@ -39,7 +39,7 @@ <Line>MFPPRRPFFF</Line> </Map> -<Map id="MAP_3" name="Chasse au trésor" desc="Une map pour 2 joueurs qui rend fou !! " taille_lignes="10"> +<Map id="MAP_3" name="Chasse au tresor" desc="Une map pour 2 joueurs qui rend fou !! " taille_lignes="10"> <Line>MFPPRRPPFM</Line> <Line>MFPPRRPPFM</Line> <Line>MFPPRRPPFM</Line> @@ -77,7 +77,7 @@ <Line>MFPPPPPRRF</Line> </Map> -<Map id="MAP_5" name="Carte basique" desc="Le mec qui l'a créée ne s'est pas foulé... " taille_lignes="10"> +<Map id="MAP_5" name="Carte basique" desc="Le mec qui l'a creee ne s'est pas foule... " taille_lignes="10"> <Line>PPPPPPPPPP</Line> <Line>PPPPPPPPPP</Line> <Line>PPPPPPPPPP</Line> diff --git a/src/affichage.c b/src/affichage.c index 643c738..e5891a8 100644 --- a/src/affichage.c +++ b/src/affichage.c @@ -15,7 +15,6 @@ EtatsJeu etat; char* nom_1; char* nom_2; -int num_carte_selectionnee; /*! @@ -67,6 +66,78 @@ int main_affichage() } +/*! + * \fn int afficher_cartes_personnalisees() + * \brief Fonction permettant le choix d'une carte personnalisee (càd qui n'est pas l'une des 4 previsualisees) par le joueur + * elle affiche leur nom, et leur description + * + * \return le numero de la carte choisie (ou -2 si l'utilisateur ferme la fenetre) + */ +int afficher_cartes_personnalisees() +{ + int i; + int c=-1; + int nbChoix=nbCartes()-4; + SDL_Surface* fenetre=NULL; + SDL_Surface* textes[nbChoix]; + SDL_Surface* desc[nbChoix]; + SDL_Rect positionsTextes[nbChoix]; + SDL_Rect positionsDesc[nbChoix]; + SDL_Event event; + SDL_Color couleurNoire = {0, 0, 0}; + SDL_Color couleurBlanche = {255, 255, 255}; + TTF_Font* police=TTF_OpenFont("../resources/fonts/arial.ttf",40); + TTF_Font* petite_police=TTF_OpenFont("../resources/fonts/arial.ttf",22); + + for(i=0; i<nbChoix; i++) + { + textes[i]=TTF_RenderText_Shaded(police, obtenirNomsCartes()[i+4], couleurBlanche,couleurNoire); + desc[i]=TTF_RenderText_Shaded(petite_police, obtenirDescriptionCarte()[i+4], couleurBlanche,couleurNoire); + positionsTextes[i].x=0; + positionsDesc[i].x=0; + positionsTextes[i].y=i*(textes[0]->h+desc[0]->h+5); + positionsDesc[i].y=positionsTextes[i].y+textes[i]->h; + } + fenetre = SDL_SetVideoMode(400, nbChoix*(textes[0]->h+desc[0]->h), 32, SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_RESIZABLE); + while(c==-1) + { + SDL_WaitEvent(&event); + switch(event.type) + { + case SDL_QUIT: + c=-2; + break; + case SDL_MOUSEBUTTONDOWN: + for(i=0; i<nbChoix; i++) + { + if(event.button.y/(textes[0]->h+desc[0]->h)==i) + { + c=4+i; + } + } + break; + default: + break; + } + for(i=0; i<nbChoix; i++) + { + SDL_BlitSurface(textes[i],NULL,fenetre,&positionsTextes[i]); + SDL_BlitSurface(desc[i],NULL,fenetre,&positionsDesc[i]); + } + SDL_Flip(fenetre); + } + SDL_FreeSurface(fenetre); + for(i=0; i<nbChoix; i++) + { + SDL_FreeSurface(textes[i]); + SDL_FreeSurface(desc[i]); + } + TTF_CloseFont(police); + TTF_CloseFont(petite_police); + return c; +} + + /*! * \fn char* afficherListeClasses(char** nomsClasses, char** skinsClasses, int nbChoix, TTF_Font* police,SDL_Color couleurTexte) * \brief Fonction permettant le choix de la classe d'un personnage par le joueur @@ -109,7 +180,6 @@ char* afficherListeClasses(char** nomsClasses, char** skinsClasses, int nbChoix, case SDL_QUIT: SDL_FreeSurface(fenetre); return "fermer"; - break; case SDL_MOUSEBUTTONDOWN: for(i=0; i<nbChoix; i++) { @@ -465,9 +535,21 @@ int affichage_menu_configuration() { if(event.button.x>position_carte[i].x&&event.button.x<position_carte[i].x+previsualisation[0]->w&&event.button.y>position_carte[i].y&&event.button.y<position_carte[i].y+previsualisation[0]->h) { - c=i; - selectionnerCarte(obtenirNomsCartes()[c]); - num_carte_selectionnee=c+1; + if(i!=4) + { + c=i; + selectionnerCarte(obtenirNomsCartes()[c]); + } + else + { + c=afficher_cartes_personnalisees(); + if(c==-2){ + c=-1; + }else{ + selectionnerCarte(obtenirNomsCartes()[c]); + } + ecran = SDL_SetVideoMode(LARGEUR_CARTE*(LARGEUR_CASE+1), HAUTEUR_CARTE*(HAUTEUR_CASE+2), 32, SDL_HWSURFACE|SDL_DOUBLEBUF); + } } } if(event.button.x>posTextes[0].x&&event.button.x<posTextes[0].x+textes[0]->w) @@ -518,7 +600,8 @@ int affichage_menu_configuration() { SDL_BlitSurface(previsualisation[i],NULL,ecran,&position_carte[i]); } - if(c!=-1) SDL_BlitSurface(map_choisie,NULL,ecran,&position_carte[c]); + if(c>-1&&c<4) SDL_BlitSurface(map_choisie,NULL,ecran,&position_carte[c]); + if(c>3) SDL_BlitSurface(map_choisie,NULL,ecran,&position_carte[4]); SDL_Flip(ecran); p=0; j=0; @@ -595,15 +678,15 @@ int affichage_carte() SDL_SetColorKey(classes[i], SDL_SRCCOLORKEY, SDL_MapRGB(classes[i]->format, 0, 0, 255)); } - /* for(i=0; i<NB_JOUEURS*NB_PERSO; i++) - { - persos[i]=SDL_LoadBMP(obtenirSkinPerso(i+1)); - if (!persos[i]) - { - printf("Unable to load bitmap: %s\n", SDL_GetError()); - return 1; - } - }*/ + /* for(i=0; i<NB_JOUEURS*NB_PERSO; i++) + { + persos[i]=SDL_LoadBMP(obtenirSkinPerso(i+1)); + if (!persos[i]) + { + printf("Unable to load bitmap: %s\n", SDL_GetError()); + return 1; + } + }*/ Guerrier_select = SDL_LoadBMP("../resources/Skins/guerrier_select.bmp"); if (!Guerrier_select) diff --git a/src/affichage.h b/src/affichage.h index 20a99ce..42f3add 100644 --- a/src/affichage.h +++ b/src/affichage.h @@ -28,5 +28,6 @@ int affichage_carte(); int afficher_menu(); +int afficher_cartes_personnalisees(); #endif -- GitLab