From cdf9c68e79a41f5f66b1c3d453cc5a76a466d8eb Mon Sep 17 00:00:00 2001
From: ColinDrieu <colin.drieu@insa-rennes.fr>
Date: Fri, 6 May 2016 18:07:35 +0200
Subject: [PATCH] =?UTF-8?q?Code=20d'une=20fonction=20faisant=20l'interface?=
 =?UTF-8?q?=20entre=20la=20SDL=20et=20le=20moteur=20pour=20ajouter=20un=20?=
 =?UTF-8?q?Personnage=20=C3=A0=20la=20Partie=20=C3=A0=20partir=20d'une=20C?=
 =?UTF-8?q?lasse=20d=C3=A9finie=20dans=20le=20GamePackage.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

J'ai modifié la structure Personnage, le nom du Personnage est remplacé par
un numéro, le nom dépend du nom de la Classe du Personnage.
J'ai modifié init_personnage afin d'allouer l'espace en mémoire pour un
personnage, et appellé init_personnage dans default_personnage.
---
 src/controleur.c | 51 +++++++++++++++++++++++++++++++++++++++++++++-
 src/controleur.h |  2 ++
 src/personnage.c | 53 ++++++++++++++++++++++++++++++++----------------
 src/personnage.h |  8 +++++++-
 src/structures.h |  2 +-
 5 files changed, 96 insertions(+), 20 deletions(-)

diff --git a/src/controleur.c b/src/controleur.c
index 67895de..c593c4f 100644
--- a/src/controleur.c
+++ b/src/controleur.c
@@ -5,6 +5,7 @@
 
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 
 #include "partie.h"
 #include "joueur.h"
@@ -177,7 +178,7 @@ char ** obtenirDescriptionCarte(){
  * \fn void freeCartes()
  * \brief La fonction libère un tableau de chaines de charactères alloué pour stocker les informations sur la carte.
  *
- * \param
+ * \param le tableau de charactères à supprimmer.
  */
   void freeCartes(char ** tab){
     int i;
@@ -187,6 +188,54 @@ char ** obtenirDescriptionCarte(){
     free(tab);
 }
 
+  /*!
+ * \fn int ajouterPersonnage(char * nomClasse, int numTab, int numJoueur)
+ * \brief La fonction ajoute un personnage au tableau de personnages d'un Joueur à l'indice numTab(compris entre 0 et TAILLE_MAX_GROUPE).
+ *        S'il y a déjà un personnage à l'indice numTab, l'ancien personnage est effacé du tableau.
+ *
+ * \param le nom de la classe dont dépend le Personnage, numTab un entier représentant l'indice auquel ajouter le Personnage dans le table de personnages,
+ *        numJoueur est un entier représentant le premier ou le second Joueur de la Partie.
+ * \return 1 si le Personnage a été correctement ajouté, 0 sinon.
+ */
+int ajouterPersonnage(char * nomClasse, int numTab, int numJoueur){
+    int i;
+    i=0;
+    //Recherche de la classe dans le Package
+    while((strcmp(nomClasse,(packGlobal.Classes_Package[i].nom))!=0)&&(i<=nbClasses())){
+        i++;
+    }
+    if(i>nbClasses()){
+        return 0;
+    }
+    //Création du personnage
+    Personnage * p = default_personnage(i,packGlobal);
+
+    //Ajout du Personnage à l'équipe du Joueur
+    switch (numJoueur){
+    case 1:
+        setOnFirstJoueur(partieGlobale->participants);
+        break;
+    case 2:
+        setOnFirstJoueur(partieGlobale->participants);
+        nextJoueur(partieGlobale->participants);
+        break;
+    default:
+        return 0;
+    }
+
+    if((numTab<TAILLE_MAX_GROUPE)&&(numTab>=0)){
+        setNumero(p,numTab);
+        addPersonnage(getCurrentJoueur(partieGlobale->participants),p,numTab);
+        return 1;
+    }
+    else{
+        return 0;
+    }
+
+
+
+}
+
 
 
 
diff --git a/src/controleur.h b/src/controleur.h
index f1328e1..3410c3e 100644
--- a/src/controleur.h
+++ b/src/controleur.h
@@ -22,6 +22,8 @@ char ** obtenirNomsCartes();
 char ** obtenirDescriptionCarte();
 void freeCartes(char **);
 
+void ajouterPersonnage(char * nomClasse, int numTab, int numJoueur);
+
 
 #endif // CONTROLEUR_H
 
diff --git a/src/personnage.c b/src/personnage.c
index bbbf010..2eb67af 100644
--- a/src/personnage.c
+++ b/src/personnage.c
@@ -17,8 +17,10 @@
  * \param Un personnage.
  * \return Un personnage initialisé.
  */
-Personnage* init_personnage(Personnage *perso)
+Personnage* init_personnage()
 {
+    Personnage * perso = malloc(sizeof(Personnage));
+    perso->numero=-1;
     perso->classe=NULL;
     perso->points_deplacement=0;
     perso->PV=0;
@@ -51,16 +53,47 @@ Personnage* set_personnage(Personnage *perso, Classe *c, Case *casedepart)
  * \fn Personnage* default_personnage(int numero, Game_Package Pack)
  * \brief La fonction construit un personnage par default, a partir de ses caracteristiques dans le fichier Classes.xml
  *
- * \param Un personnage, un game_package.
+ * \param Le numéro de la défination du personnage dans le fichier XML, un game_package.
  * \return Un personnage pret a l'action.
  */
 Personnage* default_personnage(int numero, Game_Package Pack)
 {
-    Personnage* Perso;
+    Personnage* Perso = init_personnage();
     set_personnage(Perso, &Pack.Classes_Package[numero], NULL);
     return Perso;
 }
 
+/*!
+ * \fn void freePersonnage(Personnage * p)
+ * \brief libère l'espace mémoire alloué à un personnage.
+ *
+ * \param un pointeur vers le personnage à supprimmer.
+ */
+void freePersonnage(Personnage * p){
+    free(p);
+}
+
+/*!
+ * \fn void setNumero(Personnage * p, int n)
+ * \brief Initialise le numéro d'un Personnage.
+
+ * \param Un pointeur vers le Personnage à modifier, un int déterminant son numéro.
+ */
+ void setNumero(Personnage * p, int n){
+    p->numero = n;
+ }
+
+ /*!
+ * \fn int getNumero(Personnage * p)
+ * \brief La fonction renvoie le numéro du personnage.
+ *
+ * \param Un pointeur vers le Personnage à tester.
+ * \return un entier vers le numéro du personnage.
+ */
+ int getNumero(Personnage * p){
+    return p->numero;
+ }
+
 /*!
  * \fn Classe * getClasse(Personnage *p)
  * \brief La fonction renvoie la classe d'un personnage.
@@ -148,18 +181,4 @@ int estSurLaCase(Personnage * p, Case * c){
     return c==getPosition(p);
 }
 
-/*!
- * \fn char * getNomPersonnage(Personnage * p)
- * \brief La fonction renvoie le nom d'un Personnage.
- *
- * \param Le Personnage a tester.
- * \return un pointeur vers la chaine de caractere representant le nom du Personnage, NULL si l'entree est NULL.
- */
-char * getNomPersonnage(Personnage * p){
-    if(p!=NULL){
-        return p->nomPersonnage;
-    }
-    return NULL;
-}
-
 
diff --git a/src/personnage.h b/src/personnage.h
index 22f9cdc..e8c92e9 100644
--- a/src/personnage.h
+++ b/src/personnage.h
@@ -8,10 +8,16 @@
 
 Personnage* set_personnage(Personnage *perso, Classe *c, Case *casedepart);
 
-Personnage* init_personnage(Personnage *perso);
+Personnage* init_personnage();
 
 Personnage* default_personnage(int numero, Game_Package Pack);
 
+void freePersonnage(Personnage * p);
+
+void setNumero(Personnage * p, int n);
+
+int getNumero(Personnage * p);
+
 Case* getPosition(Personnage *p);
 
 int get_PV(Personnage *p);
diff --git a/src/structures.h b/src/structures.h
index b439fd3..e5154c0 100644
--- a/src/structures.h
+++ b/src/structures.h
@@ -180,7 +180,7 @@ typedef struct Classe{
  * sizeof(Personnage) = 32 octets
  */
 typedef struct Personnage{
-    char nomPersonnage[TAILLE_NOMS];/*!< Nom du personnage de taille TAILLE_NOMS*/
+    int numero;
     Classe* classe; /*!< La classe dont depend le personnage */
     unsigned short int points_deplacement; /*!< Les PD actuels du personnage*/
     unsigned short int PV; /*!< Les PV actuels du personnage*/
-- 
GitLab