diff --git a/snake/deplacement.c b/snake/deplacement.c
index c092ce2..d04e40f 100644
--- a/snake/deplacement.c
+++ b/snake/deplacement.c
@@ -14,7 +14,7 @@
 
 
 
-void deplacement (struct adresse* pointeur, unsigned char* sens)  {
+unsigned char deplacement (struct adresse* pointeur, unsigned char* sens)  {
 
 
   int** plateau = pointeur -> plateau;
@@ -45,138 +45,307 @@ void deplacement (struct adresse* pointeur, unsigned char* sens)  {
     touche = Touche();
 
     if (touche == XK_Left) {
+
+
       
-      plateau[tete[0]][tete[1]] = 0;
+      /* test de dépassement des limites du plateau de jeu */
+      if ( tete[1] == 0)  {
+
+	return 0;
+
+      }
+
+
+      /* modificaton du plateau de jeu et affichage de la tête */ 
+      else{
       
 
-      plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0;
+	plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0;
 
-      tete[1] = tete[1] - 1;
+	tete[1] = tete[1] - 1;
 
 
-      ChoisirCouleurDessin(yellow);
-      RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20);
+
+	/* test si le serpent se rentre dedans */
+	if (plateau[tete[0]][tete[1]] == 1)  {
+
+	  return 0;
 
 
-      *sens = GAUCHE;
+	}else{
 
-      supp_queue(pointeur);
 
-      plateau[tete[0]][tete[1]] = 1;
+	  ChoisirCouleurDessin(yellow);
+	  RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20);
+
+
+	  *sens = GAUCHE;
+
+	  supp_queue(pointeur);
+
+	  plateau[tete[0]][tete[1]] = 1;
 
       
 
-      return;
+	  return 1;
+
+	}
 	
+      }
+
     }
 
+
+
+
+
+    
+
     if (touche == XK_Right)  {
 
-      plateau[tete[0]][tete[1]] = 0;
+
+      
+      /* test de dépassement des limites du plateau de jeu */
+      if (tete[1] == COLONNES - 1)  {
+
+	return 0;
+
+      }
 
 
-      plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0;
 
-      tete[1] = tete[1] + 1;
+      /* modificaton du plateau de jeu et affichage de la tête */ 
+      else{
 
 
-      ChoisirCouleurDessin(yellow);
-      RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20);
+	plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0;
+
+	tete[1] = tete[1] + 1;
 
 
-      *sens = DROITE;
+	
+	/* test si le serpent se rentre dedans */
+	if ( plateau[tete[0]][tete[1]] == 1)  {
 
-      supp_queue(pointeur);
+	  return 0;
 
-      plateau[tete[0]][tete[1]] = 1;
 
-      return; 
+	}else{
+
+
+	  ChoisirCouleurDessin(yellow);
+	  RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20);
+
+
+	  *sens = DROITE;
+
+	  supp_queue(pointeur);
+
+	  plateau[tete[0]][tete[1]] = 1;
+
+	  return 1;
+
+	}
+      }
+
     }
 
+    
+
     if (touche == XK_Up)  {
 
-      plateau[tete[0]][tete[1]] = 0;
+      
+      
+      /* test de dépassement des limites du plateau de jeu */
+      if (tete[0] == 0)  {
+
+	return 0;
+
+      }
 
 
-      plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0;
-
-      tete[0] = tete[0] - 1;
 
 
-      ChoisirCouleurDessin(yellow);
-      RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20);
+
+      /* modificaton du plateau de jeu et affichage de la tête */ 
+      else{ 
 
 
-      *sens = HAUT;
+	plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0;
 
-      supp_queue(pointeur);
+	tete[0] = tete[0] - 1;
+	
 
-      plateau[tete[0]][tete[1]] = 1;
+	/* test si le serpent se rentre dedans */
+	if (plateau[tete[0]][tete[1]] == 1)  {
 
-      return; 
+	  return 0;
+
+
+	}else{
+
+
+	  ChoisirCouleurDessin(yellow);
+	  RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20);
+
+
+	  *sens = HAUT;
+
+	  supp_queue(pointeur);
+
+	  plateau[tete[0]][tete[1]] = 1;
+
+	  return 1;
+
+	}
+      }
     }
 
+
+    
+
     if (touche == XK_Down)  {
 
-      plateau[tete[0]][tete[1]] = 0;
+      
+
+      /* test de dépassement des limites du plateau de jeu */
+      if (tete[0] == LIGNES - 1)  {
+
+	return 0;
+
+      }
 
 
-      plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0;
 
-      tete[0] = tete[0] + 1;
+      /* modificaton du plateau de jeu et affichage de la tête */ 
+      else{
 
 
-      ChoisirCouleurDessin(yellow);
-      RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20);
+	plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0;
+
+	tete[0] = tete[0] + 1;
 
 
-      *sens = BAS;
+	
+	/* test si le serpent se rentre dedans */
+	if (plateau[tete[0]][tete[1]] == 1) {
 
-      supp_queue(pointeur);
+	  return 0;
+	
 
-      plateau[tete[0]][tete[1]] = 1;
+	  
 
-      return; 
+	}else{
+
+
+	  ChoisirCouleurDessin(yellow);
+	  RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20);
+
+
+	  *sens = BAS;
+
+	  supp_queue(pointeur);
+
+	  plateau[tete[0]][tete[1]] = 1;
+
+	  return 1;
+
+	}
+
+      }
 
     }
 
  
   }
 
+
+    
+
   else {
 
     if ( *sens == BAS)  {
 
 
-      plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0;
+      /* test de dépassement des limites du plateau de jeu */
+      if ( tete[0] == LIGNES - 1 )  {
 
-      tete[0] = tete[0] + 1;
 
-      
-
-      ChoisirCouleurDessin(yellow);
-      RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20);
-
-      
-      supp_queue(pointeur);
-      plateau[tete[0]][tete[1]] = 1;
+	return 0;
 	
+      }
+
+
+      /* modificaton du plateau de jeu et affichage de la tête */ 
+      else {
+	
+	
+
+	plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0;
+      
+	tete[0] = tete[0] + 1;
+
+	/* test si le serpent se rentre dedans */
+	if (plateau[tete[0]][tete[1]] == 1) {
+
+	  return 0;
+	
+	}else{
+
+      
+
+	  ChoisirCouleurDessin(yellow);
+	  RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20);
+
+      
+	  supp_queue(pointeur);
+	  plateau[tete[0]][tete[1]] = 1;
+
+	  return 1;
+
+	}
+	
+      }
     }
 
     if ( *sens == HAUT)  {
 
 
-      plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0;
+      /* test de dépassement des limites du plateau de jeu */
+      if ( tete[0] == 0)  {
+
+	return 0;
+
+      }
+
+
+      /* modificaton du plateau de jeu et affichage de la tête */ 
+      else{
+
+
+	plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0;
       
-      tete[0] = tete[0] - 1;
+	tete[0] = tete[0] - 1;
+
+	/* test si le serpent se rentre dedans */
+	if (plateau[tete[0]][tete[1]] == 1) {
+
+	  return 0;
+	
+	}else{
 
      
-      ChoisirCouleurDessin(yellow);
-      RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20);
-
+	  ChoisirCouleurDessin(yellow);
+	  RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20);
+	
       
-      supp_queue(pointeur);
-      plateau[tete[0]][tete[1]] = 1;
+	  supp_queue(pointeur);
+	  plateau[tete[0]][tete[1]] = 1;
+
+	  return 1;
+
+	}
+      }
       
     }
 
@@ -185,37 +354,89 @@ void deplacement (struct adresse* pointeur, unsigned char* sens)  {
     if ( *sens == DROITE)  {
 
 
-      plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0;
+      /* test de dépassement des limites du plateau de jeu */
+      if ( tete[1] == COLONNES - 1)  {
 
-      tete[1] = tete[1] + 1;
+	return 0;
+
+      }
 
 
-      ChoisirCouleurDessin(yellow);
-      RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20);
+
+      /* modificaton du plateau de jeu et affichage de la tête */ 
+      else{
+      
+	
+	plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0;
+      
+	tete[1] = tete[1] + 1;
+
+
+	/* test si le serpent se rentre dedans */
+	if (plateau[tete[0]][tete[1]] == 1) {
+
+	  return 0;
+	
+	}else{
 
       
-      supp_queue(pointeur);
-      plateau[tete[0]][tete[1]] = 1;
+	  ChoisirCouleurDessin(yellow);
+	  RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20);
+      
+      
+	  supp_queue(pointeur);
+	  plateau[tete[0]][tete[1]] = 1;
+
+	  return 1;
+
+	}
+      }
       
     }
-
+    
     if ( *sens == GAUCHE)  {
 
 
-      plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0;
-    
-      tete[1] = tete[1] - 1;
+      /* test de dépassement des limites du plateau de jeu */
+      if (tete[1] == 0) {
 
-      
+	return 0;
 
-      ChoisirCouleurDessin(yellow);
-      RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20);
-    
+      }
+
+
+
+
+      /* modificaton du plateau de jeu et affichage de la tête */ 
+      else {
       
-      supp_queue(pointeur);
-      plateau[tete[0]][tete[1]] = 1;
+      
+	plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0;
+      
+	tete[1] = tete[1] - 1;
+
+
+	/* test si le serpent se rentre dedans */
+	if (plateau[tete[0]][tete[1]] == 1) {
+
+	  return 0;
+	
+	}else{
+      
+      
+	  ChoisirCouleurDessin(yellow);
+	  RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20);
+	
+	
+	  supp_queue(pointeur);
+	  plateau[tete[0]][tete[1]] = 1;
+	
+	  return 1;
+
+	}
+      }
     }
-
+    
   }
 	
 }
diff --git a/snake/deplacement.h b/snake/deplacement.h
index ce03003..4cbaaef 100644
--- a/snake/deplacement.h
+++ b/snake/deplacement.h
@@ -9,6 +9,6 @@
 #define GAUCHE 3
 #include "plateau_init.h"
 
-void deplacement (struct adresse* pointeur, unsigned char* sens);
+unsigned char deplacement (struct adresse* pointeur, unsigned char* sens);
 
 #endif /* DEPLACEMENT_H */
diff --git a/snake/main.c b/snake/main.c
index e0773a4..79b811a 100644
--- a/snake/main.c
+++ b/snake/main.c
@@ -16,9 +16,11 @@ int main(void)  {
 
   struct adresse* pointeur =  plateau_init();
 
+  int** plateau = pointeur -> plateau;
+
   short int* compteur = NULL;
 
-  int i = 0;
+  int i = 0, j;
   
 
   unsigned short* indice_queue = pointeur -> indice_queue;
@@ -58,20 +60,23 @@ int main(void)  {
   compteur = score_init();
 
   
-  while ( jeu == 1)  {
+  while (jeu ==  1)  {
 
     if (Microsecondes() > suivant) {
 
-      printf("%d %d\n", pointeur -> corps_serpent[*indice_queue][0], pointeur -> corps_serpent[*indice_queue][1]);
+      /* printf("(%d %d)\n", pointeur -> corps_serpent[*indice_queue][0], pointeur -> corps_serpent[*indice_queue][1]);
+
+	 printf("[%hhu  %hhu]\n", tete[0], tete[1]);*/
 
-      printf("[%hhu  %hhu]\n", tete[0], tete[1]);
 
 
      
-      deplacement(pointeur, sens);
+      jeu = deplacement(pointeur, sens);
 
       suivant = Microsecondes() + CYCLE;
 
+     
+
 
       
     }
diff --git a/snake/supp_queue.c b/snake/supp_queue.c
index 44dc869..522d5db 100644
--- a/snake/supp_queue.c
+++ b/snake/supp_queue.c
@@ -1,4 +1,4 @@
-/* Fonction qui mets à jour la position de la queue en fonction des déplacement du serpent
+/* Fonction qui efface la queue du serpent lorsqu'il se déplace et augmente la taille du serpent lorsqu'il mange une pomme
 
    Written by Yann KERAUDREN and Titouan LERICHE */
 
@@ -26,7 +26,7 @@ void supp_queue( struct adresse* pointeur )  {
   unsigned short* indice_queue = pointeur -> indice_queue; 
 
 
-  int ligne_pomme, colonne_pomme;
+  int ligne_pomme, colonne_pomme, i;
 
   
   
@@ -35,9 +35,7 @@ void supp_queue( struct adresse* pointeur )  {
 
   srand(time(NULL));
 
-
-
-  
+	 
 
   /* teste si le serpent mange une pomme */
 
@@ -53,9 +51,23 @@ void supp_queue( struct adresse* pointeur )  {
 
     corps_serpent[*taille_serpent - 1] = malloc( 2 * sizeof(int));
 
+    /* printf("%d %d \n", tete[0], tete[1]);
+
+
+    /* problème de mise en place de la tête du serpent au bonne endroit dans le corps */
+
     corps_serpent[*taille_serpent - 1][0] = tete[0];
     corps_serpent[*taille_serpent - 1][1] = tete[1];
 
+    /*for (i = 0; i < *taille_serpent; i++)  {
+   
+  
+
+      printf("[%d %d]  ", corps_serpent[i][0], corps_serpent[i][1]);
+
+    }
+
+    printf("\n");*/