From 4522b2e53571c99aa7a6ffc53854478eda73b949 Mon Sep 17 00:00:00 2001
From: ColinDrieu <colin.drieu@insa-rennes.fr>
Date: Tue, 17 May 2016 20:32:29 +0200
Subject: [PATCH] Ajout au controleur d'une fonction permettant de lancer une
 attaque et d'appliquer ses effet.

---
 src/controleur.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++
 src/controleur.h |  2 ++
 2 files changed, 49 insertions(+)

diff --git a/src/controleur.c b/src/controleur.c
index d4fe9d8..6e5b64e 100644
--- a/src/controleur.c
+++ b/src/controleur.c
@@ -836,6 +836,53 @@ char * joueurVictorieux(){
     return getNomJoueur(getCurrentJoueur(getListJoueur(partieGlobale)));
 }
 
+  /*!
+ * \fn int lancerAttaque(int numDepart, int numCible)
+ * \brief La fonction lance un sort du Personnage numDepart vers le Personnage numCible (entier définis dans la SDL)
+ *
+ * \param des entiers vers les personnages départs et cible (définit par la SDL)
+ * \return 1 si l'attaque a été correctement lancée, 0 sinon.
+ */
+int lancerAttaque(int numDepart, int numCible, char * nomAttaque){
+    int indiceAttaque,i;
+    Personnage * dep=NULL;
+    Personnage * cible = NULL;
+    Joueur * actuel = getCurrentJoueur(getListJoueur(partieGlobale));
+    i=-1;
+
+    if((numDepart<=3)&&(numDepart>0)){
+        setOnFirstJoueur(getListJoueur(partieGlobale));
+        dep=getPersonnage(getCurrentJoueur(getListJoueur(partieGlobale)),numDepart-1);
+    }
+    if((numDepart<=6)&&(numDepart>3)){
+        setOnFirstJoueur(getListJoueur(partieGlobale));
+        nextJoueur(getListJoueur(partieGlobale));
+        dep=getPersonnage(getCurrentJoueur(getListJoueur(partieGlobale)),numDepart-4);
+    }
+
+    for(i=0;i<NB_ATTAQUES_MAX;i++){
+        if((strncmp(getNomAttaques(getClasse(dep),i),nomAttaque,TAILLE_NOMS))==0){
+           indiceAttaque=i;
+        }
+    }
+
+    if(indiceAttaque==-1){
+        return 0;
+    }
+
+    if((numCible<=3)&&(numCible>0)){
+        setOnFirstJoueur(getListJoueur(partieGlobale));
+        dep=getPersonnage(getCurrentJoueur(getListJoueur(partieGlobale)),numCible-1);
+    }
+    if((numCible<=6)&&(numCible>3)){
+        setOnFirstJoueur(getListJoueur(partieGlobale));
+        nextJoueur(getListJoueur(partieGlobale));
+        dep=getPersonnage(getCurrentJoueur(getListJoueur(partieGlobale)),numCible-4);
+    }
+    setOnJoueur(getListJoueur(partieGlobale),actuel);
+    return lancerSort(getCarte(partieGlobale),dep,cible,indiceAttaque);
+}
+
 // 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(){
diff --git a/src/controleur.h b/src/controleur.h
index 68cd476..4e49350 100644
--- a/src/controleur.h
+++ b/src/controleur.h
@@ -60,6 +60,8 @@ int finDuTour();
 void personnageSuivant();
 char * joueurVictorieux();
 
+int lancerAttaque(int numDepart, int numCible, char * nomAttaque);
+
 void testControlleurConsole();
 #endif // CONTROLEUR_H
 
-- 
GitLab