From 9beae12dcf05e3d556a79dfd9fa3015a981b801c Mon Sep 17 00:00:00 2001 From: Romain Jegat <romain.jegat@insa-rennes.fr> Date: Tue, 3 May 2016 10:38:22 +0200 Subject: [PATCH] =?UTF-8?q?Avancement=20sur=20les=20fonctions=20de=20r?= =?UTF-8?q?=C3=A9cup=C3=A9ration=20et=20de=20construction=20des=20arbres?= =?UTF-8?q?=20-=20Ca=20ne=20marche=20pas=20-=20Comportements=20=C3=A9trang?= =?UTF-8?q?es=20de=20CodeBlocks...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/Competences.xml | 42 +++++----- src/competence.c | 168 +++++++++++++++++++++++++++++++------- src/competence.h | 1 + src/main.c | 15 ++-- src/structures.h | 6 +- 5 files changed, 171 insertions(+), 61 deletions(-) diff --git a/resources/Competences.xml b/resources/Competences.xml index 592b95a..c3cd89e 100644 --- a/resources/Competences.xml +++ b/resources/Competences.xml @@ -3,49 +3,49 @@ <Arbres> <Arbre id="S_MAGE"> - <Competence_E1 id="S_MAGE_1" nom="Creer Mage"> - <Competence_E2 id="S_MAGE_11" nom="Instinct de survie"> - <Competence_E3 id="S_MAGE_111" nom="Echo"> - <Competence_E4 id="S_MAGE_1111" nom="Glaçon vivant"> + <Competence_E1 id="S_MAGE_1" nom="Creer Mage" prix="1"> + <Competence_E2 id="S_MAGE_11" nom="Instinct de survie" prix="1"> + <Competence_E3 id="S_MAGE_111" nom="Echo" prix="1"> + <Competence_E4 id="S_MAGE_1111" nom="Glaçon vivant" prix="1"> </Competence_E4> </Competence_E3> - <Competence_E3 id="S_MAGE_112" nom="Transfert"> + <Competence_E3 id="S_MAGE_112" nom="Transfert" prix="1"> </Competence_E3> </Competence_E2> - <Competence_E2 id="S_MAGE_12" nom="Accro au Mana"> - <Competence_E3 id="S_MAGE_121" nom="Feu intérieur"> - <Competence_E4 id="S_MAGE_1211" nom="Compte au Panama"> + <Competence_E2 id="S_MAGE_12" nom="Accro au Mana" prix="1"> + <Competence_E3 id="S_MAGE_121" nom="Feu intérieur" prix="1"> + <Competence_E4 id="S_MAGE_1211" nom="Compte au Panama" prix="1"> </Competence_E4> - <Competence_E4 id="S_MAGE_1212" nom="Cercle de feu"> + <Competence_E4 id="S_MAGE_1212" nom="Cercle de feu" prix="1"> </Competence_E4> </Competence_E3> - <Competence_E3 id="S_MAGE_122" nom="Plein aux as"> - <Competence_E4 id="S_MAGE_1222" nom="Doublé gagnant"> + <Competence_E3 id="S_MAGE_122" nom="Plein aux as" prix="1"> + <Competence_E4 id="S_MAGE_1222" nom="Doublé gagnant" prix="1"> </Competence_E4> </Competence_E3> </Competence_E2> - </Competence_E1> -</Arbre> + </Competence_E1> + </Arbre> -<Arbre id="S_WAR"> + <Arbre id="S_WAR"> -</Arbre> + </Arbre> -<Arbre id="S_HEAL"> + <Arbre id="S_HEAL"> -</Arbre> + </Arbre> -<Arbre id="S_ROGUE"> + <Arbre id="S_ROGUE"> -</Arbre> + </Arbre> -<Arbre id="S_ARCHER"> + <Arbre id="S_ARCHER"> -</Arbre> + </Arbre> diff --git a/src/competence.c b/src/competence.c index 2e180f7..0e79074 100644 --- a/src/competence.c +++ b/src/competence.c @@ -1,8 +1,10 @@ #include <stdio.h> #include <stdlib.h> +#include <roxml.h> #include "structures.h" #include "competence.h" + /*! * \file competence.c * \brief Fichier contenant le code des fonctions liees aux arbres de compétences. @@ -22,13 +24,6 @@ typedef struct Competence{ */ -/* Arbre manuel */ -Competence comp_1; -Competence comp_11; -Competence comp_12; -Competence comp_111; -Competence comp_112; -Competence comp_121; /*! * \fn int set_Enfant(Competence *parent, Competence *enfant) @@ -41,19 +36,30 @@ int set_Enfant(Competence *parent, Competence *nouvel_enfant) if(estVide(parent)) { parent->enfant = nouvel_enfant; - }else{ + } + /* else + { Competence *enfant = parent->enfant; while(enfant!=NULL) { - enfant = enfant->frere; // A FINIR + enfant = enfant->frere; } enfant->frere = nouvel_enfant; - - } + }*/ return 0; } +int set_comp_name(Competence *comp, char *nom_donne) +{ + strcpy(comp->nomComp, nom_donne); +} + +int set_comp_id(Competence *comp, char *nom_donne) +{ + strcpy(comp->id, nom_donne); +} + /*! * \fn int init_Competence(Competence *noeud) @@ -63,18 +69,18 @@ int set_Enfant(Competence *parent, Competence *nouvel_enfant) */ int init_Competence(Competence *noeud) { - noeud->nomComp[0] = '\0'; - noeud->id[0] = '\0'; + memset(noeud->nomComp, 0, sizeof(noeud->nomComp)); + memset(noeud->id, 0, sizeof(noeud->id)); noeud->prix_competence = 0; noeud->frere = NULL; noeud->enfant = NULL; noeud->effet = NULL; + noeud->connu = 0; return 0; } - /*! * \fn int taille(Competence *noeud) * \brief La fonction renvoie le nombre d'enfants totaux d'une competence. @@ -106,10 +112,12 @@ unsigned int hauteur(Competence *noeud) for (enfant = noeud->enfant; enfant != NULL; enfant = enfant->frere) { if (hauteur(enfant) > compteur) - compteur = 1 + hauteur(enfant); + compteur = 1 + hauteur(enfant); } return compteur; - }else{ + } + else + { return 0; } } @@ -150,7 +158,7 @@ boolean est_connue(Competence *c) unsigned int NbEnfants(Competence *noeud) { unsigned int nb; - if (estVide(noeud)) + if (estVide(noeud)) { nb = 0; } @@ -159,20 +167,14 @@ unsigned int NbEnfants(Competence *noeud) Competence *enfant; for(noeud->enfant; enfant!= NULL; enfant=enfant->frere); - nb++; + nb++; } return nb; } -/* -------------------------------------------------------------------------------------- */ - -Competence* construire_arbre_competence(Competence* a){ - return NULL; - -} - -int rafraichir_competences(Competence * a){ +int rafraichir_competences(Competence * a) +{ return 0; } @@ -195,10 +197,120 @@ boolean est_complet(Competence *noeud) return 1; } -int chemin_auto_competence(Competence* c){ /* Renvoie la liste des compétences non connues se trouvant sur le chemin d'une compétence sélectionnée */ +int chemin_auto_competence(Competence* c) /* Renvoie la liste des compétences non connues se trouvant sur le chemin d'une compétence sélectionnée */ +{ return 0; } -Effet_Competence * get_effet(Competence *c){ /* Renvoie l'effet d'une competence */ +Effet_Competence * get_effet(Competence *c) /* Renvoie l'effet d'une competence */ +{ return c->effet; } + + + + +Competence* Extraire_Arbres(char *filename) +{ + node_t *rootXML, *Arbres; + char *id_text, *name_text; + int nb_Arbres=0, i_0=0; + + rootXML = roxml_load_doc(filename); + Arbres = roxml_get_chld(rootXML,"Arbres",0); + nb_Arbres = roxml_get_chld_nb(Arbres); + printf("On a %d arbres de competences \n", nb_Arbres); + + /* ---------------------------------------------------------------------------------------------- */ + /* Extraction des arbres */ + /* ---------------------------------------------------------------------------------------------- */ + + for(i_0=0; i_0<nb_Arbres; i_0++) + { + node_t *ArbreXML_Actuel = roxml_get_chld(Arbres, NULL, i_0); + Competence *Arbre_Actuel; + int nb_Comp1=0, i_1=0; + + init_Competence(Arbre_Actuel); + + nb_Comp1 = roxml_get_chld_nb(ArbreXML_Actuel); + printf("L'arbre %d contient %d competences de niveau 1\n",i_0, nb_Comp1); + set_comp_name(Arbre_Actuel,roxml_get_content(roxml_get_attr(ArbreXML_Actuel,"id",0),NULL,0,NULL)); + printf("L'arbre actuel a pour nom : %s\n", Arbre_Actuel->nomComp); + + /* ---------------------------------------------------------------------------------------------- */ + /* Extraction des competences 1 */ + /* ---------------------------------------------------------------------------------------------- */ + + for(i_1=0; i_1<nb_Comp1; i_1++) + { + node_t *CompetenceXML_1; + Competence *Competence_1; + int nb_Comp2=0, i_2=0; + + init_Competence(Competence_1); + + CompetenceXML_1 = roxml_get_chld(ArbreXML_Actuel, NULL, i_1); + nb_Comp2 = roxml_get_chld_nb(CompetenceXML_1); + printf("La competence numero %d de niveau 1 contient %d competences de niveau 2\n",i_1+1,nb_Comp2); + + set_comp_name(Competence_1,roxml_get_content(roxml_get_attr(CompetenceXML_1,"nom",0),NULL,0,NULL)); + + for(i_2=0; i_2<nb_Comp1; i_2++) + { + } + + + /* La competence j devient un enfant de la competence i */ + set_Enfant(Arbre_Actuel, Competence_1); + printf("L'enfant est : %s\n", Arbre_Actuel->enfant->nomComp); + } + } + return 0; +} + + +int Test_Competences() +{ + char* nomTest = "LeNom"; + printf("Debut Test Competences\n"); + + Competence *Comp_Test_Parent, *Comp_Test_Enfant; +/* + set_comp_name(Comp_Test_Parent, "Papa"); + set_comp_id(Comp_Test_Parent, "ID_PA"); + set_comp_name(Comp_Test_Enfant, "Bebe"); + set_comp_id(Comp_Test_Enfant, "ID_BE"); + + init_Competence(Comp_Test_Parent); + init_Competence(Comp_Test_Enfant); + + + +*/ + + + /*Verif */ + /* printf("Le nom est : %s\n", Comp_Test_Parent->nomComp); + printf("L'ID est : %s\n", Comp_Test_Parent->id); + printf("Le nom est : %s\n", Comp_Test_Enfant->nomComp); + printf("L'ID est : %s\n", Comp_Test_Enfant->id); + + printf("Lol"); +*/ + //printf("On a : %d\n", Comp_Test_Parent->connu); + + + + // set_Enfant(&Comp_Test_Parent, &Comp_Test_Enfant); + +// printf("L'enfant de %s est : %s\n",Comp_Test_Parent.nomComp,Comp_Test_Enfant.nomComp); +// printf("L'id de l'enfant de %s est : %s\n",Comp_Test_Parent.nomComp,Comp_Test_Parent.enfant.nomComp); + + + return 0; +} + + + + diff --git a/src/competence.h b/src/competence.h index 3f811c9..7fd86b8 100644 --- a/src/competence.h +++ b/src/competence.h @@ -5,6 +5,7 @@ #ifndef COMPETENCE_H_INCLUDED #define COMPETENCE_H_INCLUDED +#include "competence.h" /* Fonctions */ diff --git a/src/main.c b/src/main.c index 4cb08db..8991110 100644 --- a/src/main.c +++ b/src/main.c @@ -119,11 +119,12 @@ int main() /* Creation du package : */ /* -------------------------------------*/ - Game_Package Pack_A = Construire_Package(); +Game_Package Pack_A = Construire_Package(); Classe* Classes_Pack = Librairie_Classes("../resources/Classes.xml"); Terrain* Terrains_Pack = Librairie_Terrains("../resources/Terrains.xml"); Skins_GUI* GUI_Pack = Get_Skins_GUI("../resources/GUI.xml"); +//Competence* Competences_Pack = Extraire_Arbres("../resources/Competences.xml"); Pack_A.Classes_Package = Classes_Pack; @@ -135,8 +136,7 @@ Pack_A.GUI_Package = GUI_Pack; /* -------------------------------------*/ - printf("L'attaque 1 du mage est : %s\n",Pack_A.Classes_Package[0].attaques[2].nom); - + printf("\nL'attaque 1 du mage est : %s\n",Pack_A.Classes_Package[0].attaques[2].nom); printf("Le nom du terrain 1 est : %s\n",Pack_A.Terrains_Package[0].nomTerrain); printf("L'adresse de la texture GUI 1 est : %s\n",Pack_A.GUI_Package[0].GUI_default); printf("La ligne 3 de la map 1 est : %s\n",Pack_A.Cartes_Package[0].lignes[2]); @@ -144,15 +144,10 @@ Pack_A.GUI_Package = GUI_Pack; /* -------------------------------------*/ /* -------------------------------------*/ - main_SDL(Map_ANCIENNE_VERSION); + //main_SDL(Map_ANCIENNE_VERSION); -/* -------------------------------------*/ -/* Comment utiliser le package : */ -/* -------------------------------------*/ -printf("L'attaque 1 du mage est : %s\n",Pack_A.Classes_Package[0].attaques[0].nom); -printf("Le nom du terrain 1 est : %s\n",Pack_A.Terrains_Package[0].nomTerrain); -printf("L'adresse de la texture GUI 1 est : %s\n",Pack_A.GUI_Package[0].GUI_default); + Test_Competences(); return 0; diff --git a/src/structures.h b/src/structures.h index e69e1b1..b6ccbd3 100644 --- a/src/structures.h +++ b/src/structures.h @@ -191,14 +191,16 @@ typedef struct Personnage{ * \brief Definition de la structure competence. * sizeof(Competence) = 44 octets */ + + typedef struct Competence{ char nomComp[TAILLE_NOMS]; /*!< Nom de la competence de taille TAILLE_NOMS*/ char id[TAILLE_ID]; /*!< Un entier qui represente la competence*/ unsigned int prix_competence; /*!< Points a depenser pour acquerir la competence */ - struct Competence *frere; /*!< Competence suivante sur le meme niveau */ struct Competence *enfant; /*!< Premier enfant de la competence */ + struct Competence *frere; /*!< Competence suivante sur le meme niveau */ struct Effet_Competence *effet; /*!< Pointeur vers les effets de la competence */ - boolean connu; /*!< La competence est connue ou non */ + unsigned int connu; /*!< La competence est connue ou non */ }Competence; -- GitLab