From 686ab07a3560b66ed90e14cbcb1d615c1aa81f16 Mon Sep 17 00:00:00 2001
From: Romain Jegat <romain.jegat@insa-rennes.fr>
Date: Sat, 30 Apr 2016 15:40:29 +0200
Subject: [PATCH] Lecture de map par XML - non fonctionel : Taille de lignes
 variables ?

---
 resources/Maps.xml | 37 +++++++++++++++++++
 src/carte.c        | 88 +++++++++++++++++++++++++++++++++++++++++-----
 src/carte.h        | 10 +++---
 src/main.c         |  3 +-
 src/structures.h   | 14 +++++++-
 5 files changed, 138 insertions(+), 14 deletions(-)
 create mode 100644 resources/Maps.xml

diff --git a/resources/Maps.xml b/resources/Maps.xml
new file mode 100644
index 0000000..274d546
--- /dev/null
+++ b/resources/Maps.xml
@@ -0,0 +1,37 @@
+<?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">
+<Line>FFMMMF</Line>
+<Line>FFMMMF</Line>
+<Line>FFMMMF</Line>
+<Line>FFMMMF</Line>
+<Line>FFMMMF</Line>
+<Line>FFMMMF</Line>
+<Line>FFMMMF</Line>
+<Line>FFMMMF</Line>
+</Map>
+
+<Map id="MAP_2" name="Chasse au trésor" desc="Une map pour 2 joueurs qui rend fou !! " taille_lignes="10">
+<Line>FFMMMF</Line>
+<Line>FFMMMF</Line>
+<Line>FFMMMF</Line>
+<Line>FFMMMF</Line>
+<Line>FFMMMF</Line>
+<Line>FFMMMF</Line>
+<Line>FFMMMF</Line>
+<Line>FFMMMF</Line>
+</Map>
+
+<Map id="MAP_3" name="Chasse au trésor" desc="Une map pour 2 joueurs qui rend fou !! " taille_lignes="10">
+<Line>FFMMMF</Line>
+<Line>FFMMMF</Line>
+<Line>FFMMMF</Line>
+<Line>FFMMMF</Line>
+<Line>FFMMMF</Line>
+<Line>FFMMMF</Line>
+<Line>FFMMMF</Line>
+<Line>FFMMMF</Line>
+</Map>
+
+</Maps>
diff --git a/src/carte.c b/src/carte.c
index b1d683d..89f02e7 100644
--- a/src/carte.c
+++ b/src/carte.c
@@ -2,6 +2,8 @@
 #include <stdlib.h>
 #include <string.h>
 #include "carte.h"
+#include "structures.h"
+#include <roxml.h>
 
 
 /*!
@@ -20,7 +22,7 @@ char* ExtraireCarte(int 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
  *
- * \return Un pointeur sur une tableau de lettres.
+ * \return Un pointeur sur une tableau de cartes.
  */
 char* LireCarte(const char *filename, int num)
 {
@@ -64,17 +66,87 @@ char* LireCarte(const char *filename, int num)
         fgetc(file_map);
     }
 
-/* Test Tableau
+    /* Test Tableau
 
-    for(j=0; j<nb_lignes*nb_colonnes; j++)
-    {
-        printf("La valeur %d du tableau vaut : %c\n",j,TableauCarte[j]);
-    }
+        for(j=0; j<nb_lignes*nb_colonnes; j++)
+        {
+            printf("La valeur %d du tableau vaut : %c\n",j,TableauCarte[j]);
+        }
 
-    fclose(file_map);
-*/
+        fclose(file_map);
+    */
     return TableauCarte;
 }
 
 
+Carte_A* ExtraireCartesXML(const char *filename)
+{
+    node_t *rootXML, *Maps;
+    int nb_Maps=0, i=0;
+    rootXML = roxml_load_doc(filename);
+    Maps = roxml_get_chld(rootXML, NULL, 0);
+
+    nb_Maps = roxml_get_chld_nb(Maps);
+    printf("Il y a %d maps\n", nb_Maps);
+
+    Carte_A* Tableau_Cartes = malloc(nb_Maps * sizeof(Carte_A));
+
+    /*-------------------------------------------------------------------------------------------------------------------*/
+    /* Aquisition des cartes */
+    /*-------------------------------------------------------------------------------------------------------------------*/
+
+    for(i=0; i<nb_Maps; i++)
+    {
+        int j=0, nb_lignes=0, taille_lignes;
+        char *id_text, *name_text, *desc_text, *lignes_text;
+        node_t *Map_Actuelle;
+        Map_Actuelle = roxml_get_chld(Maps,NULL,i);
+
+        id_text = roxml_get_content(roxml_get_attr(Map_Actuelle, "id", 0), NULL, 0, NULL);
+        name_text = roxml_get_content(roxml_get_attr(Map_Actuelle, "name", 0), NULL, 0, NULL);
+        desc_text = roxml_get_content(roxml_get_attr(Map_Actuelle, "desc", 0), NULL, 0, NULL);
+        taille_lignes = atoi(roxml_get_content(roxml_get_attr(Map_Actuelle, "taille_lignes", 0), NULL, 0, NULL));
+
+        printf("Les lignes font %d de long\n", taille_lignes);
+
+
+        nb_lignes = roxml_get_chld_nb(Map_Actuelle);
+
+        Carte_A Carte_Actuelle;
+
+        strcpy(Carte_Actuelle.id, id_text);
+        strcpy(Carte_Actuelle.nom, name_text);
+        strcpy(Carte_Actuelle.desc, desc_text);
+
+        printf("L'ID est :%s\n\n", Carte_Actuelle.id);
+        printf("Le nom est :%s\n\n", Carte_Actuelle.nom);
+        printf("La desc est :%s\n\n", Carte_Actuelle.desc);
+
+        /*--------------------------------------------------------------------------------------------------------------*/
+        /* Aquisition des lignes de la carte */
+        /*--------------------------------------------------------------------------------------------------------------*/
+
+        for(j=0; j<nb_lignes; j++)
+        {
+            node_t* Ligne_Actuelle;
+            Ligne_Actuelle = roxml_get_chld(Map_Actuelle, NULL, j);
+
+            char* sequence_ligne;
+            roxml_get_content(Ligne_Actuelle, sequence_ligne, 50, NULL);
+
+            printf("Sequence_Ligne vaut : %s\n", sequence_ligne);
+
+           // strcpy(Carte_Actuelle.lignes[j], sequence_ligne);
+
+            //printf("La ligne %d vaut : %s\n",j+1, Carte_Actuelle.lignes[j]);
+        }
+
+        Tableau_Cartes[i] = Carte_Actuelle;
+
+
+    }
+
+    return Tableau_Cartes;
+}
+
 
diff --git a/src/carte.h b/src/carte.h
index abbe315..46b2476 100644
--- a/src/carte.h
+++ b/src/carte.h
@@ -3,15 +3,17 @@
 * \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
 #define CARTE_H_INCLUDED
 
 #include "structures.h"
 
+char* ExtraireCarte(int numero);
+
+Carte_A* ExtraireCartesXML(const char *filename);
+
+char* LireCarte(const char *filename, int num);
+
 
 
 #endif // CARTE_H_INCLUDED
diff --git a/src/main.c b/src/main.c
index 998074b..9ee7df7 100644
--- a/src/main.c
+++ b/src/main.c
@@ -112,6 +112,7 @@ int main()
     char *Map_A = ExtraireCarte(4);
     printf("Map en version texte : %s\n", Map_A);
 
+    //ExtraireCartesXML("../resources/Maps.xml");
 
     Game_Package Pack_A = Construire_Package();
 
@@ -119,7 +120,7 @@ int main()
     /* Comment utiliser le package : */
     /* -------------------------------------*/
 
-    printf("L'attaque 1 du mage est : %s\n",Pack_A.Classes_Package[0].attaques[0].nom);
+    printf("L'attaque 1 du mage est : %s\n",Pack_A.Classes_Package[1].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);
 
diff --git a/src/structures.h b/src/structures.h
index 17e4dbd..99953ce 100644
--- a/src/structures.h
+++ b/src/structures.h
@@ -20,6 +20,8 @@
 
 /*! \def TAILLE_MAX_CARTE */
 #define TAILLE_MAX_CARTE 256
+/*! \def TAILLE_MAX_LIGNE */
+#define TAILLE_MAX_LIGNE 25
 /*! \def TAILLE_ID */
 #define TAILLE_ID 8
 /*! \def TAILLE_NOMS */
@@ -166,6 +168,14 @@ typedef struct Effet_Competence{
 } Effet_Competence;
 
 
+typedef struct Carte_A{
+    char id[TAILLE_ID];
+    char nom[50];
+    char desc[100];
+    char* lignes;
+} Carte_A;
+
+
 /*! \struct Classe structures.h
  * \brief Definition de la structure Game_Package
  * sizeof(Classe) =
@@ -174,6 +184,7 @@ typedef struct Game_Package{
     Classe* Classes_Package;
     Terrain* Terrains_Package;
     Skins_GUI* GUI_Package;
+    Carte_A* Cartes_Package;
 }Game_Package;
 
 
@@ -223,7 +234,8 @@ typedef struct Game_Package{
  * Peut eventuellement contenir l'information Carte si c'est utile.
  * sizeof(Partie) = 12 octets
  */
- typedef struct Partie{
+
+typedef struct Partie{
     ListJoueur * participants; /*!< La liste de joueurs prennant parts à la partie*/
     int nbTours; /*!<Le nombre de tours actuel*/
     Carte * c; /*!<La Carte associee a la Partie*/
-- 
GitLab