diff --git a/src/attaques.c b/src/attaques.c
index 70961a9b5d7bf443ebd08db494ed9e66a8fb914e..825f084df84328bd212f7e26080319add3bc5ccc 100644
--- a/src/attaques.c
+++ b/src/attaques.c
@@ -32,7 +32,13 @@ int attaquer(Personnage *attaquant, Attaque *attaque_select, Personnage *cible)
  */
 int ajouter_effet_perso(Effet *effet_select, Personnage *cible)
 {
-
+    int numero_effet = 0;
+    while((cible->effets[numero_effet].utilise)!=0)
+    {
+        numero_effet ++ ;
+    }
+    effet_select->utilise = 1;
+    cible->effets[numero_effet] = *effet_select;
 
     return 0;
 }
@@ -47,8 +53,27 @@ int ajouter_effet_perso(Effet *effet_select, Personnage *cible)
  */
 int appliquer_effet(Effet *effet_select, Personnage *cible)
 {
-    (cible->PV) -= (effet_select->valeur_degats);
+    if((effet_select->nb_tours) != 0)
+    {
+        (cible->PV) -= (effet_select->valeur_degats_duree);
+        (cible->PV) += (effet_select->valeur_soin_duree);
+        (cible->gele) = (effet_select->paralysie);
+    }
+
 
+    /* A terminer */
+    return 0;
+}
+
+int declencher_effets_tour(Personnage *liste_perso)
+{
+    int num_perso = 0;
+
+
+    /* */
+
+
+    return 0;
 }
 
 
diff --git a/src/controleur.c b/src/controleur.c
index 1941b8cdc3605b80dcbeeae2cb28ab2c46d3d8eb..82882ab347f641c8fd8a54a8a5bd4664c4ed0e9b 100644
--- a/src/controleur.c
+++ b/src/controleur.c
@@ -218,7 +218,7 @@ char ** obtenirDescriptionCarte(){
 }
 
 /*!
- * \fn Case * trouverCase(Carte c, int x, int y)
+ * \fn Case * trouverCase(Carte_Jeu * c, int x, int y)
  * \brief La fonction retourne un pointeur vers la case de coordonnées x,y
  *
  * \param les coordonnées x et y d'une case (pas en pixels mais bien en colonne et ligne), ainsi que la carte utilisée
@@ -282,7 +282,6 @@ int ajouterPersonnage(char * nomClasse, int numTab, int numJoueur){
  * \fn int selectionnerCarte(char * nomCarte)
  * \brief La fonction ajoute la Carte dont le nom est en parrametre à la Partie.
  *        Les Terrains de la Carte sont initialisé à partir des cartes décrites en XML
- *        Les Personnages sont placés à leur position de départ sur la carte.
  *
  * \param Le nom de la Carte décrite en XML.
  * \return 1 si la carte est correctement initialisée, 0 sinon.
@@ -305,6 +304,11 @@ int selectionnerCarte(char * nomCarte){
     return 1;
 }
 
+  /*!
+ * \fn void initPositions()
+ * \brief La fonction initialise les positions des personnages sur la Carte.
+ *        La carte de jeu doit être initialisée avant l'appel à cette fonction.
+ */
 void initPositions(){
     // Positionnement des Personnages sur la Carte_Jeu.
     int i;
@@ -320,6 +324,125 @@ void initPositions(){
     }
 }
 
+  /*!
+ * \fn char * ObtenirRessourceTerrain(int x, int y)
+ * \brief La fonction teste le type d'un Terrain aux coordonnées données et renvoie la ressource à afficher.
+ *        L'utilisation de cette fonction pourrait se faire dans une boucle dans la SDL pour afficher la carte Case par Case.
+ *        Il est d'abbord nécessaire de convertir les coordonnées "pixels" en coordonnées de cases de jeu.
+ *        La carte doit être initialisées avant l'appel à cette fonction.
+ *
+ * \param Les coordonnées de la Case à tester
+ * \return un char * vers la ressource du Terrain de la case.
+ */
+char * ObtenirRessourceTerrain(int x, int y){
+    return get_terrain(trouverCase(getCarte(partieGlobale),x,y))->skin_default;
+}
+
+  /*!
+ * \fn int personnagePresent(int x, int y)
+ * \brief La fonction teste si un Personnage est présent aux coordonnées à tester.
+ *        Les coordonnées doivent être convertir des "pixels" de la SDL en Cases de Jeu.
+ *
+ * \param Les coordonnées de la Case à tester
+ * \return 1 si un Personnage est présent aux coordonnées, 0 sinon.
+ */
+int personnagePresent(int x, int y){
+    return est_occupee(trouverCase(getCarte(partieGlobale),x,y));
+}
+
+  /*!
+ * \fn char * obtenirRessourcePersonnage(int x, int y)
+ * \brief La fonction renvoie la ressource d'un Personnage présent aux coordonnées.
+ *
+ * \param Les coordonnées de la Case à tester
+ * \return la ressource du personnage sur la case, NULL s'il n'y a pas de personnage sur la case ou si le Personnage n'est pas trouvé.
+ */
+char * obtenirRessourcePersonnage(int x, int y){
+    int i;
+    Joueur * actuel = NULL;
+    char * ressource = malloc(TAILLE_CHEMIN*sizeof(char));
+    ressource = NULL;
+    //Test Personnage sur la case.
+    if(!personnagePresent(x,y)){
+        return NULL;
+    }
+
+    else{
+        //sauvegarde du Joueur dont c'est le tour.
+        actuel = getCurrentJoueur(getListJoueur(partieGlobale));
+        //recherche du Personnage sur la case pour le premier Joueur.
+        setOnFirstJoueur(getListJoueur(partieGlobale));
+        for(i=0;i<TAILLE_MAX_GROUPE;i++){
+            if(get_x(getPosition(getPersonnage(getCurrentJoueur(getListJoueur(partieGlobale)),i)))==x){
+                if(get_y(getPosition(getPersonnage(getCurrentJoueur(getListJoueur(partieGlobale)),i)))==y){
+                    //sauvegarde de la ressource du Personnage.
+                    ressource = (getClasse(getPersonnage(getCurrentJoueur(getListJoueur(partieGlobale)),i)))->skins.charac_default;
+                    // On remet le pointeur courant sur le personnage dont c'est le tour.
+                    setOnJoueur(getListJoueur(partieGlobale),actuel);
+                    //retour de la ressource du personnage.
+                    return ressource;
+                }
+            }
+        }
+        //recherche du Personnage sur la case pour le premier Joueur.
+        nextJoueur(getListJoueur(partieGlobale));
+        for(i=0;i<TAILLE_MAX_GROUPE;i++){
+            if(get_x(getPosition(getPersonnage(getCurrentJoueur(getListJoueur(partieGlobale)),i)))==x){
+                if(get_y(getPosition(getPersonnage(getCurrentJoueur(getListJoueur(partieGlobale)),i)))==y){
+                    ressource = (getClasse(getPersonnage(getCurrentJoueur(getListJoueur(partieGlobale)),i)))->skins.charac_default;
+                    setOnJoueur(getListJoueur(partieGlobale),actuel);
+                    return ressource;
+                }
+            }
+        }
+        //Si aucun personnage trouvé.
+        return NULL;
+    }
+}
+
+// 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;
+    EtatsJeu state = SAISIE_JOUEURS;
+    extern Partie * partieGlobale;
+    extern Game_Package packGlobal;
+    initJeu();
+    ajouterUnJoueur("Joueur1",&state);
+    ajouterUnJoueur("Joueur2",&state);
+
+    ajouterPersonnage(packGlobal.Classes_Package[0].nom,0,1);
+    ajouterPersonnage(packGlobal.Classes_Package[1].nom,1,1);
+    ajouterPersonnage(packGlobal.Classes_Package[2].nom,2,1);
+    ajouterPersonnage(packGlobal.Classes_Package[3].nom,0,2);
+    ajouterPersonnage(packGlobal.Classes_Package[4].nom,1,2);
+    ajouterPersonnage(packGlobal.Classes_Package[0].nom,2,2);
+
+    selectionnerCarte(packGlobal.Cartes_Package[1].nom);
+    initPositions();
+
+
+    for(i=0;i<LARG_MAX_CARTE;i++){
+        for(j=0;j<HAUT_MAX_CARTE;j++){
+            printf("%s\n",ObtenirRessourceTerrain(i,j));
+        }
+    }
+
+    for(i=0;i<LARG_MAX_CARTE;i++){
+        for(j=0;j<HAUT_MAX_CARTE;j++){
+            printf("%d ",personnagePresent(i,j));
+        }
+        printf("\n");
+    }
+
+    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);
+        }
+    }
+
+}
+
 
 
 
diff --git a/src/controleur.h b/src/controleur.h
index 23fb5d4a0cc8e6652dcd01c59d0a5c11a66d8a64..26415eab3f7691536effafb907e65ed64f2487a1 100644
--- a/src/controleur.h
+++ b/src/controleur.h
@@ -32,6 +32,11 @@ int ajouterPersonnage(char * nomClasse, int numTab, int numJoueur);
 int selectionnerCarte(char * nomCarte);
 void initPositions();
 
+char * ObtenirRessourceTerrain(int x, int y);
 
+int personnagePresent(int x, int y);
+char * obtenirRessourcePersonnage(int x, int y);
+
+void testControlleurConsole();
 #endif // CONTROLEUR_H
 
diff --git a/src/structures.h b/src/structures.h
index 02a3cc034d6a369d5a29931bd737b5ecaeafbd26..980793d0045be106f0637f05d97cb5de25a7628e 100644
--- a/src/structures.h
+++ b/src/structures.h
@@ -142,6 +142,7 @@ typedef Case Carte[TAILLE_MAX_CARTE];
 typedef struct Effet{
     char id[TAILLE_ID]; /*!< ID de l'effet de taille TAILLE_ID*/
     char nom[TAILLE_NOMS]; /*!< Nom de l'effet de taille TAILLE_NOMS*/
+    unsigned int utilise;
     unsigned int nb_tours;/*!< Le nombre de tours restant avant que l'effet ne s'estompe*/
     unsigned int valeur_degats; /*!< Le nombre de degats subis */
     unsigned int valeur_soin; /*!< Le nombre PV regeneres */
@@ -186,7 +187,8 @@ typedef struct Personnage{
     unsigned short int PV; /*!< Les PV actuels du personnage*/
     unsigned short int mana; /*!< Le mana actuel du personnage*/
     Case *position; /*!< La case representant la position actuelle du personnage*/
-    Effet effets[]; /*!< Un tableau d'effets representant les effets affectant le personnage*/
+    Effet effets[10]; /*!< Un tableau d'effets representant les effets affectant le personnage*/
+    int gele;
 } Personnage;
 
 /*! \struct Competence structures.h