From bcbdda473f2066d56ff2ab25d5858211760b63af Mon Sep 17 00:00:00 2001
From: ColinDrieu <colin.drieu@insa-rennes.fr>
Date: Sun, 1 May 2016 16:42:01 +0200
Subject: [PATCH] =?UTF-8?q?Cr=C3=A9ation=20de=20la=20fonction=20initCarte.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Elle initialise une Carte de Jeu à partir d'une carte du package de l'univers du jeu.
La première structure Carte étant obsolète, il faudra la supprimer et enlever les appels aux fonctions qui l'utilisent.
Plutôt que la fonction de la SDL codées en dur dans le main qui initialise utilise la premiere structure Carte, il faudra utiliser la nouvelle fonction.
---
 src/case.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++----
 src/case.h | 10 +++++++--
 2 files changed, 67 insertions(+), 6 deletions(-)

diff --git a/src/case.c b/src/case.c
index f45a8d0..6ec1507 100644
--- a/src/case.c
+++ b/src/case.c
@@ -1,5 +1,6 @@
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include "terrain.h"
 #include "structures.h"
 #include "personnage.h"
@@ -25,6 +26,28 @@ int get_y(Case *c){
     return c->coord_y;
 }
 
+  /*!
+ * \fn char * getID(Carte_Jeu * c)
+ * \brief La fonction retourne un pointeur vers l'ID de la Carte_Jeu.
+ *
+ * \param Un pointeur vers la Carte_Jeu à tester
+ * \return Le pointeur vers l'ID de la Carte_Jeu.
+ */
+char * getID(Carte_Jeu * c){
+    return c->id;
+}
+
+  /*!
+ * \fn Case * getCase(Carte_Jeu * c, int x, int y)
+ * \brief La fonction retourne un pointeur vers la Case de la Carte_Jeu aux coordonnées x,y.
+ *
+ * \param Un pointeur vers la Carte_Jeu à tester et les coordonnées x et y en entier.
+ * \return un pointeur vers la Case aux coordonnées x, y.
+ */
+Case * getCase(Carte_Jeu * c, int x, int y){
+    return &c->Tab_Cases[x][y];
+}
+
 boolean est_occupee(Case *c){
     return c->occupee;
 }
@@ -54,8 +77,8 @@ Terrain* get_terrain(Case *c){
  *
  * \return Le pointeur vers la Carte creee.
  */
-Carte * nouvelleCarte(){
-    Carte * c = malloc(sizeof(Carte));
+Carte_Jeu * nouvelleCarte(){
+    Carte_Jeu * c = malloc(sizeof(Carte_Jeu));
     return c;
 }
 
@@ -65,10 +88,43 @@ Carte * nouvelleCarte(){
  *
  * \param le pointeur vers la Carte a supprimer.
  */
-void deleteCarte(Carte * c){
+void deleteCarte(Carte_Jeu * c){
     free(c);
 }
 
+  /*!
+ * \fn int initCarte(Carte_A * sourceXML, Carte_Jeu * destination, Terrain * terrainPackage)
+ * \brief La fonction initialise la carte du jeu a partir de la Carte du Package passée en parametre.
+ *
+ * \param Un pointeur vers la Carte_A du package qui sera la source, un pointeur vers la Carte_Jeu a initialiser, un pointeur vers le Game_Package de l'univers du jeu
+ * \return 1 si l'initialisation est correcte, 0 sinon.
+ */
+int initCarte(Carte_A * sourceXML, Carte_Jeu * destination, Game_Package * pack){
+    int i,j;
+    strncpy(getID(destination), sourceXML->id, TAILLE_ID);
+    for(i=0;i<LARG_MAX_CARTE;i++){
+        for(j=0;j<HAUT_MAX_CARTE;j++){
+            switch (sourceXML->lignes[i][j]){
+                case 'P' :
+                    init_case(getCase(destination,i,j),i,j,&pack->Terrains_Package[0]);
+                    break;
+                case 'R' :
+                    init_case(getCase(destination,i,j),i,j,&pack->Terrains_Package[1]);
+                    break;
+                case 'F' :
+                    init_case(getCase(destination,i,j),i,j,&pack->Terrains_Package[2]);
+                    break;
+                case 'M' :
+                    init_case(getCase(destination,i,j),i,j,&pack->Terrains_Package[3]);
+                    break;
+                default :
+                    return 0;
+            }
+        }
+    }
+    return 1;
+}
+
   /*!
  * \fn init_carte(Carte* c,unsigned short int largeur, unsigned short int hauteur)
  * \brief La fonction initialise la position des Case contenues dans la Carte et les definit comme libres.
@@ -83,7 +139,6 @@ int init_carte(Carte * c){
     for (i=0;i<LARG_MAX_CARTE;i++){
         for (j=0;j<HAUT_MAX_CARTE;j++){
             init_case(n,i,j,NULL);
-            printf("Adresse Case : %d, x=%d, y=%d\n\n",n,get_x(n),get_y(n));
             n=n+sizeof(Case);
         }
     }
diff --git a/src/case.h b/src/case.h
index 0096841..d6bf912 100644
--- a/src/case.h
+++ b/src/case.h
@@ -20,6 +20,10 @@ int get_x(Case *c);
 
 int get_y(Case *c);
 
+char * getID(Carte_Jeu * c);
+
+Case * getCase(Carte_Jeu * c, int x, int y);
+
 boolean est_occupee(Case *c);
 
 Terrain * init_terrain(Terrain * t, char * n, boolean f, unsigned short int PD);
@@ -34,12 +38,14 @@ void marquer_libre(Case *c);
 
 Terrain* get_terrain(Case *c);
 
-Carte * nouvelleCarte();
+Carte_Jeu * nouvelleCarte();
 
-void deleteCarte(Carte * c);
+void deleteCarte(Carte_Jeu * c);
 
 int init_carte(Carte* c);
 
+int initCarte(Carte_A * sourceXML, Carte_Jeu * destination, Game_Package * pack);
+
 /*Case * trouverCase(Carte * c, int x, int y);*/
 
 
-- 
GitLab