From 6586b55652b00851dce37107398f704e0bb114ac Mon Sep 17 00:00:00 2001
From: ColinDrieu <colin.drieu@insa-rennes.fr>
Date: Thu, 12 May 2016 14:44:33 +0200
Subject: [PATCH] =?UTF-8?q?Code=20d'une=20premiere=20fonction=20pour=20obt?=
 =?UTF-8?q?enir=20les=20caract=C3=A9ristiques=20d'un=20personnage=20depuis?=
 =?UTF-8?q?=20la=20SDL=20via=20le=20controleur.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Correction d'oublis dans les fichiers joueurs.h et partie.c
---
 src/controleur.c | 95 ++++++++++++++++++++++++++++++++++++++++++++++--
 src/controleur.h | 11 ++++++
 src/joueur.h     |  1 +
 src/partie.c     |  1 +
 4 files changed, 105 insertions(+), 3 deletions(-)

diff --git a/src/controleur.c b/src/controleur.c
index 82882ab..8aa77c1 100644
--- a/src/controleur.c
+++ b/src/controleur.c
@@ -384,7 +384,7 @@ char * obtenirRessourcePersonnage(int x, int y){
                 }
             }
         }
-        //recherche du Personnage sur la case pour le premier Joueur.
+        //recherche du Personnage sur la case pour le second Joueur.
         nextJoueur(getListJoueur(partieGlobale));
         for(i=0;i<TAILLE_MAX_GROUPE;i++){
             if(get_x(getPosition(getPersonnage(getCurrentJoueur(getListJoueur(partieGlobale)),i)))==x){
@@ -396,14 +396,90 @@ char * obtenirRessourcePersonnage(int x, int y){
             }
         }
         //Si aucun personnage trouvé.
+        setOnJoueur(getListJoueur(partieGlobale),actuel);
         return NULL;
     }
 }
 
+  /*!
+ * \fn Personnage * trouverPersonnage(Case * c)
+ * \brief La fonction renvoie un pointeur vers le personnage présent sur la case en parrammetre.
+ *
+ * \param Les coordonnées de la Case à tester
+ * \return Un pointeur vers un personnage, NULL, s'il n'y a pas de personnage sur la case.
+ */
+Personnage * trouverPersonnage(Case * c){
+    int i;
+    Personnage * resultat;
+    resultat = NULL;
+    Joueur * actuel = NULL;
+    actuel = getCurrentJoueur(getListJoueur(partieGlobale));
+    if(!est_occupee(c)){
+        return resultat;
+    }
+    setOnFirstJoueur(getListJoueur(partieGlobale));
+    for(i=0;i<TAILLE_MAX_GROUPE;i++){
+        if(c==getPosition(getPersonnage(getCurrentJoueur(getListJoueur(partieGlobale)),i))){
+            resultat = getPersonnage(getCurrentJoueur(getListJoueur(partieGlobale)),i);
+            setOnJoueur(getListJoueur(partieGlobale),actuel);
+            return resultat;
+        }
+    }
+    nextJoueur(getListJoueur(partieGlobale));
+    for(i=0;i<TAILLE_MAX_GROUPE;i++){
+        if(c==getPosition(getPersonnage(getCurrentJoueur(getListJoueur(partieGlobale)),i))){
+            resultat = getPersonnage(getCurrentJoueur(getListJoueur(partieGlobale)),i);
+            setOnJoueur(getListJoueur(partieGlobale),actuel);
+            return resultat;
+        }
+    }
+    setOnJoueur(getListJoueur(partieGlobale),actuel);
+    return NULL;
+}
+
+  /*!
+ * \fn char * obtenirNomClassePersonnage(int numero)
+ * \brief La fonction renvoie le nom de la classe du Personnage en parrametre.
+ *        Le numero correspond au placement du personnage tel qu'il est définit dans la sdl et va de 1 à 6 :
+ *        Exemples : Le Personnage 0 du joueur 2 dans le moteur correspond au numero 4 pour la sdl.
+ *                   Le Personnage 1 du joueur 1 dans le moteur correspond au numero 2 pour la sdl.
+ *
+ * \param Le numero du personnage pour la SDL.
+ * \return Un char * vers le nom de la classe du Personnage.
+ */
+char * obtenirNomClassePersonnage(int numero){
+    Joueur * actuel = NULL;
+    actuel = getCurrentJoueur(getListJoueur(partieGlobale));
+    char * nomClasse;
+    nomClasse = malloc(TAILLE_NOMS*sizeof(char));
+
+    if ((numero>0)&&(numero<=3)){
+        setOnFirstJoueur(getListJoueur(partieGlobale));
+        nomClasse = getNomClasse(getClasse(getPersonnage(getCurrentJoueur(getListJoueur(partieGlobale)),numero-1)));
+        setOnJoueur(getListJoueur(partieGlobale),actuel);
+        return nomClasse;
+    }
+    else if ((numero>3)&&(numero<=6)){
+        setOnFirstJoueur(getListJoueur(partieGlobale));
+        nextJoueur(getListJoueur(partieGlobale));
+        nomClasse = getNomClasse(getClasse(getPersonnage(getCurrentJoueur(getListJoueur(partieGlobale)),numero-4)));
+        setOnJoueur(getListJoueur(partieGlobale),actuel);
+        return nomClasse;
+    }
+}
+
+int obtenirPVPersonnage(int numero);
+int obtenirPVMaxPersonnage(int numero);
+int obtenirManaPersonnage(int numero);
+int obtenirManaMaxPersonnage(int numero);
+int obtenirPDPersonnage(int numero);
+int obtenirPDMaxPersonnage(int numero);
+char ** obtenirNomsAttaquesPersonnage(int numero);
+
 // Je met ici mes tests réalisés dans le main pour éviter de les réécrire si jamais il y a un problème.
 // Si vous voulez tester aussi, à recopier dans le main avant l'appel à initJeu().
 void testControlleurConsole(){
-    int i,j;
+    int i,j,n;
     EtatsJeu state = SAISIE_JOUEURS;
     extern Partie * partieGlobale;
     extern Game_Package packGlobal;
@@ -437,7 +513,20 @@ void testControlleurConsole(){
 
     for(i=0;i<LARG_MAX_CARTE;i++){
         for(j=0;j<HAUT_MAX_CARTE;j++){
-        printf("%s : Position : %d/%d\n",obtenirRessourcePersonnage(i,j),i,j);
+            if(personnagePresent(i,j)){
+                printf("Position : %d/%d\n%s\n",i,j,obtenirRessourcePersonnage(i,j));
+                /* Attention  pour ce qui suit: l'acces aux informations sera moins "compliqué" hors des tests
+                car la SDL "connait" le numero quelle a attribuée aux personnages.
+                Ici, c'était une manière de simuler l'acces aux données mais depuis le moteur.
+                */
+                if((appartientJoueur(trouverPersonnage(getCase(getCarte(partieGlobale),i,j)),partieGlobale))==(getListJoueur(partieGlobale)->firstNodeJoueur->j)){
+                    n=1+getIndicePersonnage((getListJoueur(partieGlobale)->firstNodeJoueur->j),trouverPersonnage(getCase(getCarte(partieGlobale),i,j)));
+                }
+                else{
+                    n=4+getIndicePersonnage((getListJoueur(partieGlobale)->lastNodeJoueur->j),trouverPersonnage(getCase(getCarte(partieGlobale),i,j)));
+                }
+                printf("%s\n", obtenirNomClassePersonnage(n));
+            }
         }
     }
 
diff --git a/src/controleur.h b/src/controleur.h
index 26415ea..7a9befa 100644
--- a/src/controleur.h
+++ b/src/controleur.h
@@ -37,6 +37,17 @@ char * ObtenirRessourceTerrain(int x, int y);
 int personnagePresent(int x, int y);
 char * obtenirRessourcePersonnage(int x, int y);
 
+Personnage * trouverPersonnage(Case * c);
+
+char * obtenirNomClassePersonnage(int numero);
+int obtenirPVPersonnage(int numero);
+int obtenirPVMaxPersonnage(int numero);
+int obtenirManaPersonnage(int numero);
+int obtenirManaMaxPersonnage(int numero);
+int obtenirPDPersonnage(int numero);
+int obtenirPDMaxPersonnage(int numero);
+char ** obtenirNomsAttaquesPersonnage(int numero);
+
 void testControlleurConsole();
 #endif // CONTROLEUR_H
 
diff --git a/src/joueur.h b/src/joueur.h
index 6e6cd83..efc2f11 100644
--- a/src/joueur.h
+++ b/src/joueur.h
@@ -15,6 +15,7 @@ char * getNomJoueur(Joueur * j);
 void setNomJoueur(Joueur * j, char * nom);
 
 Personnage * getPersonnage(Joueur * j, int i);
+int getIndicePersonnage(Joueur * j, Personnage * p);
 int addPersonnage(Joueur * j, Personnage * p, int i);
 int isInGroupe(Joueur * j, Personnage * p);
 int removePersonnage(Joueur * j, Personnage * p);
diff --git a/src/partie.c b/src/partie.c
index 7db6e82..2a6eb3d 100644
--- a/src/partie.c
+++ b/src/partie.c
@@ -10,6 +10,7 @@
 #include "joueurList.h"
 #include "joueur.h"
 #include "case.h"
+#include "personnage.h"
 
 /*!
  * \fn Partie * initPartie()
-- 
GitLab