diff --git a/src/controleur.c b/src/controleur.c
index 07b8e0b71583d38a402a33a27edd874f5b44f5ff..8f2ca41cfd6b4ced4ebb47eddc876283845541bc 100644
--- a/src/controleur.c
+++ b/src/controleur.c
@@ -192,7 +192,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
@@ -256,7 +256,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.
@@ -279,6 +278,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;
@@ -294,6 +298,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 308acd0efa316f3a41ba34fb6b0d3c2dea0a1b79..8e6059f170effdf4fbec3d3f1b729e586db1f781 100644
--- a/src/controleur.h
+++ b/src/controleur.h
@@ -29,6 +29,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