diff --git a/snake/Makefile b/snake/Makefile
index 8e88d81..34f4da5 100755
--- a/snake/Makefile
+++ b/snake/Makefile
@@ -8,6 +8,7 @@ but : run
 
 OFILES = plateau_init.o \
 	fenetre.o \
+	augmentation_serpent.o \
 	deplacement.o \
 	ajout_score.o \
 	score_init.o \
@@ -25,9 +26,11 @@ plateau_init.o : plateau_init.h
 
 fenetre.o : fenetre.h plateau_init.h
 
-deplacement.o : deplacement.h
+augmentation_serpent.o : augmentation_serpent.h
 
-supp_queue.o : supp_queue.h
+deplacement.o : deplacement.h supp_queue.h
+
+supp_queue.o : supp_queue.h augmentation_serpent.h
 
 ajout_score.o : ajout_score.h
 
diff --git a/snake/augmentation_serpent.c b/snake/augmentation_serpent.c
new file mode 100644
index 0000000..3f2ad0d
--- /dev/null
+++ b/snake/augmentation_serpent.c
@@ -0,0 +1,77 @@
+/* Fonction qui sert à aggrandir la taille du serpent lorsque celui-ci mange une pomme
+
+   Written by Yann KERAUDREN and Titouan LERICHE */
+
+
+#include <stdlib.h>
+#include <stdio.h>
+#include "augmentation_serpent.h"
+
+
+
+void augmentation_serpent (struct adresse* pointeur)  {
+
+
+  int** corps_serpent = pointeur -> corps_serpent;
+
+  unsigned short* indice_queue = pointeur -> indice_queue;
+
+  unsigned char* tete = pointeur -> tete;
+
+  unsigned short* taille_serpent = pointeur -> taille_serpent;
+
+  int** corps_serpent2 = NULL;
+
+  int i; 
+
+
+
+  /* augmentation de la taille du serpent */
+  
+  *taille_serpent = *taille_serpent + 1;
+
+
+
+  /* création d'un nouveau tableau */
+
+  corps_serpent2 = malloc( *taille_serpent * sizeof(int*));
+
+  for ( i = 0; i < *taille_serpent; i++)  {
+
+    corps_serpent2 = malloc( 2 * sizeof(int));
+
+  }
+
+
+
+  /* attributions des anciennes cases du corps dans le nouveau tableau et ajout de la nouvelle tête au bonne endroit*/
+
+  for ( i = 0 ; i < *indice_queue; i++)  {
+
+    corps_serpent2[i] = corps_serpent[i] ;
+
+  }
+
+  corps_serpent2[*indice_queue][0] = tete[0];
+  corps_serpent2[*indice_queue][1] = tete[1];
+
+  for ( i = *indice_queue; i < *taille_serpent - 1; i++)  {
+
+    corps_serpent2[i+1] = corps_serpent[i];
+
+  }
+
+  *indice_queue = *indice_queue + 1;
+
+  pointeur -> corps_serpent = corps_serpent2;
+
+  
+  for ( i = 0; i < *taille_serpent - 1; i++)  {
+
+    free( corps_serpent[i]);
+  }
+
+  free(corps_serpent);
+  
+
+}
diff --git a/snake/augmentation_serpent.h b/snake/augmentation_serpent.h
new file mode 100644
index 0000000..552cdd0
--- /dev/null
+++ b/snake/augmentation_serpent.h
@@ -0,0 +1,14 @@
+
+
+#ifndef AUGMENTATION_SERPENT_H
+
+#define AUGMENTATION_SERPENT_H
+#include "plateau_init.h"
+
+void augmentation_serpent(struct adresse* pointeur);
+
+
+
+
+
+#endif /* AUGMENTATION_SERPENT_H */
diff --git a/snake/deplacement.c b/snake/deplacement.c
index d04e40f..2a55388 100644
--- a/snake/deplacement.c
+++ b/snake/deplacement.c
@@ -14,7 +14,7 @@
 
 
 
-unsigned char deplacement (struct adresse* pointeur, unsigned char* sens)  {
+unsigned char deplacement (struct adresse* pointeur, unsigned char* sens, unsigned char* retard)  {
 
 
   int** plateau = pointeur -> plateau;
@@ -60,7 +60,6 @@ unsigned char deplacement (struct adresse* pointeur, unsigned char* sens)  {
       else{
       
 
-	plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0;
 
 	tete[1] = tete[1] - 1;
 
@@ -74,6 +73,10 @@ unsigned char deplacement (struct adresse* pointeur, unsigned char* sens)  {
 
 	}else{
 
+	  /* modificaton du plateau de jeu et affichage de la tête */
+
+	  plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0;
+
 
 	  ChoisirCouleurDessin(yellow);
 	  RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20);
@@ -81,7 +84,7 @@ unsigned char deplacement (struct adresse* pointeur, unsigned char* sens)  {
 
 	  *sens = GAUCHE;
 
-	  supp_queue(pointeur);
+	  supp_queue(pointeur, retard);
 
 	  plateau[tete[0]][tete[1]] = 1;
 
@@ -113,13 +116,9 @@ unsigned char deplacement (struct adresse* pointeur, unsigned char* sens)  {
       }
 
 
-
-      /* 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;
 
 
@@ -132,6 +131,9 @@ unsigned char deplacement (struct adresse* pointeur, unsigned char* sens)  {
 
 	}else{
 
+	  /* modificaton du plateau de jeu et affichage de la tête */
+	  
+	  plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0;
 
 	  ChoisirCouleurDessin(yellow);
 	  RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20);
@@ -139,7 +141,7 @@ unsigned char deplacement (struct adresse* pointeur, unsigned char* sens)  {
 
 	  *sens = DROITE;
 
-	  supp_queue(pointeur);
+	  supp_queue(pointeur, retard);
 
 	  plateau[tete[0]][tete[1]] = 1;
 
@@ -164,15 +166,9 @@ unsigned char deplacement (struct adresse* pointeur, unsigned char* sens)  {
       }
 
 
-
-
-
-      /* 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;
 	
 
@@ -183,7 +179,11 @@ unsigned char deplacement (struct adresse* pointeur, unsigned char* sens)  {
 
 
 	}else{
+	  
 
+	  /* modificaton du plateau de jeu et affichage de la tête */
+
+	  plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0;
 
 	  ChoisirCouleurDessin(yellow);
 	  RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20);
@@ -191,7 +191,7 @@ unsigned char deplacement (struct adresse* pointeur, unsigned char* sens)  {
 
 	  *sens = HAUT;
 
-	  supp_queue(pointeur);
+	  supp_queue(pointeur, retard);
 
 	  plateau[tete[0]][tete[1]] = 1;
 
@@ -216,13 +216,10 @@ unsigned char deplacement (struct adresse* pointeur, unsigned char* sens)  {
       }
 
 
-
-      /* 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;
 
 
@@ -237,6 +234,9 @@ unsigned char deplacement (struct adresse* pointeur, unsigned char* sens)  {
 
 	}else{
 
+	  /* modificaton du plateau de jeu et affichage de la tête */
+	  
+	  plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0;
 
 	  ChoisirCouleurDessin(yellow);
 	  RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20);
@@ -244,7 +244,7 @@ unsigned char deplacement (struct adresse* pointeur, unsigned char* sens)  {
 
 	  *sens = BAS;
 
-	  supp_queue(pointeur);
+	  supp_queue(pointeur, retard);
 
 	  plateau[tete[0]][tete[1]] = 1;
 
@@ -276,12 +276,10 @@ unsigned char deplacement (struct adresse* pointeur, unsigned char* sens)  {
       }
 
 
-      /* 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;
 
@@ -289,16 +287,20 @@ unsigned char deplacement (struct adresse* pointeur, unsigned char* sens)  {
 	if (plateau[tete[0]][tete[1]] == 1) {
 
 	  return 0;
-	
+
+	  
 	}else{
 
-      
+	  /* modificaton du plateau de jeu et affichage de la tête */
+
+	  plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0;
 
 	  ChoisirCouleurDessin(yellow);
 	  RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20);
 
       
-	  supp_queue(pointeur);
+	  supp_queue(pointeur, retard);
+	  
 	  plateau[tete[0]][tete[1]] = 1;
 
 	  return 1;
@@ -319,11 +321,9 @@ unsigned char deplacement (struct adresse* pointeur, unsigned char* sens)  {
       }
 
 
-      /* 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;
 
@@ -334,12 +334,17 @@ unsigned char deplacement (struct adresse* pointeur, unsigned char* sens)  {
 	
 	}else{
 
-     
+	  /* modificaton du plateau de jeu et affichage de la tête */
+
+	  plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0;
+
+	  
 	  ChoisirCouleurDessin(yellow);
 	  RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20);
 	
       
-	  supp_queue(pointeur);
+	  supp_queue(pointeur, retard);
+	  
 	  plateau[tete[0]][tete[1]] = 1;
 
 	  return 1;
@@ -361,13 +366,9 @@ unsigned char deplacement (struct adresse* pointeur, unsigned char* sens)  {
 
       }
 
-
-
-      /* 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;
 
@@ -379,12 +380,16 @@ unsigned char deplacement (struct adresse* pointeur, unsigned char* sens)  {
 	
 	}else{
 
-      
+	  /* modificaton du plateau de jeu et affichage de la tête */
+
+	  plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0;
+	  
 	  ChoisirCouleurDessin(yellow);
 	  RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20);
       
       
-	  supp_queue(pointeur);
+	  supp_queue(pointeur, retard);
+	  
 	  plateau[tete[0]][tete[1]] = 1;
 
 	  return 1;
@@ -404,14 +409,10 @@ unsigned char deplacement (struct adresse* pointeur, unsigned char* sens)  {
 
       }
 
-
-
-
-      /* 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;
 
@@ -423,12 +424,16 @@ unsigned char deplacement (struct adresse* pointeur, unsigned char* sens)  {
 	
 	}else{
       
-      
+	  /* modificaton du plateau de jeu et affichage de la tête */
+	  
+	  plateau[corps_serpent[*indice_queue][0]][corps_serpent[*indice_queue][1]] = 0;
+	  
 	  ChoisirCouleurDessin(yellow);
 	  RemplirRectangle(20*(tete[1]+1),20*(tete[0]+1),20,20);
 	
 	
-	  supp_queue(pointeur);
+	  supp_queue(pointeur, retard);
+	  
 	  plateau[tete[0]][tete[1]] = 1;
 	
 	  return 1;
diff --git a/snake/deplacement.h b/snake/deplacement.h
index 4cbaaef..98ca5bd 100644
--- a/snake/deplacement.h
+++ b/snake/deplacement.h
@@ -9,6 +9,6 @@
 #define GAUCHE 3
 #include "plateau_init.h"
 
-unsigned char deplacement (struct adresse* pointeur, unsigned char* sens);
+unsigned char deplacement (struct adresse* pointeur, unsigned char* sens, unsigned char* retard);
 
 #endif /* DEPLACEMENT_H */
diff --git a/snake/main.c b/snake/main.c
index 79b811a..6f6bb3b 100644
--- a/snake/main.c
+++ b/snake/main.c
@@ -27,6 +27,7 @@ int main(void)  {
 
   
   unsigned char* sens = NULL;
+  unsigned char* retard = NULL;
 
   unsigned char* tete = pointeur -> tete; 
   
@@ -40,6 +41,10 @@ int main(void)  {
 
   *sens = 2;
 
+  retard = malloc(sizeof(unsigned char));
+
+  *retard = 0;
+
 
   suivant = Microsecondes() + CYCLE;
 
@@ -71,7 +76,7 @@ int main(void)  {
 
 
      
-      jeu = deplacement(pointeur, sens);
+      jeu = deplacement(pointeur, sens, retard);
 
       suivant = Microsecondes() + CYCLE;
 
@@ -117,6 +122,8 @@ int main(void)  {
 
    free(compteur);
 
+   free(retard); 
+
   
 
 
diff --git a/snake/supp_queue.c b/snake/supp_queue.c
index dd3bae7..0c3d7a9 100644
--- a/snake/supp_queue.c
+++ b/snake/supp_queue.c
@@ -8,11 +8,12 @@
 #include <graph.h>
 #include <time.h>
 #include "supp_queue.h"
+#include "augmentation_serpent.h"
 
 
 
 
-void supp_queue( struct adresse* pointeur )  {
+void supp_queue( struct adresse* pointeur, unsigned char* retard )  {
 
 
   int** corps_serpent = pointeur -> corps_serpent;
@@ -41,67 +42,47 @@ void supp_queue( struct adresse* pointeur )  {
 
   if (plateau[tete[0]][tete[1]] == 2 )  {
 
-
-    /* augmentation de la taille du serpent */
-
-    *taille_serpent = *taille_serpent + 1; 
-
-    corps_serpent = realloc( corps_serpent, *taille_serpent * sizeof(int*));
-    pointeur -> corps_serpent = corps_serpent; 
-
-    corps_serpent[*taille_serpent - 1] = malloc( 2 * sizeof(int));
-
-    /* printf("%d %d \n", tete[0], tete[1]);
+    *retard = *retard + 2;
 
 
-    /* problème de mise en place de la tête du serpent au bonne endroit dans le corps */
+    if (*retard >0 ) {
 
-    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");*/
+      augmentation_serpent(pointeur);
 
+      *retard = *retard - 1; 
 
 
 
+    }else{
 
     
 
-    /* apparition de la nouvelle pomme */
+      /* apparition de la nouvelle pomme */
 
 
-    ligne_pomme = rand() % 40;
-    colonne_pomme = rand() % 60;
-
-    /* teste pour ne pas faire apparaître la pomme sur une case déjà occupée */
-    
-    while (plateau[ligne_pomme][colonne_pomme] == 2 || plateau[ligne_pomme][colonne_pomme] == 1)  {
-
       ligne_pomme = rand() % 40;
       colonne_pomme = rand() % 60;
+
+      /* teste pour ne pas faire apparaître la pomme sur une case déjà occupée */
+    
+      while (plateau[ligne_pomme][colonne_pomme] == 2 || plateau[ligne_pomme][colonne_pomme] == 1)  {
+
+	ligne_pomme = rand() % 40;
+	colonne_pomme = rand() % 60;
+      }
+
+      plateau[ligne_pomme][colonne_pomme] = 2;
+
+      red = CouleurParComposante(255,0,0);
+      ChoisirCouleurDessin(red);
+      RemplirRectangle(20*(colonne_pomme + 1),20*(ligne_pomme + 1),20,20);
+    
+    
     }
 
-    plateau[ligne_pomme][colonne_pomme] = 2;
 
-    red = CouleurParComposante(255,0,0);
-    ChoisirCouleurDessin(red);
-    RemplirRectangle(20*(colonne_pomme + 1),20*(ligne_pomme + 1),20,20);
-    
-    
-
-    
-
-    
   }
-
+  
   else {
   
     green = CouleurParComposante(50,205,50);
@@ -130,6 +111,6 @@ void supp_queue( struct adresse* pointeur )  {
 
 
 }
-  
+
 
   
diff --git a/snake/supp_queue.h b/snake/supp_queue.h
index f97ac29..36e2df4 100644
--- a/snake/supp_queue.h
+++ b/snake/supp_queue.h
@@ -6,7 +6,7 @@
 
 #include "plateau_init.h"
 
-void supp_queue(struct adresse* pointeur) ;
+void supp_queue(struct adresse* pointeur, unsigned char* retard) ;
 
 #endif /* SUPP_QUEUE_H */