diff --git a/Makefile b/Makefile
index f12413b7babbc607f31f8b022061fce84965c666..fc9e6f9ec86610c5a4e52ec07e3fe82f9cb7d24b 100644
--- a/Makefile
+++ b/Makefile
@@ -30,4 +30,4 @@ stackchess32.exe :  main32.o tableau32.o affichage32.o action32.o deplacement32.
 	cd obj && $(WIN32) $(CFLAGS) $^ -o ../build/$@
 
 stackchess64.exe : main64.o tableau64.o affichage64.o action64.o deplacement64.o
-	cd obj && $(WIN64) $(CFLAGS)$^ -o ../build/$@
\ No newline at end of file
+	cd obj && $(WIN64) $(CFLAGS) $^ -o ../build/$@
\ No newline at end of file
diff --git a/build/stackchess32.exe b/build/stackchess32.exe
new file mode 100755
index 0000000000000000000000000000000000000000..e24c7b73002cfbebfc9aae4cf6c428f50e527d33
Binary files /dev/null and b/build/stackchess32.exe differ
diff --git a/build/stackchess64.exe b/build/stackchess64.exe
new file mode 100755
index 0000000000000000000000000000000000000000..4fdb453c5d01d6f2104e8340546aae56aa23e60d
Binary files /dev/null and b/build/stackchess64.exe differ
diff --git a/obj/affichage.o b/obj/affichage.o
index 43f031287aee45fca6cab0f46347031313b4d86d..4fa5a7f21021d8e68665c675ceef988810e6831c 100644
Binary files a/obj/affichage.o and b/obj/affichage.o differ
diff --git a/obj/tableau.o b/obj/tableau.o
index 9dea15b060e0c76b8877c7f9c61179e67598b2ac..eded87a0f13d578fa55a07915528ed4f9aaa9f33 100644
Binary files a/obj/tableau.o and b/obj/tableau.o differ
diff --git a/src/action.c b/src/action.c
index e81d3ae1482fdd1365a6be5c9f87e13eb2170578..4f5ce5b1838925ec3d3de9b85e0d40c045e69e1a 100644
--- a/src/action.c
+++ b/src/action.c
@@ -29,7 +29,7 @@ void realiser(char action,pile **tableau,int N,char *cases,int *tour)
       scanf("%1s",&c);
       if (c == 'y'){
         printf("\n Vous allez quitter le jeu");
-        printf("La partie est finie\n les %c ont gagné !","BN"[*tour%2+1]);
+        printf("La partie est finie\n les %c ont gagné !","BN"[(*tour+1)%2]);
         nettoyer(tableau,N);
         exit(0);
       }
diff --git a/src/affichage.c b/src/affichage.c
index 023f94bf8d473cdd3caa9a6a5e69dad952174c5c..b4d4bd9872f6653f8f37e7fed8c976d1a7a4a47b 100644
--- a/src/affichage.c
+++ b/src/affichage.c
@@ -83,8 +83,8 @@ void affichage(pile **tableau,int N, char *sel,int tour,char *message)
 {
   affichetableau_pile_cote(tableau,N,sel);
   if (tour%2 == 0)
-    printf("\n [\x1B[1;5;32m%sGRIS" RESET "] %s",NOIR,message);
+    printf("\n [\x1B[1;5;32m%sBLANCS" RESET "] %s",NOIR,message);
   else
-    printf("\n [\x1B[1;5;31m%sROUGES" RESET "] %s",NOIR,message);
+    printf("\n [\x1B[1;5;31m%sNOIRS" RESET "] %s",NOIR,message);
 }
 
diff --git a/src/deplacement.c b/src/deplacement.c
index 245691d64aeeb92e364a823fcc2e1c1e50407d9a..f5ba5a3d87bd6d548b5bdada0dfd546c4be351ca 100644
--- a/src/deplacement.c
+++ b/src/deplacement.c
@@ -47,9 +47,10 @@ void case_destination(pile **tableau,int N,int i_src,int j_src, int *i_dest,int
   scanf("%3s",dest);
   if (dest[1] != '\0'){
     determiner_indices(dest,N,i_dest,j_dest);
-    if (*i_dest>=0 && *i_dest<N && *j_dest>=0 && *j_dest<N && nb>nb_de_pion(tableau[*i_dest][*j_dest],"BN"[*tour%2+1])){
+    if (*i_dest>=0 && *i_dest<N && *j_dest>=0 && *j_dest<N && nb>nb_de_pion(tableau[*i_dest][*j_dest],"BN"[(*tour+1)%2])){
       noeud* tmp=tableau[i_src][j_src].sommet;
       int valide,i;
+      
       for (i=0 ; i<nb ; i++){
         switch (tmp->chaine[0]){
           case 'P' :
@@ -77,6 +78,9 @@ void case_destination(pile **tableau,int N,int i_src,int j_src, int *i_dest,int
           break;
         tmp=tmp->next;
       }
+      if (nb_de_cavaliers(tableau[i_src][j_src],"BN"[*tour%2],nb)*2>=nb){
+        valide=cavaliers(tableau,i_src,j_src,*i_dest,*j_dest);
+      }
       if (valide){
         effectuer(tableau,N,i_src,j_src,*i_dest,*j_dest,nb,*tour);
         *tour=*tour+1;
@@ -85,7 +89,7 @@ void case_destination(pile **tableau,int N,int i_src,int j_src, int *i_dest,int
       }
     } else if (*i_dest>=0 && *i_dest<N && *j_dest>=0) {
       printf("Coordonnées invalides pour la case de destination");
-    } else if (*j_dest<N && nb>nb_de_pion(tableau[*i_dest][*j_dest],"BN"[*tour%2+1])){
+    } else if (*j_dest<N && nb>nb_de_pion(tableau[*i_dest][*j_dest],"BN"[(*tour+1)%2])){
       printf("Le nombre de pions à déplacer doit être strictement plus grand que le nombre de pions adverses sur la case de destination");
     }
   }
@@ -99,7 +103,7 @@ int pions(pile **tableau,int N,int i_src,int j_src,int i_dest,int j_dest,int tou
   } else {
     k=-1;
   }
-  if (nb_de_pion(tableau[i_dest][j_dest],"BN"[tour%2+1])==0 && j_dest==j_src){
+  if (nb_de_pion(tableau[i_dest][j_dest],"BN"[(tour+1)%2])==0 && j_dest==j_src){
     if (i_dest==i_src+k)
       return 1;
     if (i_dest==i_src+k+k && longueur_pile(tableau[i_src+k][j_src])==0){
@@ -226,11 +230,13 @@ void effectuer(pile **tableau,int N,int i_src,int j_src, int i_dest,int j_dest,i
   for (i=0 ; i<nb ; i++){
     empiler(&p,depiler(tableau[i_src]+j_src));
   }
-  if (sommet(tableau[i_dest][j_dest])[0]=="BN"[tour%2+1])
+  if (sommet(tableau[i_dest][j_dest])[0]=="BN"[(tour+1)%2])
+    //réalise une attaque
     reset(tableau[i_dest]+j_dest);
   for (i=0 ; i<nb ; i++){
     empiler(tableau[i_dest]+j_dest,depiler(&p));
     if (sommet(tableau[i_dest][j_dest])[0]=='P' && (i_dest==N-1 || i_dest==0)) {
+      //transforme les pions en dames
       depiler(tableau[i_dest]+j_dest);
       if (tour%2==0) empiler(tableau[i_dest]+j_dest,"DB");
       else empiler(tableau[i_dest]+j_dest,"DN");
diff --git a/src/tableau.c b/src/tableau.c
index eac028232b48ce06b1235ba3e172bfdddf828d1c..4bef19a06c748c15054c6a133097b58075dee404 100644
--- a/src/tableau.c
+++ b/src/tableau.c
@@ -116,23 +116,68 @@ int nb_de_pion(pile p,char couleur)
 {
   int i=0;
   noeud* tmp=p.sommet;
-  while (tmp != NULL && tmp->chaine[1] == couleur){
+  while (tmp != NULL){
     /*termine car la pile est de longueur finie*/
-    i++;
+    if (tmp->chaine[1]==couleur) i++;
     tmp=tmp->next;
   }
   return i;
 }
 
+int nb_de_cavaliers(pile p,char couleur,int nb)
+{
+  int i,k=0;
+  for (i=0 ; i<nb ; i++){
+    if (p.sommet->chaine[0] == 'C' && p.sommet->chaine[1]==couleur) k++;
+    p.sommet=p.sommet->next;
+  }
+  return k;
+}
+
 int partie_finie(pile ** tableau,int N,int tour)
 {
-  int i,j,k=0;
-  for (i=0 ; i<N ; i++)
-    for (j=0; j<N ; j++)
-      if (nb_de_pion(tableau[i][j],"BN"[tour%2+1])==0) k++;
-  if (k==2*N){
-    printf("La partie est finie\n les %c ont gagné !","BN"[tour%2]);
+  tour=tour-1;
+  int i,j,k=0,l=0,toursb=0,toursn=0,fousb=0,fousn=0;
+  for (i=0 ; i<N ; i++){
+    for (j=0; j<N ; j++){
+      k=k+nb_de_pion(tableau[i][j],"BN"[(tour+1)%2]);
+      l=l+nb_de_pion(tableau[i][j],"BN"[tour%2]);
+    }  
+  }
+  
+  if (k==0){
+    /*le cas où on a pris toutes les pièces de l'adversaire*/
+    printf("La partie est finie\n les %c ont gagné !\n","BN"[tour%2]);
+    return 1;
+  
+  } else if (k+l==2){
+    /*le cas où il ne reste que 2 pièces sur le plateau*/
+    printf("On a un cas d'égalité !");
     return 1;
   }
+  noeud* tmp;
+  if (k+l==4){
+    /*le cas il reste à chacun un fou et une tour*/
+    for (i=0 ; i<N ; i++){
+      for (j=0 ; j<N ; j++){
+        tmp=tableau[i][j].sommet;
+        while (tmp != NULL){
+          if (tmp->chaine[0]=='T'){
+            if (tmp->chaine[1]=='B') toursb+=1;
+            else toursn+=1;
+          }
+          if (tmp->chaine[0]=='F'){
+            if (tmp->chaine[1]=='B') fousb+=1;
+            else fousn+=1;
+          }
+          tmp=tmp->next;
+        }
+      }
+    }
+    if (toursb==1 && toursn==1 && fousb==1 && fousn==1){
+      printf("On a un cas d'égalité !");
+      return 1;
+    }
+  }
   return 0;
 }
\ No newline at end of file
diff --git a/src/tableau.h b/src/tableau.h
index 85993603595529c7573f9a9361df1aac124ed741..e2c0c965b85abe7e404b7f357544cf9e99cb4925 100644
--- a/src/tableau.h
+++ b/src/tableau.h
@@ -95,6 +95,13 @@ void determiner_indices(char *sel,int N,int *i,int *j);
  */
 int nb_de_pion(pile p,char couleur);
 
+/*
+ * @require
+ * @assign
+ * @ensure retourne le nombre de cavalier d'une couleur donnée dans la pile
+ */
+int nb_de_cavaliers(pile p,char couleur,int nb);
+
 /*
  * @require
  * @assign