diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..d7a105c21a003490517f5cf3ad95135df09ede90
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,11 @@
+CC=gcc -Wall -Wextra -ansi
+
+stackchess :  main.o tableau.o affichage.o
+	cd obj && $(CC) $^ -o ../$@
+
+main.o : src/main.c
+	$(CC) -c $< -o ./obj/$@
+
+%.o: src/%.c src/%.h
+	$(CC) -c $< -o obj/$@
+
diff --git a/obj/affichage.o b/obj/affichage.o
new file mode 100644
index 0000000000000000000000000000000000000000..e86c05005ee87b10d46e42d89b070b9fa69fc406
Binary files /dev/null and b/obj/affichage.o differ
diff --git a/obj/main.o b/obj/main.o
new file mode 100644
index 0000000000000000000000000000000000000000..83f308b5febfbd49ff1ad342670fcc623cd4076c
Binary files /dev/null and b/obj/main.o differ
diff --git a/obj/tableau.o b/obj/tableau.o
new file mode 100644
index 0000000000000000000000000000000000000000..1937f871456d0a771a097810b4fefb0042dba670
Binary files /dev/null and b/obj/tableau.o differ
diff --git a/src/affichage.c b/src/affichage.c
new file mode 100644
index 0000000000000000000000000000000000000000..cb96d5fc7e83858dd6a740e89bf807f893d217e9
--- /dev/null
+++ b/src/affichage.c
@@ -0,0 +1,26 @@
+#include<stdio.h>
+#include"tableau.h"
+/*affichage.c*/
+
+void affiche(pile** tableau, int N)
+{
+  int i,j,h;
+  for (i=0 ; i<N ; i++){
+    for (h=0 ; h<N ; h++){
+      printf("+--");
+      
+      if (h == N-1)printf("+\n");
+    }
+    for (j=0 ; j<N ; j++)
+      if (est_vide(tableau[i][j]))
+        printf("|  ");
+      else
+        printf("|%s", sommet(tableau[i][j]));
+    printf("|\n");
+  }
+  for (i=0 ; i<N ; i++ ){
+    printf("+--");
+    if (i == N-1) printf("+");
+  }
+  printf("\n");
+}
diff --git a/src/affichage.h b/src/affichage.h
new file mode 100644
index 0000000000000000000000000000000000000000..04c6bee4d46a5139bf4103e01413fd96f09b9b06
--- /dev/null
+++ b/src/affichage.h
@@ -0,0 +1,14 @@
+#ifndef _AFFICHAGE
+#define _AFFICHAGE
+
+#include"tableau.h"
+/*affichage.h*/
+
+/*
+ * @require
+ * @assign
+ * @ensure effectue le rafraichissement de l'écran et l'affichage du jeu en terminal
+*/
+void affiche(pile **tableau, int N);
+
+#endif
diff --git a/stackchess.c b/src/main.c
similarity index 76%
rename from stackchess.c
rename to src/main.c
index 511b00da95d00adbbaceb75a09712d452bc100e5..ba9c7bf44ddd30a94245168444d17dec96add9ff 100644
--- a/stackchess.c
+++ b/src/main.c
@@ -1,8 +1,10 @@
 #include"tableau.h"
+#include"affichage.h"
+/*main.c*/
 
 
-
-int main(int argc, char **argv){
+int main(int argc, char **argv)
+{
   int N = 6;
   if (argc != 1){
     N=strtol(argv[1],NULL,10);
diff --git a/src/tableau.c b/src/tableau.c
new file mode 100644
index 0000000000000000000000000000000000000000..5c47002fb775b4524a821058b7fae3593f67349e
--- /dev/null
+++ b/src/tableau.c
@@ -0,0 +1,72 @@
+#include<stdio.h>
+#include<stdlib.h>
+#include<string.h>
+
+#include"tableau.h"
+/*tableau.c*/
+
+pile **initialisation(int N)
+{
+  int i,j;
+  pile ** tableau;
+  tableau = (pile**) malloc(N*sizeof(pile*));
+  for (i=0 ; i<N ; i++){
+    tableau[i] =(pile*)malloc(N*sizeof(pile));
+    for (j=0 ; j<N ; j++)
+      tableau[i][j].sommet = NULL;
+  }
+  return tableau;
+}
+
+int est_vide(pile p)
+{
+  return p.sommet == NULL;
+}
+
+char *sommet(pile p)
+{
+  return p.sommet->chaine;
+} 
+
+
+void empiler(pile *p, char *elt)
+{
+  noeud* nouveau;
+  nouveau = (noeud*) malloc(sizeof(noeud));
+  nouveau->chaine = elt;
+  nouveau->next = p->sommet;
+  p->sommet = nouveau;
+}
+
+char *depiler(pile *p)
+{
+  if (! est_vide(*p)){
+    char *elt;
+    elt = p->sommet->chaine;
+    noeud* tmp = p->sommet;
+    p->sommet = p->sommet->next;
+    free(tmp);
+    return elt;
+  }
+  return NULL;
+}
+
+void reset(pile *p)
+{
+  while (p->sommet)
+    depiler(p);
+}
+
+void nettoyer(pile **tableau,int N)
+{
+  int i,j;
+  for (i=0 ; i<N ; i++){
+    for (j=0 ; j<N ; j++)
+      reset(&(tableau[i][j]));
+  }
+  for (i=0 ; i<N ; i++)
+    free(tableau[i]);
+  free(tableau);
+  
+}
+
diff --git a/src/tableau.h b/src/tableau.h
new file mode 100644
index 0000000000000000000000000000000000000000..52be8e28c7ebf911af1630537e5e6e98bf8d3457
--- /dev/null
+++ b/src/tableau.h
@@ -0,0 +1,70 @@
+
+#ifndef _TABLEAU
+#define _TABLEAU
+
+#include<stdio.h>
+#include<stdlib.h>
+#include<string.h>
+/*tableau.h*/
+
+typedef struct _noeud noeud;
+struct _noeud{
+  char *chaine;
+  noeud* next;
+};
+
+typedef struct _pile pile;
+struct _pile{
+  noeud* sommet;
+};
+
+/*
+ @require 
+ @assign alloue un tableau de taille N*N
+ @ensure renvoie un tableau alloué de taille N*N dont les cases sont des piles 
+*/
+pile **initialisation(int N);
+
+/*
+ @require
+ @assign
+ @ensure retourne 1 si la pile est vide 0 sinon
+*/
+int est_vide(pile p);
+
+/*
+ @require
+ @assign
+ @ensure retourne la valeur du sommet de la pile 
+*/
+char *sommet(pile p);
+
+/*
+ @
+ @
+ @
+*/
+void empiler(pile *p, char *elt);
+
+/*
+ * @require
+ * @assign
+ * @ensure enlève le sommet de la pile p et le retourne
+*/
+char *depiler(pile *p);
+
+/*
+ * @require
+ * @assign
+ * @ensure remet une pile à zero
+*/
+void reset(pile *p);
+
+/*
+ * @require
+ * @assign
+ * @ensure nettoie la mémoire allouée au tableau 
+*/
+void nettoyer(pile **tableau,int N);
+
+#endif 
diff --git a/stackchess b/stackchess
new file mode 100755
index 0000000000000000000000000000000000000000..e5a9c2526ef9436324f0ba3dde332545833abdbc
Binary files /dev/null and b/stackchess differ