diff --git a/serpent.md b/serpent.md
index e3e41ff8c33ecbe6e7f1b82dcd735f4489d577e5..d8791ae60528496fe4071042eba8480facedff05 100644
--- a/serpent.md
+++ b/serpent.md
@@ -21,7 +21,7 @@ toc: false
 
 # Buts
 
-- Utilisation d'une file d'attente.
+- Implémentation d'une file d'attente.
 - Implémentation d'un jeu.
 - Utilisation de fonctions et de SDL2.
 - Allocation dynamique de mémoire.
@@ -59,13 +59,21 @@ Bien entendu vous devez utiliser `git` et `make` pour la gestion et la compilati
 
 # Cahier des charges
 
-Chaque segment du serpent est en fait un pixel: il est représenté par sa position (ses coordonnées `x`, `y` qui sont des entiers).
-Le serpent est en fait une file d'attente contenant la position des pixels qu'il occupe. Lorsque le serpent se déplace, il faut
+Chaque segment du serpent est en fait un pixel: il est représenté par sa position (ses coordonnées `x`, `y` qui sont des entiers)
+soit une structure de donnée du genre
+
+```C
+struct coord {
+    int x, y;
+};
+```
+
+Le serpent est une file d'attente contenant la position des pixels qu'il occupe. Lorsque le serpent se déplace, il faut
 retirer l'élément du devant de la file, et insérer le nouvel élément à l'arrière de la file:
 la tête du serpent est l'arrière de la file, et la queue du serpent est l'avant de la file.
 
 Sans intervention de la joueuse, le serpent ne changera pas de direction de déplacement.
-Il faut donc stocker cette information. La nourriture ne se déplace elle jamais,
+Il faut donc stocker cette information. La nourriture ne se déplace jamais,
 et est uniquement déterminée par sa position sur l'écran.
 
 Afin de déterminer si le serpent meurt ou mange de la nourriture, il est recommandé
@@ -81,21 +89,25 @@ Il est judicieux de n'afficher qu'un certain nombre de frames par seconde (ou en
 fixer le temps qu'il faut entre l'affichage de chaque frame, $t_f$).
 Pour ce faire, il faut mesurer le temps nécessaire à l'affichage d'une frame (voir plus bas),
 puis faire attendre votre programme le temps nécessaire pour qu'on attende $t_f$
-avant l'affichage de la frame suivante.
+avant l'affichage de la frame suivante (voir la fonction `uspleep()` par exemple).
 
 
-## Avant de commencer
+# Remarques
 
-Cette partie est particulièrement importante. Ce travail pratique est assez peu "guidé", il faut
-donc bien réfléchir avant de commencer à implémenter quelque chose.
+## Implémentation d'une file d'attente
 
-1. Mettez-vous par groupes de 5.
-2. Faites un schéma, une liste, etc avec les différentes fonctions et structures de données que vous allez utiliser.
-3. Écrivez les *headers* contenant les structures de données et les signatures des fonctions.
-4. Écrivez un `Makefile` qui compile votre ébauche de projet (même s'il y a rien dans les fichier à part un main vide).
-5. Allez vous pouvez vous y mettre!
+Votre file d'attente doit être implémentée à l'aide d'une structure de tableau dynamique, dont la taille peut changer en cours d'exécution.
+La structure de donnéessera donc
 
-# Remarques
+```C
+struct queue {
+    struct coord *data;
+    int capacity, head, tail;
+};
+```
+
+Il faut faire attention à bien réallouer la mémoire lorsqu'on a atteint la capacité de `data`. **Attention** en général on ne peut pas utiliser juste `realloc()`
+car il est nécessaire de copier le contenu de l'ancienne file dans le nouvel espace mémoire.
 
 ## Affichage graphique