diff --git a/resources/Terrains.xml b/resources/Terrains.xml
index d1594205ce0628140673ad4723c92a6039017776..10456bda7209326a9914c389de02a611332eac9d 100644
--- a/resources/Terrains.xml
+++ b/resources/Terrains.xml
@@ -4,7 +4,7 @@
 	</Terrain>
 	<Terrain id="G_RIVER"  name="Riviere" FR="0"  FRS="1"  PDR="1"  Desc="River, arrete de river" f_default="../resources/Skins/eau.bmp">
 	</Terrain>
-	<Terrain id="G_FOREST"  name="Foret"  FR="1"  FRS="1"  PDR="2"  Desc="Le frère de Fopart" f_default="../resources/Skins/foret.bmp">
+	<Terrain id="G_FOREST"  name="Foret"  FR="1"  FRS="0"  PDR="2"  Desc="Le frère de Fopart" f_default="../resources/Skins/foret.bmp">
 	</Terrain>
 	<Terrain id="G_MOUNT"  name="Montagne" FR="0"  FRS="0"  PDR="0"  Desc="Montagne est plus haut que tontagne" f_default="../resources/Skins/montagne.bmp">
 	</Terrain>
diff --git a/src/case.c b/src/case.c
index 6733b2eaa8eab36adde59359bd41ec1fbe1276a7..4e2ab4fb0ae3de7fa1b9288b6832c94caa095946 100644
--- a/src/case.c
+++ b/src/case.c
@@ -5,6 +5,7 @@
 #include "structures.h"
 #include "personnage.h"
 #include "deplacements.h"
+#include "partie.h"
 
 /*!
 * \file case.c
@@ -124,3 +125,74 @@ int initCarte(Carte_A * sourceXML, Carte_Jeu * destination, Game_Package * pack)
     }
     return 1;
 }
+
+  /*!
+ * \fn int adjacente(Case * depart, Case * cible)
+ * \brief La fonction teste si la case cible est adjacente à la case départ.
+ *
+ * \param un pointeur vers la case de départ, un pointeur vers la case à tester
+ * \return 1 si la case est adjacente, 0 sinon.
+ */
+int adjacente(Case * depart, Case * cible){
+    if(get_x(cible)==get_x(depart)){
+        if((get_y(cible)==get_y(depart)-1)||(get_y(cible)==get_y(depart)+1)){
+            return 1;
+        }
+        else{
+            return 0;
+        }
+    }
+    else if((get_x(cible)==(get_x(depart)-1))||(get_x(cible)==(get_x(depart)+1))){
+        if(get_x(depart)%2==1){
+            if((get_y(cible)==get_y(depart))||(get_y(cible)==get_y(depart)-1)){
+                return 1;
+            }
+            else{
+                return 0;
+            }
+        }
+        else{
+            if((get_y(cible)==get_y(depart))||(get_y(cible)==get_y(depart)+1)){
+                return 1;
+            }
+            else{
+                return 0;
+            }
+        }
+    }
+    else{
+        return 0;
+    }
+}
+
+  /*!
+ * \fn APorteeRecursif(Carte_Jeu * c, Case * depart, Case * cible,int portee)
+ * \brief La fonction teste si la case cible est a portée de la case de départ.
+ *
+ * \param La carte sur laquelle on fait le test, un pointeur vers la case de départ, un pointeur vers la case à tester, un entier representant la portée
+ * \return 1 si la case est à portée, 0 sinon.
+ */
+int APorteeRecursif(Carte_Jeu * c, Case * depart, Case * cible,int portee){
+    int i,j;
+
+    if(depart==cible){
+        return (cible->terrain->franchissable_sorts==vrai);
+    }
+
+    else if((portee==1)&&(adjacente(depart,cible))){
+        return (cible->terrain->franchissable_sorts==vrai);
+    }
+    else{
+        portee--;
+        for((i=get_x(depart)-portee);((i<LARG_MAX_CARTE)&&(i<=get_x(depart)+portee));i++){
+            for((j=get_y(depart)-portee);((j<HAUT_MAX_CARTE)&&(j<=get_y(depart)+portee));j++){
+                if(adjacente(getCase(c,i,j),depart)){
+                    if(APorteeRecursif(c,getCase(c,i,j),cible,portee)){
+                        return (cible->terrain->franchissable_sorts==vrai);
+                    }
+                }
+            }
+        }
+    return 0;
+    }
+}
diff --git a/src/case.h b/src/case.h
index 7dd05df7d6b5f1e5cbf23dd0496e5f6784125439..7d40b27dc650f1777c066de6f5b4f2f2d1b585dd 100644
--- a/src/case.h
+++ b/src/case.h
@@ -46,6 +46,8 @@ int initCarte(Carte_A * sourceXML, Carte_Jeu * destination, Game_Package * pack)
 
 /*Case * trouverCase(Carte * c, int x, int y);*/
 
+int adjacente(Case * depart, Case * cible);
+int APorteeRecursif(Carte_Jeu *c, Case * depart, Case * cible,int portee);
 
 #endif
 
diff --git a/src/controleur.c b/src/controleur.c
index 3f65b18569222203aaa8f16a3fa49df06af67fdd..d4fe9d8fb22b57c9736899ababa2ccaa3fbf52bb 100644
--- a/src/controleur.c
+++ b/src/controleur.c
@@ -854,7 +854,7 @@ void testControlleurConsole(){
     ajouterPersonnage(packGlobal.Classes_Package[4].nom,1,2);
     ajouterPersonnage(packGlobal.Classes_Package[0].nom,2,2);
 
-    selectionnerCarte(packGlobal.Cartes_Package[2].nom);
+    selectionnerCarte(packGlobal.Cartes_Package[4].nom);
     initPositions();
 
 
@@ -865,11 +865,37 @@ void testControlleurConsole(){
     }
 
     for(i=0;i<LARG_MAX_CARTE;i++){
+        if(i%2){
+            printf(" ");
+        }
         for(j=0;j<HAUT_MAX_CARTE;j++){
             printf("%d ",personnagePresent(i,j));
         }
         printf("\n");
     }
+    printf("\n");
+    for(i=0;i<LARG_MAX_CARTE;i++){
+        if(i%2==0){
+            printf(" ");
+        }
+        for(j=0;j<HAUT_MAX_CARTE;j++){
+            printf("%d ",adjacente(getCase(getCarte(partieGlobale),7,4),getCase(getCarte(partieGlobale),i,j)));
+        }
+        printf("\n");
+    }
+    printf("\n");
+
+    printf("A portee :\n");
+    for(i=0;i<LARG_MAX_CARTE;i++){
+        if(i%2==0){
+            printf(" ");
+        }
+        for(j=0;j<HAUT_MAX_CARTE;j++){
+            printf("%d ",APorteeRecursif(getCarte(partieGlobale),getCase(getCarte(partieGlobale),7,4),getCase(getCarte(partieGlobale),i,j),3));
+        }
+        printf("\n");
+    }
+    printf("\n");
 
     for(i=0;i<LARG_MAX_CARTE;i++){
         for(j=0;j<HAUT_MAX_CARTE;j++){
@@ -902,7 +928,6 @@ void testControlleurConsole(){
             }
         }
     }
-
 }
 
 
diff --git a/src/personnage.h b/src/personnage.h
index 5aeaf06f65fb671737293a8c26091577e3ba0272..075d536dc10cf3a5c16fbc4c9f2d8d46e33b225d 100644
--- a/src/personnage.h
+++ b/src/personnage.h
@@ -39,6 +39,8 @@ void retraitPD(Personnage * p, int n);
 int personnageKO(Personnage * p);
 int manaSuffisant(Personnage * p, int mana);
 
+int APortee(Personnage * depart, Personnage * cible, int portee);
+
 Classe * getClasse(Personnage *p);
 
 char * getNomPersonnage(Personnage * p);