diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..e69de29
diff --git a/evenement.c b/evenement.c
new file mode 100644
index 0000000..a3cf5e9
--- /dev/null
+++ b/evenement.c
@@ -0,0 +1,91 @@
+#include <graph.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include "main.h"
+
+
+void AfficherTimerEtScore(int m,int n,int score)   /*Afficher le temps passé et le score*/
+{   
+    char buf[100];
+    char buff[100];
+    couleur j;
+    j=CouleurParNom("yellow");
+    ChoisirCouleurDessin(j);
+
+	ChoisirEcran(1);
+	CopierZone(2,1,0,0,930,710,0,0);
+	snprintf(buf,100,"temps : %02d:%02d",m,n);
+    snprintf(buff,100,"SCORE : %07d",score);
+	EcrireTexte(60,650,buf,2);
+    EcrireTexte(600,650,buff,2);
+	CopierZone(1,0,0,0,930,710,0,0);
+}
+
+
+void MangerPastille(int *serpent, int* pastilles, int longueur_serpent, int longueur_pastilles)
+    {
+        int i = 0;
+
+        for(i=0;i<longueur_pastilles;i+=2)
+        {
+            if(serpent[0] == pastilles[i] && serpent[1] == pastilles[i+1])
+            {
+                
+            }
+        }
+        
+    }
+
+void DeplacementSerpent(int direction ,int *serpent, int longueur)
+{
+    int tempX = serpent[0];
+    int tempY = serpent[1];
+    int i;
+    couleur g;
+    couleur j;
+    ChoisirEcran(2);
+    j=CouleurParNom("yellow");
+    g=CouleurParNom("lightgreen");
+
+    ChoisirCouleurDessin(g);
+    RemplirRectangle(serpent[longueur-2],serpent[longueur-1],T_PIXEL,T_PIXEL);
+
+    for (i = 2; i < longueur; i += 2) {
+        int tempX2 = serpent[i];
+        int tempY2 = serpent[i + 1];
+
+        serpent[i] = tempX;
+        serpent[i + 1] = tempY;
+
+        tempX = tempX2;
+        tempY = tempY2;
+    }
+
+    ChoisirCouleurDessin(j);
+    if(direction == 0) /* Direction vers la gauche */
+    {
+        printf("Gauche %d\n",direction);
+        serpent[0]-=T_PIXEL;
+        
+        RemplirRectangle(serpent[0],serpent[1],T_PIXEL,T_PIXEL);
+        printf("Longueur = %d | x %d | y %d",longueur,serpent[longueur-1],serpent[longueur-2]);
+    }
+    else if(direction == 1) /* Direction vers le haut */
+    {
+        printf("Haut %d\n",direction);
+        serpent[1]-=T_PIXEL;
+        RemplirRectangle(serpent[0],serpent[1],T_PIXEL,T_PIXEL);
+    }
+    else if(direction == 2) /* Direction vers la droite */
+    {
+        printf("Droite %d\n",direction);
+        serpent[0]+=T_PIXEL;
+        RemplirRectangle(serpent[0],serpent[1],T_PIXEL,T_PIXEL);
+    }
+    else if(direction == 3) /* Direction vers le bas */
+    {
+        printf("Bas %d\n",direction);
+        serpent[1]+=T_PIXEL;
+        RemplirRectangle(serpent[0],serpent[1],T_PIXEL,T_PIXEL);
+    }
+}
\ No newline at end of file
diff --git a/evenement.h b/evenement.h
new file mode 100644
index 0000000..274b155
--- /dev/null
+++ b/evenement.h
@@ -0,0 +1,6 @@
+
+void AfficherTimerEtScore(int m,int n,int score);
+
+void MangerPastille(int *serpent, int* pastilles, int longueur_serpent, int longueur_pastilles);
+
+void DeplacementSerpent(int direction ,int *serpent, int longueur);
\ No newline at end of file
diff --git a/graph.h b/graph.h
new file mode 100644
index 0000000..8244e09
--- /dev/null
+++ b/graph.h
@@ -0,0 +1,149 @@
+#ifndef _GRAPH_H
+#define _GRAPH_H
+
+#include<X11/Xlib.h>
+#include<X11/Xutil.h>
+#include<X11/keysym.h>
+
+extern int _X;
+extern int _Y;
+
+#define NB_PIXMAP 10
+
+typedef unsigned long couleur;
+typedef XPoint Point;
+
+int InitialiserGraphique();
+/* initialise le mode graphique : renvoie 1 en cas de succes, 0 sinon */
+
+int CreerFenetre(int posx,int posy,int X,int Y);
+/* creer la fenetre graphique de largeur X et longueur Y, et la positionne
+   sur l'ecran au point (posx,posy). Une seule fenetre autoris�e */
+
+void ChoisirTitreFenetre(char *s);
+/* change le titre de la fenetre */
+
+void ChoisirCurseur(unsigned int forme);
+/* change le curseur de la fenetre */
+
+void CacherFenetre(void);
+/* cache la fenetre */
+
+void AfficherFenetre(void);
+/* affiche la fenetre */
+
+void ChoisirEcran(int n);
+/* fixe l'ecran ou le dessin est effectue : cette ecran est soit 0 (la fenetre
+   visible, ecran par defaut au demarrage), soit le numero de l'�cran  virtuel correspondant */
+
+void ChoisirCouleurDessin(couleur c);
+/* fixe la couleur qui sert au dessin */
+
+couleur CouleurParNom(char * nom);
+/* fait la traduction d'une couleur a partir de son nom : le fichier rgb.txt
+   contient la liste des couleurs accessibles via leur nom */
+
+couleur CouleurParComposante(unsigned char r, unsigned char v,unsigned char b); 
+/* renvoie la couleur d�finie par ses trois composantes */
+
+int Maxx();
+/* renvoie la largeur de l'ecran : il faut que le mode graphique ait �t� 
+   initialise !!! */
+
+int Maxy();
+/* renvoie la hauteur de l'ecran : il faut que le mode graphique ait �t� 
+   initialise !!! */
+
+void DessinerPixel(int x,int y);
+/* allume un pixel avec la couleur de dessin */
+
+void DessinerSegment(int x,int y,int xx,int yy);
+/* idem precedent, mais avec la couleur de dessin */
+
+void DessinerSegments(Point * sommets,int nb_sommets);
+/* trace pour chaque paire sommet[i],sommet[i+1] le segment correspondant. Si le deux extr�mit�s correspondent, le polygone est ferm� */
+
+void DessinerRectangle(int x,int y,int l,int h);
+/* idem, mais utilise la couleur de dessin */
+
+void RemplirRectangle(int x,int y,int l,int h);
+/* trace un rectangle plein, rempli avec c */
+
+void DessinerArc(int x,int y,int l,int h,int angle1,int angle2);
+/* idem, mais utilise la couleur de dessin */
+
+void RemplirArc(int x,int y,int l,int h,int angle1,int angle2);
+/* trace un arc plein avec c */
+
+void RemplirTriangle(int x,int y,int xx,int yy,int xxx,int yyy);
+/* trace un triangle plein */
+
+void RemplirPolygone(Point * sommets,int nb_sommet);
+/* Trace un polygone plein d�fini par son tableau de sommets. Si les extremit�s ne coincident pas, le polygone est ferm� automatiquement.
+*/
+
+int ToucheEnAttente();
+/* renvoie 1 si une touche a �t� enfonc�e, 0 sinon */
+
+KeySym Touche();
+/* renvoie la premiere touche du tampon : cette fonction est bloquante => 
+   utiliser ToucheEnAttente  pour la rendre non bloquante */
+
+void EcrireTexte(int x,int y,char *texte,int taille);
+/* ecrit la chaine texte au point (x,y) : taille indique la taille (0<->petit,1<->moyen,2<->grand) */
+#ifdef HAVE_XPM
+void SauverImage(char * file,int x,int y,int l,int h);
+/* sauvegarde d'une partie de la fenetre (x,y,x+l,y+h) au format xpm */
+#endif
+
+int ChargerImage(char *file,int x,int y,int xx,int yy,int l,int h);
+/* charge une partie (xx,yy,xx+l,yy+h) d'image au format xpm dans 
+la fenetre a la position (x,y) */
+
+void ChargerImageFond(char *file);
+/* charge une image qui remplit le fond de la fen\^etre, en la r\'ep\'etant si necessaire */
+
+void EffacerEcran(couleur c);
+/* efface l'ecran avec la couleur c*/
+
+void ChoisirModeDessin(int m);
+/* fixe le mode d'affichage : 0<->ecrasement 1<->xor */
+
+int TailleChaineEcran(char *t,int taile);
+/* renvoie, en pixel, la taille horizontale occupee par la chaine � l'�cran :taille est la taille de la police (0,1,2) */
+
+int TailleSupPolice(int taille);
+/* renvoie la taiile maximale de la police, en pixel, au dessus de la ligne d'�criture */
+
+int TailleInfPolice(int taille);
+/* renvoie la taille maximale de la police, en pixel, en dessous de la ligne d'�criture */
+
+void CopierZone(int src,int dst,int ox,int oy,int L,int H,int dx,int dy);
+/* copie une zone de l'�cran vers l'�cran dst. La zone copi�e est le rectangle delimite par le coin superieure hauche (ox,oy) et sa largeur l et hauteur h. Cette zone est copi� au point (dx,dy) de l'ecran dst */ 
+
+void FermerGraphique();
+/* fermeture du mode graphique */
+
+unsigned long Microsecondes();
+/* renvoie le nombre de microsecondes ecoul�es depuis le
+lancement du programme */
+
+void SourisPosition();
+/* recupere les coordonnees de la souris dans la fenetre et les place dans _X et _Y*/
+
+int SourisCliquee();
+/* indique un clic de souris (1 si oui, 0 sinon), et recupere si c'est le cas la position au moment du clic dans _X et _Y */
+
+
+/* fonctions a r��crire proprement */
+
+int ChargerSprite(char *file);
+/* charge un srpite en m�moire, et renvoie son num�ro 
+ * -1 en cas d'echec */
+void AfficherSprite(int n,int x,int y);
+/* affiche le sprite correspondant � son num�ro */
+void LibererSprite(int n);
+/* libere les ressources associ�es au sprite
+ * n */
+
+#endif
diff --git a/main.c b/main.c
index 289aa91..c9710cb 100644
--- a/main.c
+++ b/main.c
@@ -2,6 +2,8 @@
 #include <stdio.h>
 #include <graph.h>
 #include <time.h>
+#include "evenement.h"
+
 
 #define W_WINDOW 930 /* Largeur de la fenêtre*/
 #define H_WINDOW 710 /* Hauteur de la fenêtre*/
@@ -15,82 +17,6 @@
 
 #define delta 100000L
 
-
-void Affichertimeretscore(int m,int n,int score)   /*Afficher le temps passé et le score*/
-{   
-    char buf[100];
-    char buff[100];
-    couleur j;
-    j=CouleurParNom("yellow");
-    ChoisirCouleurDessin(j);
-
-	ChoisirEcran(1);
-	CopierZone(2,1,0,0,930,710,0,0);
-	snprintf(buf,100,"temps : %02d:%02d",m,n);
-    snprintf(buff,100,"SCORE : %07d",score);
-	EcrireTexte(60,650,buf,2);
-    EcrireTexte(600,650,buff,2);
-	CopierZone(1,0,0,0,930,710,0,0);
-}
-void grandirserpent(int *serpent)
-    {
-
-    }
-
-void DeplacementSerpent(int direction ,int *serpent, int longueur)
-{
-    int tempX = serpent[0];
-    int tempY = serpent[1];
-    int i;
-    couleur g;
-    couleur j;
-    ChoisirEcran(2);
-    j=CouleurParNom("yellow");
-    g=CouleurParNom("lightgreen");
-
-    ChoisirCouleurDessin(g);
-    RemplirRectangle(serpent[longueur-2],serpent[longueur-1],T_PIXEL,T_PIXEL);
-
-    for (i = 2; i < longueur; i += 2) {
-        int tempX2 = serpent[i];
-        int tempY2 = serpent[i + 1];
-
-        serpent[i] = tempX;
-        serpent[i + 1] = tempY;
-
-        tempX = tempX2;
-        tempY = tempY2;
-    }
-
-    ChoisirCouleurDessin(j);
-    if(direction == 0) /* Direction vers la gauche */
-    {
-        printf("Gauche %d\n",direction);
-        serpent[0]-=T_PIXEL;
-        
-        RemplirRectangle(serpent[0],serpent[1],T_PIXEL,T_PIXEL);
-        printf("Longueur = %d | x %d | y %d",longueur,serpent[longueur-1],serpent[longueur-2]);
-    }
-    else if(direction == 1) /* Direction vers le haut */
-    {
-        printf("Haut %d\n",direction);
-        serpent[1]-=T_PIXEL;
-        RemplirRectangle(serpent[0],serpent[1],T_PIXEL,T_PIXEL);
-    }
-    else if(direction == 2) /* Direction vers la droite */
-    {
-        printf("Droite %d\n",direction);
-        serpent[0]+=T_PIXEL;
-        RemplirRectangle(serpent[0],serpent[1],T_PIXEL,T_PIXEL);
-    }
-    else if(direction == 3) /* Direction vers le bas */
-    {
-        printf("Bas %d\n",direction);
-        serpent[1]+=T_PIXEL;
-        RemplirRectangle(serpent[0],serpent[1],T_PIXEL,T_PIXEL);
-    }
-}
-
 int ArrondirPixel(int nombre) /* Calcule un arrondi du pixel pour pouvoir respecter la norme des 40 lignes et 60 colonnes */
 {
     /* Calcul du reste de la division par 15 */
@@ -102,7 +28,7 @@ int ArrondirPixel(int nombre) /* Calcule un arrondi du pixel pour pouvoir respec
     return arrondi;
 }
 
-void gen_pastille(int nb_pastille, int *p_pastilles) /* Ajout des pointeurs pour le futur tableau de pastilles  */ 
+void gen_pastille(int nb_pastille, int *p_pastilles)
 
                                    /* nb_pastille = int nombre de pastille voulue , p_pastilles est un pointeur d'un tableau de pixels qui sont des pastilles*/
                                    /*Générer une pastille dans la grid*/
@@ -243,7 +169,7 @@ int main()
                 direction = 3;
                 if(direction_davant == 1 && direction == 3)
                 {
-                    direction = direction_davant;
+                    direction = direction_davant;               /* Changements de direction du serpent*/
                 }
                 break;
             case XK_Left:
@@ -260,12 +186,12 @@ int main()
                     direction = direction_davant;
                 }
                 break;
-                
+
             case XK_space:
                 if(pause == 0)
                 { 
                     pause = 1 ;
-                } 
+                }                                   /* Faire pause */
                 else if(pause == 1) 
                 { 
                     pause = 0;
@@ -290,9 +216,11 @@ int main()
                         n=0;
                     }
 
-                Affichertimeretscore(m,n,score);
+                AfficherTimerEtScore(m,n,score);
                 suivant=Microsecondes()+delta;
-                direction_davant = direction;
+
+                direction_davant = direction; /* Check si le serpent à le droit de changer de direction */
+                MangerPastille(serpent,pastilles,longueur_serpent,longueur_pastilles);
                 DeplacementSerpent(direction,serpent,longueur_serpent);
                
 			
diff --git a/main.h b/main.h
new file mode 100644
index 0000000..6adf711
--- /dev/null
+++ b/main.h
@@ -0,0 +1,11 @@
+#ifndef MAIN_H
+#define MAIN_H
+
+#define W_WINDOW 930
+#define H_WINDOW 710
+#define W_GAME 900
+#define H_GAME 600
+#define T_PIXEL 15
+#define DECALEMENT 30
+
+#endif
\ No newline at end of file
diff --git a/makefile b/makefile
new file mode 100644
index 0000000..8613644
--- /dev/null
+++ b/makefile
@@ -0,0 +1,16 @@
+CC = gcc
+CFLAGS = -Wall -Wextra
+
+all: prog
+
+prog: main.o evenement.o
+	$(CC) -ansi -pedantic -o $@ $^ -lgraph
+
+main.o: main.c evenement.h
+	$(CC) $(CFLAGS) -c $< -o $@
+
+evenement.o: evenement.c evenement.h
+	$(CC) $(CFLAGS) -c $< -o $@
+
+clean:
+	rm -f *.o prog
diff --git a/prog b/prog
index c91a7e7..9d969cf 100755
Binary files a/prog and b/prog differ