diff --git a/src/Classes_XML_log b/src/Classes_XML_log
new file mode 100644
index 0000000000000000000000000000000000000000..e2cc38ae1170346265de3885abb6ceaff3c52f98
--- /dev/null
+++ b/src/Classes_XML_log
@@ -0,0 +1,52 @@
+Fichier decrivant le deroulement de la procedure d'aquisition des classes
+
+I) Chargement du fichier XML - Definition des noeuds
+Le fichier contient 5 classes
+II) Chargement des classes
+1) Memoire allouee avec succes 
+La memoire allouee fait 80 octets
+
+Chargement de la classe numero 1
+Id : C_MAGE
+Nom : Mage
+PV : 100
+PM : 150
+MV : 2
+DESC : Le feu, ça brûle 
+Insertion de la classe 1 dans le tableau
+
+Chargement de la classe numero 2
+Id : C_WAR
+Nom : Guerrier
+PV : 200
+PM : 150
+MV : 2
+DESC : Aime beaucoup le street art
+Insertion de la classe 2 dans le tableau
+
+Chargement de la classe numero 3
+Id : C_HEAL
+Nom : Guerrisseur
+PV : 100
+PM : 150
+MV : 2
+DESC : Heal est des notres
+Insertion de la classe 3 dans le tableau
+
+Chargement de la classe numero 4
+Id : C_ROGUE
+Nom : Voleur
+PV : 100
+PM : 150
+MV : 2
+DESC : 60 minutes, ça vaut l'heure
+Insertion de la classe 4 dans le tableau
+
+Chargement de la classe numero 5
+Id : C_ARCHER
+Nom : Archer
+PV : 100
+PM : 150
+MV : 2
+DESC : Gérard, de son prénom
+Insertion de la classe 5 dans le tableau
diff --git a/src/SDL.c b/src/SDL.c
index 0e09f12b9d6b5d81126a78591aee046883b94707..684eb41b0cbe48b0c4edec7c1cb37959bfc97655 100644
--- a/src/SDL.c
+++ b/src/SDL.c
@@ -1,23 +1,26 @@
 #include <stdlib.h>
 #include <SDL/SDL.h>
-
-#define LARGEUR_CARTE 16
-#define HAUTEUR_CARTE 10
-#define LARGEUR_CASE 53
-#define HAUTEUR_CASE 71
-#define NB_PERSO 1
+#include "structures.h"
+#include "partie.h"
+#include "joueur.h"
+#include "joueurList.h"
+#include "personnage.h"
+#include "case.h"
+#include "deplacements.h"
+#include "SDL.h"
+#include "controleurSDL.h"
 
 /*!
 * \file SDL.c
 * \brief Fichier contenant le code des fonctions liees à l'affichage par la SDL.
 */
 
+
 int main_SDL()
 {
-    int i;
-    int j;
-    SDL_Event event;
+    int i,j;
     SDL_Surface* ecran=NULL;
+    SDL_Event event;
     SDL_Surface* perso[NB_PERSO]={NULL};
     SDL_Surface* Case=NULL;
     SDL_Rect Position_Case[LARGEUR_CARTE*HAUTEUR_CARTE];
@@ -29,15 +32,15 @@ int main_SDL()
         printf( "Unable to init SDL: %s\n", SDL_GetError() );
         return 1;
     }
+
     ecran = SDL_SetVideoMode(LARGEUR_CARTE*(LARGEUR_CASE+1), HAUTEUR_CARTE*(HAUTEUR_CASE+2), 32, SDL_HWSURFACE|SDL_DOUBLEBUF);
     if (ecran == NULL) // Si l'ouverture a échoué, on le note et on arrête
     {
         fprintf(stderr, "Impossible de charger le mode vidéo : %s\n", SDL_GetError());
         exit(EXIT_FAILURE);
     }
-    SDL_WM_SetCaption("Elder Internal Ignition",NULL);
 
-    SDL_FillRect(ecran,NULL,SDL_MapRGB(ecran->format,0,0,0));
+    SDL_WM_SetCaption("Elder Internal Ignition",NULL);
 
     perso[0] = SDL_LoadBMP("../resources/personnage.bmp");
         if (!perso[0])
@@ -58,19 +61,21 @@ int main_SDL()
     {
         for(j=0;j<HAUTEUR_CARTE;j++)
             {
-                Position_Case[i*HAUTEUR_CARTE+j].x=LARGEUR_CASE*i;
-                Position_Case[i*HAUTEUR_CARTE+j].y=HAUTEUR_CASE*j;
+                Position_Case[j*LARGEUR_CARTE+i].x=LARGEUR_CASE*i;
+                Position_Case[j*LARGEUR_CARTE+i].y=HAUTEUR_CASE*j;
             }
     }
     for(i=1;i<LARGEUR_CARTE;i+=2)
     {
         for(j=0;j<HAUTEUR_CARTE;j++)
             {
-                Position_Case[i*HAUTEUR_CARTE+j].x=LARGEUR_CASE*i;
-                Position_Case[i*HAUTEUR_CARTE+j].y=HAUTEUR_CASE*j+(HAUTEUR_CASE/2);
+                Position_Case[j*LARGEUR_CARTE+i].x=LARGEUR_CASE*i;
+                Position_Case[j*LARGEUR_CARTE+i].y=HAUTEUR_CASE*j+(HAUTEUR_CASE/2);
             }
     }
-    Position_Perso[0]=Position_Case[0];
+
+    init_controleur(Position_Case);
+
     while(quitter==0)
     {
         SDL_WaitEvent(&event);
@@ -79,36 +84,11 @@ int main_SDL()
             case SDL_QUIT: /* Si c'est un événement de type "Quitter" */
                 quitter=1;
                 break;
+            case SDL_MOUSEBUTTONDOWN:
+                deplacement_personnage(0,event.button.x,event.button.y);
+                break;
             case SDL_KEYDOWN:/* Si c'est un événement de type "touche pressée" */
                 switch(event.key.keysym.sym){
-                    case SDLK_KP7:
-                        if(Position_Perso[0].y>0&&Position_Perso[0].x>0)
-                            {Position_Perso[0].y-=HAUTEUR_CASE/2;
-                            Position_Perso[0].x-=LARGEUR_CASE;}
-                        break;
-                    case SDLK_KP8:
-                        if(Position_Perso[0].y>0)
-                            Position_Perso[0].y-=HAUTEUR_CASE;
-                        break;
-                    case SDLK_KP9:
-                        if((Position_Perso[0].y>0)&&(Position_Perso[0].x<LARGEUR_CASE*(LARGEUR_CARTE-1)))
-                            {Position_Perso[0].y-=HAUTEUR_CASE/2;
-                            Position_Perso[0].x+=LARGEUR_CASE;}
-                        break;
-                    case SDLK_KP1:
-                        if(Position_Perso[0].y<HAUTEUR_CASE*(HAUTEUR_CARTE-1)&&Position_Perso[0].x>0)
-                            {Position_Perso[0].y+=HAUTEUR_CASE/2;
-                            Position_Perso[0].x-=LARGEUR_CASE;}
-                        break;
-                    case SDLK_KP2:
-                        if(Position_Perso[0].y<HAUTEUR_CASE*(HAUTEUR_CARTE-1))
-                            Position_Perso[0].y+=HAUTEUR_CASE;
-                        break;
-                    case SDLK_KP3:
-                        if(Position_Perso[0].y<HAUTEUR_CASE*(HAUTEUR_CARTE-1)&&Position_Perso[0].x<LARGEUR_CASE*(LARGEUR_CARTE-1))
-                            {Position_Perso[0].y+=HAUTEUR_CASE/2;
-                            Position_Perso[0].x+=LARGEUR_CASE;}
-                        break;
                     case SDLK_ESCAPE:
                         quitter=1;
                         break;
@@ -117,6 +97,8 @@ int main_SDL()
                 }
              break;
         }
+        Position_Perso[0].x=get_position_perso_x(0);
+        Position_Perso[0].y=get_position_perso_y(0);
         SDL_FillRect(ecran,NULL,SDL_MapRGB(ecran->format,0,0,0));
         for(i=0;i<LARGEUR_CARTE*HAUTEUR_CARTE;i++)
         {
@@ -133,188 +115,3 @@ int main_SDL()
 }
 
 
-
-
-
-int main_Open_Classrooms ()
-{
-    int i;
-    SDL_Event event;
-    int continuer=0;
-    SDL_Surface* ecran=NULL;
-    SDL_Surface* rectangle=NULL;
-    SDL_Surface* image=NULL;
-    SDL_Rect position_image;
-    SDL_Rect position[256];
-
-    for(i=0;i<256;i++)
-    {
-        position[i].x=0;
-        position[i].y=i;
-    }
-
-
-    SDL_Surface* degrade[256]={NULL};
-
-    // initialize SDL video
-    if ( SDL_Init( SDL_INIT_VIDEO ) < 0 )
-    {
-        printf( "Unable to init SDL: %s\n", SDL_GetError() );
-        return 1;
-    }
-
-    // create a new window
-
-    ecran = SDL_SetVideoMode(800, 256, 16,SDL_HWSURFACE|SDL_DOUBLEBUF);
-    if (ecran == NULL) // Si l'ouverture a échoué, on le note et on arrête
-    {
-        fprintf(stderr, "Impossible de charger le mode vidéo : %s\n", SDL_GetError());
-        exit(EXIT_FAILURE);
-    }
-    SDL_WM_SetCaption("fenetre de test",NULL);
-
-
-
-    SDL_FillRect(ecran,NULL,SDL_MapRGB(ecran->format,200,89,3));
-    SDL_Flip(ecran);
-
-    while(continuer==0)
-    {
-        SDL_WaitEvent(&event);
-        switch(event.type) /* Test du type d'événement */
-        {
-            case SDL_QUIT: /* Si c'est un événement de type "Quitter" */
-            SDL_Quit();
-            exit(0);
-            break;
-            case SDL_KEYDOWN:
-            continuer=1;
-            break;
-        }
-    }
-
-    continuer=0;
-    rectangle = SDL_CreateRGBSurface(SDL_HWSURFACE,400,256,16,0,0,0,0);
-    SDL_FillRect(rectangle,NULL,SDL_MapRGB(ecran->format,0,127,255));
-    SDL_BlitSurface(rectangle,NULL,ecran,&position[0]);
-    SDL_Flip(ecran);
-
-    while(continuer==0)
-    {
-        SDL_WaitEvent(&event);
-        switch(event.type) /* Test du type d'événement */
-        {
-            case SDL_QUIT: /* Si c'est un événement de type "Quitter" */
-            SDL_FreeSurface(rectangle);
-            SDL_Quit();
-            exit(0);
-            break;
-            case SDL_KEYDOWN:
-            continuer=1;
-            break;
-        }
-    }
-    continuer=0;
-     for(i=0;i<256;i++)
-    {
-        degrade[i]=SDL_CreateRGBSurface(SDL_HWSURFACE,800,1,16,0,0,0,0);
-        SDL_FillRect(degrade[i],NULL,SDL_MapRGB(ecran->format,i,i,i));
-    }
-
-    for(i=0;i<256;i++)
-    {
-        SDL_BlitSurface(degrade[i],NULL,ecran,&position[i]);
-    }
-    SDL_Flip(ecran);
-
-    while(continuer==0)
-    {
-        SDL_WaitEvent(&event);
-        switch(event.type) /* Test du type d'événement */
-        {
-            case SDL_QUIT: /* Si c'est un événement de type "Quitter" */
-                for(i=0;i<256;i++)
-                {
-                    SDL_FreeSurface(degrade[i]);
-                }
-                SDL_FreeSurface(rectangle);
-                SDL_Quit();
-                exit(0);
-                break;
-            case SDL_KEYDOWN:
-                continuer=1;
-                break;
-        }
-    }
-    continuer=0;
-    for(i=0;i<256;i++)
-    {
-        SDL_FreeSurface(degrade[i]);
-    }
-    SDL_FreeSurface(rectangle);
-
-
-
-    // load an image
-    image = SDL_LoadBMP("montagnes1.bmp");
-    if (!image)
-    {
-        printf("Unable to load bitmap: %s\n", SDL_GetError());
-        return 1;
-    }
-    SDL_BlitSurface(image,NULL,ecran,&position[0]);
-    SDL_FillRect(ecran,NULL,SDL_MapRGB(ecran->format,120,250,120));
-    position_image=position[0];
-    SDL_Flip(ecran);
-
-    SDL_EnableKeyRepeat(10, 10);
-     while(1)
-    {
-        SDL_WaitEvent(&event);
-        switch(event.type) /* Test du type d'événement */
-        {
-            case SDL_QUIT: /* Si c'est un événement de type "Quitter" */
-                SDL_FreeSurface(image);
-                SDL_Quit();
-                exit(0);
-                break;
-            case SDL_MOUSEBUTTONDOWN:
-                position_image.x=event.button.x;
-                position_image.y=event.button.y;
-                break;
-            case SDL_KEYDOWN:/* Si c'est un événement de type "touche pressée" */
-                switch(event.key.keysym.sym){
-                    case SDLK_UP:
-                        if(position_image.y>0)
-                        position_image.y--;
-                        break;
-                    case SDLK_DOWN:
-                        if(position_image.y<256)
-                        position_image.y++;
-                        break;
-                    case SDLK_LEFT:
-                        if(position_image.x>0)
-                        position_image.x--;
-                        break;
-                    case SDLK_RIGHT:
-                        if(position_image.x<800)
-                        position_image.x++;
-                        break;
-                    case SDLK_ESCAPE:
-                        SDL_FreeSurface(image);
-                        SDL_Quit();
-                        exit(0);
-                        break;
-                    default:
-                         ;
-                }
-             break;
-         }
-         SDL_FillRect(ecran,NULL,SDL_MapRGB(ecran->format,120,250,120));
-         SDL_BlitSurface(image,NULL,ecran,&position_image);
-         SDL_Flip(ecran);
-    }
-
-
-    return 0;
-}
diff --git a/src/SDL.h b/src/SDL.h
index 2724b332a1ba6b71f7debd056e60c1634dcdc5e1..d1d7ade08eba5fb3f482617e11684351255b1a39 100644
--- a/src/SDL.h
+++ b/src/SDL.h
@@ -1,5 +1,5 @@
 /*!
-* \file AffichageConsole.h
+* \file SDL.h
 * \brief Fichier contenant les signatures des fonctions liees a l'affichage par SDL.
 */
 
@@ -7,7 +7,13 @@
 #ifndef SDL_H_INCLUDED
 #define SDL_H_INCLUDED
 
+#define LARGEUR_CARTE 16
+#define HAUTEUR_CARTE 10
+#define LARGEUR_CASE 53
+#define HAUTEUR_CASE 71
+#define NB_PERSO 1
+
 int main_SDL();
-int main_Open_Classrooms ();
+
 
 #endif
diff --git a/src/Terrains_XML_log b/src/Terrains_XML_log
new file mode 100644
index 0000000000000000000000000000000000000000..716eba775e49a0069fbb10215336ca60de8038ce
--- /dev/null
+++ b/src/Terrains_XML_log
@@ -0,0 +1,43 @@
+Fichier decrivant le deroulement de la procedure d'aquisition des Terrains
+
+I) Chargement du fichier Terrains XML  - Definition des noeuds
+Le fichier contient 4 terrains
+II) Chargement des terrains
+1) Memoire allouee avec succes 
+La memoire allouee fait 64 octets
+
+Chargement du terrain numero 1
+Id : G_PLAIN
+Nom : Plaine
+FR : 1
+FRS : 1
+PDR : 1
+DESC : Plaine de bon sens
+Insertion du terrain 1 dans le tableau
+
+Chargement du terrain numero 2
+Id : G_RIVER
+Nom : Riviere
+FR : 0
+FRS : 1
+PDR : 1
+DESC : River, arrete de river
+Insertion du terrain 2 dans le tableau
+
+Chargement du terrain numero 3
+Id : G_FOREST
+Nom : Foret
+FR : 1
+FRS : 1
+PDR : 2
+DESC : Le frère de Fopart
+Insertion du terrain 3 dans le tableau
+
+Chargement du terrain numero 4
+Id : G_MOUNT
+Nom : Montagne
+FR : 0
+FRS : 0
+PDR : 0
+DESC : Montagne est plus haut que tontagne
+Insertion du terrain 4 dans le tableau
diff --git a/src/affichage.c b/src/affichage.c
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/src/affichage.h b/src/affichage.h
deleted file mode 100644
index e0db11a17db6432d50896419693dccd67a7d577f..0000000000000000000000000000000000000000
--- a/src/affichage.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef AFFICHAGE_H_INCLUDED
-#define AFFICHAGE_H_INCLUDED
-
-
-
-#endif // AFFICHAGE_H_INCLUDED
diff --git a/src/case.c b/src/case.c
index f3f078982bed101bd51eacc573615564e6ba2784..a8622e554d5745cde1d452f23fc58c97a707b12b 100644
--- a/src/case.c
+++ b/src/case.c
@@ -75,6 +75,7 @@ int init_carte(Carte* c,unsigned short int largeur, unsigned short int hauteur){
  * \param Les coordonnees a tester
  * \return Un pointeur vers la Case qui possede les coordonnees en entree, NULL s'il n'y a pas de Case avec ces coordonnees.
  */
+ /*
 Case * trouverCase(Carte * c, int x, int y){
     if((x<0)||(x>=LARG_MAX_CARTE)){
         return NULL;
@@ -85,4 +86,4 @@ Case * trouverCase(Carte * c, int x, int y){
     else{
         return c[(x*LARG_MAX_CARTE)+y];
     }
-}
+} */
diff --git a/src/case.h b/src/case.h
index a26b52ef37812a024537a61759d50d72bad61747..50035c9e020141c710d3e3edb53a71db4ab9827f 100644
--- a/src/case.h
+++ b/src/case.h
@@ -36,7 +36,7 @@ Terrain* get_terrain(Case *c);
 
 int init_carte(Carte* c,unsigned short int largeur, unsigned short int hauteur);
 
-Case * trouverCase(Carte * c, int x, int y);
+/*Case * trouverCase(Carte * c, int x, int y);*/
 
 
 #endif
diff --git a/src/controleurSDL.c b/src/controleurSDL.c
new file mode 100644
index 0000000000000000000000000000000000000000..c92b8807d0e9a128c17e4bb5c83ca9cd9a9d2b4a
--- /dev/null
+++ b/src/controleurSDL.c
@@ -0,0 +1,98 @@
+#include <stdlib.h>
+#include <SDL/SDL.h>
+#include "structures.h"
+#include "partie.h"
+#include "joueur.h"
+#include "joueurList.h"
+#include "personnage.h"
+#include "case.h"
+#include "deplacements.h"
+#include "SDL.h"
+#include "controleurSDL.h"
+
+/*!
+* \file controleurSDL.c
+* \brief Fichier contenant le code des fonctions du controleur pour l'affichage avec SDL
+*/
+
+
+Carte Carte_actuelle;
+Personnage ListePersos[NB_PERSO];
+
+
+void init_controleur(SDL_Rect Position_Case[])
+{
+    int i;
+    for(i=0;i<LARGEUR_CARTE*HAUTEUR_CARTE;i++)
+     {
+       init_case(&Carte_actuelle[i],Position_Case[i].x,Position_Case[i].y,NULL);
+     }
+    init_personnage(&ListePersos[0],NULL,&Carte_actuelle[0]);
+}
+
+int x_case_cliquee(int x_pixel, int y_pixel)
+{
+    return x_pixel/LARGEUR_CASE;
+}
+
+int y_case_cliquee(int x_pixel, int y_pixel)
+{
+    int i, x_case, y_case;
+    x_case = x_pixel/LARGEUR_CASE;
+    y_case = y_pixel/HAUTEUR_CASE;
+    for(i=1;i<LARGEUR_CARTE;i+=2)
+    {
+           if(x_case==i)
+            {
+                y_case=(y_pixel-HAUTEUR_CASE/2)/HAUTEUR_CASE;
+            }
+    }
+    return y_case;
+}
+
+Case * trouverCase(Carte c, int x, int y)
+{
+    if((x<0)||(x>=LARGEUR_CARTE)){
+        return NULL;
+    }
+    else if((y<0)||(y>=HAUTEUR_CARTE)){
+        return NULL;
+    }
+    else{
+        return &c[(y*LARGEUR_CARTE)+x];
+    }
+}
+
+
+void deplacement_personnage(int num, int x, int y)
+{
+    if(x<LARGEUR_CARTE*LARGEUR_CASE&&y<HAUTEUR_CARTE*HAUTEUR_CASE)
+    {
+        Case* case_cliquee = trouverCase(Carte_actuelle,x_case_cliquee(x,y),y_case_cliquee(x,y));
+        Personnage* perso = &ListePersos[num];
+        if (case_a_cote(perso,case_cliquee,HAUTEUR_CASE,LARGEUR_CASE)==vrai)
+        {
+            deplacer_personnage(perso, case_cliquee);
+        }
+    }
+}
+
+Case* get_case_perso(int num)
+{
+    Personnage* perso = &ListePersos[num];
+    return getPosition(perso);
+}
+
+int get_position_perso_x(int num)
+{
+    Case* case_perso = get_case_perso(num);
+    return get_x(case_perso);
+}
+
+int get_position_perso_y(int num)
+{
+    Case* case_perso = get_case_perso(num);
+    return get_y(case_perso);
+}
+
+
diff --git a/src/controleurSDL.h b/src/controleurSDL.h
new file mode 100644
index 0000000000000000000000000000000000000000..71d6d9c3db97845480f8d000477a39272c5083ae
--- /dev/null
+++ b/src/controleurSDL.h
@@ -0,0 +1,28 @@
+/*!
+* \file controleurSDL.h
+* \brief Fichier contenant les signatures des fonctions du controleur pour l'affichage avec SDL.
+*/
+
+
+#ifndef CONTROLEUR_SDL_H_INCLUDED
+#define CONTROLEUR_SDL_H_INCLUDED
+
+int y_case_cliquee(int x_pixel, int y_pixel);
+
+int x_case_cliquee(int x_pixel, int y_pixel);
+
+Case * trouverCase(Carte c, int x, int y);
+
+void deplacement_personnage(int num, int x, int y);
+
+Case* get_case_perso(int num);
+
+int get_position_perso_x(int num);
+
+int get_position_perso_y(int num);
+
+void init_controleur();
+
+
+#endif
+
diff --git a/src/controlleur.c b/src/controlleur.c
deleted file mode 100644
index 8b137891791fe96927ad78e64b0aad7bded08bdc..0000000000000000000000000000000000000000
--- a/src/controlleur.c
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/src/deplacements.c b/src/deplacements.c
index 117b8104592c72cf75bd3b4402bbf5e436ac703d..cbfeeccf33fe4df7498f7a57cc087f6c4142a901 100644
--- a/src/deplacements.c
+++ b/src/deplacements.c
@@ -10,18 +10,18 @@
 * \brief Fichier contenant le code des fonctions liees aux déplacements des personnages.
 */
 
-boolean case_a_cote(Personnage * perso, Case * destination){ /* vérifie que la case hexagonale "destination" est contigue à la case du personnage */
+boolean case_a_cote(Personnage * perso, Case * destination,int hauteur_case , int largeur_case){ /* vérifie que la case hexagonale "destination" est contigue à la case du personnage */
     Case *depart = getPosition(perso);
-    if (get_x(depart)>get_x(destination)+1||get_x(depart)<get_x(destination)-1||get_y(depart)>get_y(destination)+1||get_y(depart)>get_y(destination)-1){
+    if (get_x(depart)>get_x(destination)+largeur_case||get_x(depart)<get_x(destination)-largeur_case||get_y(depart)>get_y(destination)+hauteur_case||get_y(depart)<get_y(destination)-hauteur_case){
         return faux;
     }
-    if (get_y(depart)==get_y(destination)+1&&get_x(depart)!=get_x(destination)){
+    if (get_y(depart)==get_y(destination)+hauteur_case&&get_x(depart)!=get_x(destination)){
         return faux;
     }
     return vrai;
 }
 
-int deplacement_unitaire(Personnage *perso,Case * destination){ /*déplace un personnage sur une case située à côté de la sienne, si cela est possible */
+int deplacement_unitaire(Personnage *perso,Case * destination, int hauteur_case , int largeur_case){ /*déplace un personnage sur une case située à côté de la sienne, si cela est possible */
     if (est_occupee(destination)){
         printf("déplacement impossible : case déjà occupée par un personnage");
         return 1;
@@ -30,7 +30,7 @@ int deplacement_unitaire(Personnage *perso,Case * destination){ /*d
         printf("déplacement impossible : case infranchissable");
         return 1;
     }
-    if (case_a_cote(perso,destination)==vrai){
+    if (case_a_cote(perso,destination, hauteur_case, largeur_case)==vrai){
        return deplacer_personnage(perso, destination);
     }
     printf("déplacement impossible : case non contigue");
diff --git a/src/deplacements.h b/src/deplacements.h
index 0db414b5d140149076731ce42e0433d6b96b95d1..da5923c835ae921899ffd3200dab29bd0bdc07b6 100644
--- a/src/deplacements.h
+++ b/src/deplacements.h
@@ -6,9 +6,9 @@
 #ifndef DEPLACEMENTS_H_INCLUDED
 #define DEPLACEMENTS_H_INCLUDED
 
-boolean case_a_cote(Personnage *perso,Case *destination);
+boolean case_a_cote(Personnage *perso,Case *destination,int hauteur_case, int largeur_case);
 
-int deplacement_unitaire(Personnage *perso,Case *destination);
+int deplacement_unitaire(Personnage *perso,Case * destination, int hauteur_case , int largeur_case);
 
 
 #endif
diff --git a/src/main.c b/src/main.c
index 02143c51fe7ea5921b136c15d81c2ab24f73f239..558af27d8b9e7c01f7b07dbcda0d94a1c50d0af6 100644
--- a/src/main.c
+++ b/src/main.c
@@ -67,7 +67,7 @@ int main()
 
 
 
-    init_jeu("../resources/Init_jeu.xml");
+ init_jeu("../resources/Init_jeu.xml");
 
     main_SDL();
 
diff --git a/src/personnage.c b/src/personnage.c
index 830a1152d53d672eb81fde7bd13acba66c6af0cd..5022edb390b010fa0819e3867c66bf87766bd7bd 100644
--- a/src/personnage.c
+++ b/src/personnage.c
@@ -12,9 +12,11 @@
 
 Personnage* init_personnage(Personnage *perso, Classe *c, Case *casedepart){
     perso->classe=c;
-    perso->points_deplacement=c->points_deplacement_max;
-    perso->PV=c->PV_max;
-    perso->mana=c->mana_max;
+    if(c!=NULL){
+        perso->points_deplacement=c->points_deplacement_max;
+        perso->PV=c->PV_max;
+        perso->mana=c->mana_max;
+    }
     perso->position=casedepart;
     marquer_occupee(casedepart);
     return perso;