diff --git a/src/controleur.c b/src/controleur.c
index ac11f42ef3826d8120a24b5c53905a9ba8f225ab..47d124bc7f4e7e7f97bfe58137246342014487a8 100644
--- a/src/controleur.c
+++ b/src/controleur.c
@@ -493,6 +493,16 @@ Personnage * trouverPersonnage(Case * c){
     return NULL;
 }
 
+  /*!
+ * \fn char * obtenirNomJoueurCourant()
+ * \brief La fonction renvoie le nom du Joueur dont c'est le tour.
+ *
+ * \return Un char * vers le nom du joueur dont c'est le tour.
+ */
+char * obtenirNomJoueurCourant(){
+    return getNomJoueur(getCurrentJoueur(getListJoueur(partieGlobale)));
+}
+
   /*!
  * \fn char * obtenirNomClassePersonnage(int numero)
  * \brief La fonction renvoie le nom de la classe du Personnage en parrametre.
@@ -731,6 +741,44 @@ int obtenirPDMaxPersonnage(int numero){
     return tabNomsAttPerso;
 }*/
 
+  /*!
+ * \fn void debutDuTour()
+ * \brief La fonction effectue les opération de début de tour.
+ *        Les points de déplacements des personnages sont remis au maximum
+ *        Les Personnages récupèrent une partie de leur mana.
+ *        Note : Pour l'instant, les personnages récupère 10% de leur mana total au début du tour.
+                 (Ils ne peuvent pas avoir un mana supérieur à leur mana maximum définit par la classe.)
+ *               Si vous voulez changer ça, dites moi.
+ */
+void debutDuTour(){
+    debutTour(partieGlobale);
+}
+
+  /*!
+ * \fn int finDuTour()
+ * \brief La fonction teste si un Joueur est victorieux et sinon termine le tour du Joueur actuel.
+ *
+ * \return 1 si un joueur a remporté la partie, 0 sinon, dans ce cas, la main est donnée au joueur suivant.
+ */
+int finDuTour(){
+    // La fin du tour est possible si la partie n'est pas gagnée par un Joueur
+    return finTour(partieGlobale);
+}
+
+void personnageSuivant();
+
+  /*!
+ * \fn char * joueurVictorieux()
+ * \brief La fonction retourne le nom du Joueur qui a remporté la partie.
+ *        Cette fonction doit être appellée seulement si la fonction finDuTour a renvoyé 1.
+ *        Sinon la fonction renvoie seulement le nom du joueur dont c'est le tour.
+ *
+ * \return Une chaine de caractère vers le nom d'un Joueur.
+ */
+char * joueurVictorieux(){
+    return getNomJoueur(getCurrentJoueur(getListJoueur(partieGlobale)));
+}
+
 // 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 c1b54526cb159e577be1bbe0e1d37ca8b15d2db4..1e04ed4d4ae68fe1bbe5e2b7a0634a0b4c1dc96e 100644
--- a/src/controleur.h
+++ b/src/controleur.h
@@ -41,6 +41,7 @@ void obtenirPositionPersonnage(int numero, int * x, int * y);
 
 Personnage * trouverPersonnage(Case * c);
 
+char * obtenirNomJoueurCourant();
 char * obtenirNomClassePersonnage(int numero);
 int obtenirPVPersonnage(int numero);
 int obtenirPVMaxPersonnage(int numero);
@@ -50,6 +51,11 @@ int obtenirPDPersonnage(int numero);
 int obtenirPDMaxPersonnage(int numero);
 char ** obtenirNomsAttaquesPersonnage(int numero);
 
+void debutDuTour();
+int finDuTour();
+void personnageSuivant();
+char * joueurVictorieux();
+
 void testControlleurConsole();
 #endif // CONTROLEUR_H
 
diff --git a/src/partie.c b/src/partie.c
index 2a6eb3d37b170ea6714e299c7637b8b9ce3af2a8..0949b1330c2fbad9567e2f7af4753e43b3f271cc 100644
--- a/src/partie.c
+++ b/src/partie.c
@@ -11,6 +11,7 @@
 #include "joueur.h"
 #include "case.h"
 #include "personnage.h"
+#include "classe.h"
 
 /*!
  * \fn Partie * initPartie()
@@ -121,15 +122,29 @@ int removeParticipant(Partie * p, Joueur * j){
     return deleteNodeJoueurFromList(p->participants,j);
 }
 
+  /*!
+ * \fn void debutTour(Partie * p)
+ * \brief La fonction effectue les opérations de début de Tour du Joueur actuel.
+ *
+ * \param Un pointeur vers la Partie où appliquer les changements.
+ */
+ void debutTour(Partie * p){
+    int i,mana,manaMAX;
+    for(i=0;i<TAILLE_MAX_GROUPE;i++){
+        setPD(getPersonnage(getCurrentJoueur(getListJoueur(p)),i),getPDMax(getClasse(getPersonnage(getCurrentJoueur(getListJoueur(p)),i))));
+        manaMAX = getManaMax(getClasse(getPersonnage(getCurrentJoueur(getListJoueur(p)),i)));
+        mana = get_mana(getPersonnage(getCurrentJoueur(getListJoueur(p)),i));
+        setMana(getPersonnage(getCurrentJoueur(getListJoueur(p)),i),(mana+(0.1*manaMAX)));
+    }
+ }
    /*!
  * \fn int finTour(Partie * p)
  * \brief La fonction effectue les operations de fin de tour.
  *        On teste si un joueur a gagne la partie.
  *        Le curseur de participant est deplace sur le joueur suivant.
- *        On pourra ajouter d'autre operations de fin de tour dans les prochaines versions.
  *
  * \param La Partie p a a modifier.
- * \return 1 si un Joueur est victorieux, 0 sinon
+ * \return 1 si un Joueur est victorieux, 0 sinon.
  */
 int finTour(Partie * p){
     if(!victoire(p)){
@@ -139,10 +154,12 @@ int finTour(Partie * p){
         }
         else{
             setOnFirstJoueur(p->participants);
+            augmenterNbTour(p);
             return 0;
         }
     }
     else{
+        setOnFirstJoueur(getListJoueur(p));
         return 1;
     }
 }
diff --git a/src/partie.h b/src/partie.h
index a57d14368ff7099fe5a7768ebe31566d8eb43068..cf6cc7cb07b84817c26731cd221104be187f84a7 100644
--- a/src/partie.h
+++ b/src/partie.h
@@ -19,7 +19,7 @@ void augmenterNbTour(Partie * p);
 int addParticipant(Partie * p, Joueur * j);
 int removeParticipant(Partie * p, Joueur * j);
 
-void debutTour(Partie * p, Joueur * j);
+void debutTour(Partie * p);
 int finTour(Partie * p);
 
 int isTurn(Partie * p, Joueur * j);
diff --git a/src/personnage.c b/src/personnage.c
index bf2e0c97c12078783214a56ee3099418e82a2521..ef571600c00295f9a9a16182d86f4702b4477db9 100644
--- a/src/personnage.c
+++ b/src/personnage.c
@@ -4,6 +4,7 @@
 #include "case.h"
 #include "personnage.h"
 #include "deplacements.h"
+#include "classe.h"
 
 /*!
 * \file personnage.c
@@ -127,7 +128,7 @@ void setPosition(Personnage * p, Case * c){
 }
 
 /*!
- * \fn Classe * get_PV(Personnage *p)
+ * \fn int * get_PV(Personnage *p)
  * \brief La fonction renvoie les points de vie d'un personnage.
  *
  * \param Un personnage.
@@ -138,7 +139,7 @@ int get_PV(Personnage *p){
 }
 
 /*!
- * \fn Classe * get_mana(Personnage *p)
+ * \fn int * get_mana(Personnage *p)
  * \brief La fonction renvoie les points de mana d'un personnage.
  *
  * \param Un personnage.
@@ -149,7 +150,7 @@ int get_mana(Personnage *p){
 }
 
 /*!
- * \fn Classe * get_PD(Personnage *p)
+ * \fn int * get_PD(Personnage *p)
  * \brief La fonction renvoie les points de vie d'un personnage.
  *
  * \param Un personnage.
@@ -159,6 +160,60 @@ int get_PD(Personnage *p){
     return p->points_deplacement;
 }
 
+/*!
+ * \fn void setPV(Personnage * p, int n)
+ * \brief La fonction modifie les points de vie d'un personnage si n est inférieur au PV max de la Classe.
+ *
+ * \param Un personnage, un entier représentant les nouveaux PV du personnage.
+ */
+void setPV(Personnage * p, int n){
+    if((n<=getPVMax(getClasse(p)))&&(n>=0)){
+        p->PV=n;
+    }
+    else if(n<0){
+        p->PV=0;
+    }
+    else{
+        p->PV=getPVMax(getClasse(p));
+    }
+}
+
+/*!
+ * \fn int * get_PD(Personnage *p, int n)
+ * \brief La fonction modifie le mana d'un personnagen est inférieur au mana max de la Classe.
+ *
+ * \param Un personnage.
+ */
+void setMana(Personnage * p, int n){
+    if((n<=getManaMax(getClasse(p)))&&(n>=0)){
+        p->mana=n;
+    }
+    else if(n<0){
+        p->mana=0;
+    }
+    else{
+        p->mana=getManaMax(getClasse(p));
+    }
+}
+
+/*!
+ * \fn int * get_PD(Personnage *p, int n)
+ * \brief La fonction modifie les points de déplacement d'un personnage n est inférieur au PD max de la Classe.
+ *
+ * \param Un personnage.
+ */
+void setPD(Personnage * p, int n){
+    if((n<=getPDMax(getClasse(p)))&&(n>=0)){
+        p->points_deplacement=n;
+    }
+    else if(n<0){
+        p->points_deplacement=0;
+    }
+    else{
+        p->points_deplacement=getPDMax(getClasse(p));
+    }
+}
+
 /* Cette fonction ne fonctionne plus, il faut une fonction qui accede aux effets.
 boolean est_paralyse(Personnage *p){
     return p->paralyse;
diff --git a/src/personnage.h b/src/personnage.h
index 66470a67639a3e5eea5f19e7a2addf9f44b6bd69..9e5464009dba9a1365212261b96098a5d1e4977a 100644
--- a/src/personnage.h
+++ b/src/personnage.h
@@ -28,6 +28,10 @@ int get_PD(Personnage *p);
 
 int get_mana(Personnage *p);
 
+void setPV(Personnage * p, int n);
+void setMana(Personnage * p, int n);
+void setPD(Personnage * p, int n);
+
 Classe * getClasse(Personnage *p);
 
 char * getNomPersonnage(Personnage * p);