From 7909006687ca30b235323fa25b01ec1a6956a30b Mon Sep 17 00:00:00 2001
From: Sanchez Alexandre <alexandre.sanchez@insa-rennes.fr>
Date: Wed, 4 May 2016 15:50:09 +0200
Subject: [PATCH] =?UTF-8?q?[Allocation=20dynamique]=20Aide=20=C3=A0=20Roma?=
 =?UTF-8?q?in=20Jegat?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 resources/Competences.xml |  10 +--
 src/competence.c          | 166 ++++++++++----------------------------
 src/competence.h          |   2 +-
 src/main.c                |   7 +-
 src/structures.h          |   1 +
 5 files changed, 52 insertions(+), 134 deletions(-)

diff --git a/resources/Competences.xml b/resources/Competences.xml
index c3cd89e..8f51301 100644
--- a/resources/Competences.xml
+++ b/resources/Competences.xml
@@ -2,7 +2,7 @@
 
 <Arbres>
 
-  <Arbre id="S_MAGE">
+  <Arbre id="S_MAGE" nom="Creer Mage" prix="1">
     <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">
@@ -27,22 +27,22 @@
     </Competence_E1>
   </Arbre>
 
-  <Arbre id="S_WAR">
+  <Arbre id="S_WAR" nom="Creer Mage" prix="1">
 
 
   </Arbre>
 
-  <Arbre id="S_HEAL">
+  <Arbre id="S_HEAL" nom="Creer Mage" prix="1">
 
 
   </Arbre>
 
-  <Arbre id="S_ROGUE">
+  <Arbre id="S_ROGUE" nom="Creer Mage" prix="1">
 
 
   </Arbre>
 
-  <Arbre id="S_ARCHER">
+  <Arbre id="S_ARCHER" nom="Creer Mage" prix="1">
 
 
   </Arbre>
diff --git a/src/competence.c b/src/competence.c
index 4903f40..4e551f0 100644
--- a/src/competence.c
+++ b/src/competence.c
@@ -30,12 +30,10 @@ typedef struct Competence{
  *
  * \return Un entier.
  */
-Competence* init_Competence(Competence *noeud)
+Competence* init_Competence()
 {
-    noeud = malloc(sizeof(Competence));
+    Competence* noeud = malloc(sizeof(Competence));
 
-    memset(noeud->nomComp, 0, sizeof(noeud->nomComp));
-    memset(noeud->id, 0, sizeof(noeud->id));
     noeud->prix_competence = 0;
     noeud->frere = NULL;
     noeud->enfant = NULL;
@@ -79,10 +77,9 @@ int set_comp_enfant(Competence *parent, Competence *nouvel_enfant)  /* Ne foncti
 {
     if(estVide(parent))
     {
-        init_Competence(parent->enfant);
         parent->enfant = nouvel_enfant;
     }
-    else  // Solution cracra mais ça ne marche pas autrement (avec un while) //
+    else
     {
         set_comp_frere(parent->enfant, nouvel_enfant);
     }
@@ -97,7 +94,6 @@ int set_comp_frere(Competence *noeud, Competence *nouveau_frere)
     }
     else
     {
-        init_Competence(noeud->frere);
         noeud->frere = nouveau_frere;
     }
     return 0;
@@ -234,146 +230,66 @@ Effet_Competence * get_effet(Competence *c)       /* Renvoie l'effet d'une compe
     return c->effet;
 }
 
+int Extraire_Comp_Tree(node_t *arbreXML, Competence* arbreComp)
+{
+    int nb_Comp=0, i=0;
+
+    nb_Comp = roxml_get_chld_nb(arbreXML);
+
+    for(i=0; i<nb_Comp; i++)
+    {
+        node_t *brancheXML;
+        Competence *comp = init_Competence();
+
+        brancheXML = roxml_get_chld(arbreXML, NULL, i);
+        printf("--> Extraction de la competence %d sur %d \n", i+1, nb_Comp);
+
+        set_comp_name(comp, roxml_get_content(roxml_get_attr(brancheXML,"nom",0),NULL,0,NULL));
+        set_comp_id(comp, roxml_get_content(roxml_get_attr(brancheXML,"id",0),NULL,0,NULL));
+        set_comp_prix(comp, atoi(roxml_get_content(roxml_get_attr(brancheXML,"prix",0),NULL,0,NULL)));
+
+        printf("La competence actuelle a pour nom : %s\n", comp->nomComp);
+        printf("La competence actuelle a pour id : %s\n", comp->id);
+        printf("La competence actuelle a pour prix : %d\n", comp->prix_competence);
+
+        Extraire_Comp_Tree(brancheXML, comp);
+
+        set_comp_enfant(arbreComp, comp);
+    }
+    return 0;
+}
 
 
 Competence* Extraire_Arbres(char *filename)
 {
     node_t *rootXML, *Arbres;
     int nb_Arbres=0, i_0=0;
+    Competence *Arbre_Competences = init_Competence();
 
     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 */
     /* ---------------------------------------------------------------------------------------------- */
+    Extraire_Comp_Tree(Arbres, Arbre_Competences);
 
-    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;
-
-        Arbre_Actuel = 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("\nL'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;
-
-            Competence_1 = 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));
-            set_comp_id(Competence_1,roxml_get_content(roxml_get_attr(CompetenceXML_1,"id",0),NULL,0,NULL));
-            set_comp_prix(Competence_1,roxml_get_content(roxml_get_attr(CompetenceXML_1,"prix",0),NULL,0,NULL));
-
-            printf("La competence_1 actuelle a pour nom : %s\n", Competence_1->nomComp);
-            printf("La competence_1 actuelle a pour id : %s\n", Competence_1->id);
-            printf("La competence_1 actuelle a pour prix : %s\n", Competence_1->prix_competence);
-
-
-            for(i_2=0; i_2<nb_Comp2; i_2++)
-            {
-                node_t *CompetenceXML_2;
-                Competence *Competence_2;
-                int nb_Comp3=0, i_3=0;
-
-                Competence_2 = init_Competence(Competence_2);
-                CompetenceXML_2 = roxml_get_chld(CompetenceXML_1, NULL, i_2);
-                nb_Comp3 = roxml_get_chld_nb(CompetenceXML_2);
-                printf("La competence numero %d de niveau 2 contient %d competences de niveau 3\n",i_2+1,nb_Comp3);
-
-                set_comp_name(Competence_2,roxml_get_content(roxml_get_attr(CompetenceXML_2,"nom",0),NULL,0,NULL));
-                set_comp_id(Competence_2,roxml_get_content(roxml_get_attr(CompetenceXML_2,"id",0),NULL,0,NULL));
-                set_comp_prix(Competence_2,roxml_get_content(roxml_get_attr(CompetenceXML_2,"prix",0),NULL,0,NULL));
-
-                printf("La competence_2 actuelle a pour nom : %s\n", Competence_2->nomComp);
-                printf("La competence_2 actuelle a pour id : %s\n", Competence_2->id);
-                printf("La competence_2 actuelle a pour prix : %s\n", Competence_2->prix_competence);
-
-                for(i_3=0; i_3<nb_Comp3; i_3++)
-                {
-                    node_t *CompetenceXML_3;
-                    Competence *Competence_3;
-                    int nb_Comp4=0, i_4=0;
-
-                    Competence_3 = init_Competence(Competence_3);
-                    CompetenceXML_3 = roxml_get_chld(CompetenceXML_2, NULL, i_3);
-                    nb_Comp4 = roxml_get_chld_nb(CompetenceXML_3);
-                    printf("La competence numero %d de niveau 3 contient %d competences de niveau 4\n",i_3+1,nb_Comp4);
-
-                    set_comp_name(Competence_3,roxml_get_content(roxml_get_attr(CompetenceXML_3,"nom",0),NULL,0,NULL));
-                    set_comp_id(Competence_3,roxml_get_content(roxml_get_attr(CompetenceXML_3,"id",0),NULL,0,NULL));
-                    set_comp_prix(Competence_3,roxml_get_content(roxml_get_attr(CompetenceXML_3,"prix",0),NULL,0,NULL));
-
-                    printf("La competence_3 actuelle a pour nom : %s\n", Competence_3->nomComp);
-                    printf("La competence_3 actuelle a pour id : %s\n", Competence_3->id);
-                    printf("La competence_3 actuelle a pour prix : %s\n", Competence_3->prix_competence);
-
-                    for(i_4=0; i_4<nb_Comp4; i_4++)
-                    {
-                        node_t *CompetenceXML_4;
-                        Competence *Competence_4;
-
-                        Competence_4 = init_Competence(Competence_4);
-                        CompetenceXML_4 = roxml_get_chld(CompetenceXML_3, NULL, i_4);
-
-                        set_comp_name(Competence_4,roxml_get_content(roxml_get_attr(CompetenceXML_4,"nom",0),NULL,0,NULL));
-                        set_comp_id(Competence_4,roxml_get_content(roxml_get_attr(CompetenceXML_4,"id",0),NULL,0,NULL));
-                        set_comp_prix(Competence_4,roxml_get_content(roxml_get_attr(CompetenceXML_4,"prix",0),NULL,0,NULL));
-
-                        printf("La competence_4 actuelle a pour nom : %s\n", Competence_4->nomComp);
-                        printf("La competence_4 actuelle a pour id : %s\n", Competence_4->id);
-                        printf("La competence_4 actuelle a pour prix : %s\n", Competence_4->prix_competence);
-
-                        /* La competence 4 devient un enfant de la competence 3 */
-                        set_comp_enfant(Competence_3, Competence_4);                         //FAIT PLANTER A PARTIR DE 3 NIVEAUX DE REMPLISSAGE
-                    }
-                    /* La competence 3 devient un enfant de la competence 2 */
-                    //set_comp_enfant(Competence_2, Competence_3);
-                }
-                /* La competence 2 devient un enfant de la competence 1 */
-                set_comp_enfant(Competence_1, Competence_2);
-            }
-            /* La competence 1 devient un enfant du premier noeud */
-                //set_comp_enfant(Arbre_Actuel, Competence_1);
-        }
-
-    }
-
-
-
-    return 0;
+    return Arbre_Competences;
 }
 
 
 
-    int Test_Competences()
-    {
+int Test_Competences()
+{
+        int ret = 0;
         printf("Debut Test Competences\n");
 
         Competence *Comp_Test_Parent, *Comp_Test_Enfant, *Comp_Test_Petit_Enfant, *Comp_Test_Frere_Enfant;
 
-        Comp_Test_Parent=init_Competence(Comp_Test_Parent);
-        Comp_Test_Enfant=init_Competence(Comp_Test_Enfant);
-        Comp_Test_Petit_Enfant=init_Competence(Comp_Test_Petit_Enfant);
-        Comp_Test_Frere_Enfant=init_Competence(Comp_Test_Frere_Enfant);
+        Comp_Test_Parent = init_Competence();
+        Comp_Test_Enfant = init_Competence();
+        Comp_Test_Petit_Enfant = init_Competence();
+        Comp_Test_Frere_Enfant = init_Competence();
 
         if(estVide(Comp_Test_Parent))   /* Test de estVide() */
         {
diff --git a/src/competence.h b/src/competence.h
index 530a153..26faba1 100644
--- a/src/competence.h
+++ b/src/competence.h
@@ -9,7 +9,7 @@
 
 /* Fonctions */
 
-Competence* init_Competence(Competence *noeud);
+Competence* init_Competence();
 
 /* Fonctions Set */
 
diff --git a/src/main.c b/src/main.c
index 7cc72bc..41c0011 100644
--- a/src/main.c
+++ b/src/main.c
@@ -87,7 +87,7 @@ int main()
 
 //init_jeu("../resources/Init_jeu.xml");
 
-    char *Map_ANCIENNE_VERSION = ExtraireCarte(4);
+    char *Map_ANCIENNE_VERSION = ExtraireCarte(1);
     //printf("Map en version texte : %s\n", Map_A);
 
 
@@ -100,12 +100,13 @@ 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");
+Competence* Competences_Pack = Extraire_Arbres("../resources/Competences.xml");
 
 
 Pack_A.Classes_Package = Classes_Pack;
 Pack_A.Terrains_Package = Terrains_Pack;
 Pack_A.GUI_Package = GUI_Pack;
+Pack_A.Competences_Package = Competences_Pack;
 
     /* -------------------------------------*/
     /* Comment utiliser le package : */
@@ -120,7 +121,7 @@ Pack_A.GUI_Package = GUI_Pack;
     /* -------------------------------------*/
     /* -------------------------------------*/
 
-    main_SDL(Map_ANCIENNE_VERSION);
+    //main_SDL(Map_ANCIENNE_VERSION);
     //SDL_bis();
 
     //Test_Competences();
diff --git a/src/structures.h b/src/structures.h
index 6ca6a6d..b439fd3 100644
--- a/src/structures.h
+++ b/src/structures.h
@@ -237,6 +237,7 @@ typedef struct Game_Package{
     Terrain* Terrains_Package;
     Skins_GUI* GUI_Package;
     Carte_A* Cartes_Package;
+    Competence* Competences_Package;
 }Game_Package;
 
 
-- 
GitLab