From 92c5f618c35bf30f08bf6fab02c8f04272a77230 Mon Sep 17 00:00:00 2001 From: Romain Jegat <romain.jegat@insa-rennes.fr> Date: Mon, 25 Apr 2016 21:18:53 +0200 Subject: [PATCH] Ajout des fichiers skinsXML.c/h et fonction d'importation des noms de fichiers images --- resources/Skins.xml | 24 +++++------ src/main.c | 4 ++ src/skinsXML.c | 103 ++++++++++++++++++++++++++++++++++++++++++++ src/skinsXML.h | 24 +++++++++++ 4 files changed, 143 insertions(+), 12 deletions(-) create mode 100644 src/skinsXML.c create mode 100644 src/skinsXML.h diff --git a/resources/Skins.xml b/resources/Skins.xml index 9eacdc1..9ca62f9 100644 --- a/resources/Skins.xml +++ b/resources/Skins.xml @@ -3,35 +3,35 @@ <Skins> <Personnages> - <Skin id="SP_MAGE" f_default="resources/Skins/mage.bmp" f_selected="resources/Skins/mage_selected.bmp" f_healed="resources/Skins/mage_healed.bmp" f_damaged="resources/Skins/mage_damaged.bmp"> + <Skin id="SP_MAGE" f_default="../resources/Skins/mage.bmp" f_selected="../resources/Skins/mage_selected.bmp" f_healed="../resources/Skins/mage_healed.bmp" f_damaged="../resources/Skins/mage_damaged.bmp"> </Skin> - <Skin id="SP_WAR" f_default="resources/Skins/guerrier.bmp" f_selected="resources/Skins/guerrier_selected.bmp" f_healed="resources/Skins/guerrier_healed.bmp" f_damaged="resources/Skins/guerrier_damaged.bmp"> + <Skin id="SP_WAR" f_default="../resources/Skins/guerrier.bmp" f_selected="../resources/Skins/guerrier_selected.bmp" f_healed="../resources/Skins/guerrier_healed.bmp" f_damaged="../resources/Skins/guerrier_damaged.bmp"> </Skin> - <Skin id="SP_HEAL" f_default="resources/Skins/guerisseur.bmp" f_selected="resources/Skins/guerisseur_selected.bmp" f_healed="resources/Skins/guerisseur_healed.bmp" f_damaged="resources/Skins/guerisseur_damaged.bmp"> + <Skin id="SP_HEAL" f_default="../resources/Skins/guerisseur.bmp" f_selected="../resources/Skins/guerisseur_selected.bmp" f_healed="../resources/Skins/guerisseur_healed.bmp" f_damaged="../resources/Skins/guerisseur_damaged.bmp"> </Skin> - <Skin id="SP_ROGUE" f_default="resources/Skins/voleur.bmp" f_selected="resources/Skins/voleur_selected.bmp" f_healed="resources/Skins/voleur_healed.bmp" f_damaged="resources/Skins/voleur_damaged.bmp"> + <Skin id="SP_ROGUE" f_default="../resources/Skins/voleur.bmp" f_selected="../resources/Skins/voleur_selected.bmp" f_healed="../resources/Skins/voleur_healed.bmp" f_damaged="../resources/Skins/voleur_damaged.bmp"> </Skin> - <Skin id="SP_ARCHER" f_default="resources/Skins/voleurarcher.bmp" f_selected="resources/Skins/archer_selected.bmp" f_healed="resources/Skins/archer_healed.bmp" f_damaged="resources/Skins/archer_damaged.bmp"> + <Skin id="SP_ARCHER" f_default="../resources/Skins/voleurarcher.bmp" f_selected="../resources/Skins/archer_selected.bmp" f_healed="../resources/Skins/archer_healed.bmp" f_damaged="../resources/Skins/archer_damaged.bmp"> </Skin> </Personnages> <Terrains> - <Skin id="ST_FOREST" f_default="resources/Skins/foret.bmp"> + <Skin id="ST_FOREST" f_default="../resources/Skins/foret.bmp"> </Skin> - <Skin id="ST_PLAIN" f_default="resources/Skins/plaine.bmp"> + <Skin id="ST_PLAIN" f_default="../resources/Skins/plaine.bmp"> </Skin> - <Skin id="ST_MOUNTAIN" f_default="resources/Skins/montagne.bmp"> + <Skin id="ST_MOUNTAIN" f_default="../resources/Skins/montagne.bmp"> </Skin> - <Skin id="ST_WATER" f_default="resources/Skins/eau.bmp"> + <Skin id="ST_WATER" f_default="../resources/Skins/eau.bmp"> </Skin> - <Skin id="ST_ACTIVE" f_default="resources/Skins/case_brillante.bmp"> + <Skin id="ST_ACTIVE" f_default="../resources/Skins/case_brillante.bmp"> </Skin> </Terrains> <Interface> - <Skin id="SI_RESUME" f_default="resources/Skins/continuer.bmp"> + <Skin id="SI_RESUME" f_default="../resources/Skins/continuer.bmp"> </Skin> - <Skin id="ST_QUIT" f_default="resources/Skins/quitter.bmp"> + <Skin id="ST_QUIT" f_default="../resources/Skins/quitter.bmp"> </Skin> </Interface> diff --git a/src/main.c b/src/main.c index d2b42c3..d01b211 100644 --- a/src/main.c +++ b/src/main.c @@ -7,6 +7,7 @@ #include "SDL.h" #include "roxml.h" #include "carte.h" +#include "skinsXML.h" 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; @@ -86,6 +87,9 @@ printf("Map en version texte : %s\n", Map_A); Terrains_A = Librairie_Terrains("../resources/Terrains.XML"); printf("info Terrain: %d\n", Terrains_A[1].franchissable); +Skins_Charac *Images = Remplir_Skin_Charac("../resources/Skins.xml"); +printf("Adresse du skin mage damaged : %s\n", Images[0].charac_damaged); + main_SDL(Map_A); diff --git a/src/skinsXML.c b/src/skinsXML.c new file mode 100644 index 0000000..1b319cc --- /dev/null +++ b/src/skinsXML.c @@ -0,0 +1,103 @@ +#include <stdio.h> +#include <stdlib.h> +#include <roxml.h> + +#include "skinsXML.h" +#include "structures.h" + +/*! +* \file classesXML.c +* \brief Fichier contenant le code des fonctions d'aquisition des fichiers images. +*/ + + +/*! + * \fn Skins_Charac* Remplir_Skin_Charac(char *filename) + * \brief Fonction qui extrait les noms des fichiers images. + * + * \return un pointeur sur une collection de noms de fichiers. + */ +Skins_Charac* Remplir_Skin_Charac(char *filename) +{ + + FILE* Skins_log = NULL; + Skins_log = fopen("Skin_XML_log", "w"); + if (Skins_log != NULL) + { + fprintf(Skins_log,"Fichier decrivant le deroulement de la procedure d'aquisition des textures personnages\n\n"); + node_t *rootXML, *Skins, *Personnages; + unsigned int i=0, nb_persos=0; + + rootXML = roxml_load_doc(filename); /* Ouvre le doc XML et créé le noeud de base */ + Skins = roxml_get_chld(rootXML, NULL, 0); + Personnages = roxml_get_chld(Skins, NULL, 0); + nb_persos = roxml_get_chld_nb(Personnages); + + Skins_Charac* Liste_Skins_Charac = NULL; + + Liste_Skins_Charac = malloc(nb_persos * sizeof(Skins_Charac)); /* Allocation de la mémoire nécéssaire et test*/ + if (Liste_Skins_Charac == NULL) + { + fprintf(Skins_log,"Allocation impossible \n"); + exit(EXIT_FAILURE); + } + fprintf(Skins_log,"1) Memoire allouee avec succes \n"); + fprintf(Skins_log,"La memoire allouee fait %d octets\n",nb_persos * sizeof(Skins_Charac)); + + /* -----------------------------------------------------------------------------------------------------------------------*/ + + for(i=0; i<nb_persos; i++) + { + fprintf(Skins_log,"\nChargement de la classe numero %d\n", i+1); + + Skins_Charac Skins_Charac_en_cours; + + node_t* Skin; + char *id_text, *default_text, *selected_text, *healed_text, *damaged_text; + + Skin = roxml_get_chld(Personnages, NULL, i); + id_text = roxml_get_content(roxml_get_attr(Skin, "id", 0), NULL, 0, NULL); + default_text = roxml_get_content(roxml_get_attr(Skin, "f_default", 0), NULL, 0, NULL); + selected_text = roxml_get_content(roxml_get_attr(Skin, "f_selected", 0), NULL, 0, NULL); + healed_text = roxml_get_content(roxml_get_attr(Skin, "f_healed", 0), NULL, 0, NULL); + damaged_text = roxml_get_content(roxml_get_attr(Skin, "f_damaged", 0), NULL, 0, NULL); + + /* Tests + printf("TEST damaged : %s\n\n",damaged_text); + printf("TEST healed : %s\n\n",healed_text); + printf("TEST selected : %s\n\n",selected_text); + printf("TEST default : %s\n\n",default_text); + */ + + fprintf(Skins_log,"\n ID : %s", damaged_text); + fprintf(Skins_log,"\n default : %s", default_text); + fprintf(Skins_log,"\n selected : %s", selected_text); + fprintf(Skins_log,"\n healed : %s", healed_text); + fprintf(Skins_log,"\n damaged : %s\n\n", damaged_text); + + + strcpy(Skins_Charac_en_cours.charac_id, id_text); + strcpy(Skins_Charac_en_cours.charac_default, default_text); + strcpy(Skins_Charac_en_cours.charac_selected, selected_text); + strcpy(Skins_Charac_en_cours.charac_healed, healed_text); + strcpy(Skins_Charac_en_cours.charac_damaged, damaged_text); + + Liste_Skins_Charac[i] = Skins_Charac_en_cours; + + /* Tests + printf("Nom : %s\n\n", Skins_Charac_en_cours.charac_id); + printf("Healed : %s\n\n", Skins_Charac_en_cours.charac_healed); + printf("Damaged : %s\n\n", Skins_Charac_en_cours.charac_damaged); + printf("Selected : %s\n\n", Skins_Charac_en_cours.charac_selected); + printf("Default : %s\n\n", Skins_Charac_en_cours.charac_default); + */ + } + fclose(Skins_log); + return Liste_Skins_Charac; + } + else + { + fprintf(stderr,"Impossible d'ouvrir le fichier Skins_XML_log"); + + } +} diff --git a/src/skinsXML.h b/src/skinsXML.h new file mode 100644 index 0000000..7a559d3 --- /dev/null +++ b/src/skinsXML.h @@ -0,0 +1,24 @@ +/*! +* \file AffichageConsole.h +* \brief Fichier contenant les signatures des fonctions liees a l'aquisition des fichiers images. +*/ + +#ifndef SKINSXML_H_INCLUDED +#define SKINSXML_H_INCLUDED +#include <roxml.h> +#include "structures.h" + + typedef struct Skins_Charac{ + char charac_id[15]; + char charac_default[50]; + char charac_selected[50]; + char charac_healed[50]; + char charac_damaged[50]; +}Skins_Charac; + + +Skins_Charac* Remplir_Skin_Charac(char *filename); + + + +#endif // SKINSXML_H_INCLUDED -- GitLab