From f3cd7fc2bb889a2d807097755541ffc0fdd0cd1a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Lo=C3=AFc=20Dubard?= <loic.dubard@ensiie.fr>
Date: Sun, 9 Dec 2018 13:02:55 +0100
Subject: [PATCH] =?UTF-8?q?sauter=20par-dessus=20des=20pi=C3=A8ces=20est?=
 =?UTF-8?q?=20maintenant=20impossible?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/deplacement.c |  89 +++++++++++++++++++++++++++++++++++++++-------
 src/deplacement.h |   8 ++---
 stackchess        | Bin 36760 -> 37128 bytes
 3 files changed, 80 insertions(+), 17 deletions(-)

diff --git a/src/deplacement.c b/src/deplacement.c
index aaf4e63..cb02450 100644
--- a/src/deplacement.c
+++ b/src/deplacement.c
@@ -59,16 +59,16 @@ void case_destination(pile **tableau,int N,int i_src,int j_src, int *i_dest,int
             valide=roi(i_src,j_src,*i_dest,*j_dest);
             break;
           case 'D' :
-            valide=dames(i_src,j_src,*i_dest,*j_dest);
+            valide=dames(tableau,i_src,j_src,*i_dest,*j_dest);
             break;
           case 'T' :
-            valide=tours(i_src,j_src,*i_dest,*j_dest);
+            valide=tours(tableau,i_src,j_src,*i_dest,*j_dest);
             break;
           case 'F' :
-            valide=fous(i_src,j_src,*i_dest,*j_dest);
+            valide=fous(tableau,i_src,j_src,*i_dest,*j_dest);
             break;
           case 'C' :
-            valide=cavaliers(i_src,j_src,*i_dest,*j_dest);
+            valide=cavaliers(tableau,i_src,j_src,*i_dest,*j_dest);
             break;
           default :
             valide=0;
@@ -101,17 +101,22 @@ int pions(pile **tableau,int i_src,int j_src,int i_dest,int j_dest,int tour)
   }
   if (nb_de_pion(tableau[i_dest][j_dest],"BN"[tour%2+1])==0 && i_dest==i_src+k && j_dest==j_src){
     return 1;
-  } else if (i_dest==i_src+k && (j_dest==j_src+1 && j_dest==j_src-1)){
+  } else if (i_dest==i_src+k && (j_dest==j_src+1 || j_dest==j_src-1)){
     return 1;
   }
   return 0;
 }
 
-int dames(int i_src,int j_src,int i_dest,int j_dest)
+int dames(pile ** tableau,int i_src,int j_src,int i_dest,int j_dest)
 {
-  if ((j_dest==j_src && i_dest!=i_src) || (i_dest==i_src && j_dest!=j_src) || (abs(i_dest-i_src)==abs(j_dest-j_src) && i_dest!=i_src)){
-    return 1;
+  if ((j_dest==j_src && i_dest!=i_src) || (i_dest==i_src && j_dest!=j_src)){
+    return tours(tableau,i_src,j_src,i_dest,j_dest);
+  }
+  
+  if (abs(i_dest-i_src)==abs(j_dest-j_src) && i_dest!=i_src){
+    return fous(tableau,i_src,j_src,i_dest,j_dest);
   }
+  
   return 0;
 }
 
@@ -125,23 +130,81 @@ int roi(int i_src,int j_src,int i_dest,int j_dest)
       return 1;
   return 0;
 }
-int tours(int i_src,int j_src,int i_dest,int j_dest)
+int tours(pile **tableau,int i_src,int j_src,int i_dest,int j_dest)
 {
-  if ((i_dest == i_src && j_dest!=j_src) || (j_dest ==j_src && i_dest!=i_src)){
+  int k;
+  if (j_dest==j_src && i_dest!=i_src){
+    for (k=1;k<abs(i_dest-i_src);k++){
+      if (i_dest>i_src){
+        if (longueur_pile(tableau[i_src+k][j_src])!=0){
+          return 0;
+          break;
+        }
+      } else {
+        if (longueur_pile(tableau[i_src-k][j_src])!=0){
+          return 0;
+          break;
+        }
+      }
+    }
+    return 1;
+  }
+  if (i_dest==i_src && j_dest!=j_src){
+    for (k=1;k<abs(j_dest-j_src);k++){
+      if (j_dest>j_src){
+        if (longueur_pile(tableau[i_src][j_src+k])!=0){
+          return 0;
+          break;
+        }
+      } else {
+        if (longueur_pile(tableau[i_src][j_src-k])!=0){
+          return 0;
+          break;
+        }
+      }
+    }
     return 1;
   }
   return 0;
 }
 
-int fous(int i_src,int j_src,int i_dest, int j_dest)
+int fous(pile** tableau,int i_src,int j_src,int i_dest, int j_dest)
 {
-  if (abs(j_dest-j_src)==abs(i_dest-i_src) && i_dest!=i_src){
+  int k;
+  if (abs(i_dest-i_src)==abs(j_dest-j_src) && i_dest!=i_src){
+    for (k=1;k<abs(i_dest-i_src);k++){
+      if (j_dest>j_src){
+        if (i_dest>i_src){
+          if (longueur_pile(tableau[i_src+k][j_src+k])!=0){
+            return 0;
+            break;
+          }
+        } else {
+          if (longueur_pile(tableau[i_src-k][j_src+k])!=0){
+            return 0;
+            break;
+          }
+        }
+      } else {
+        if (i_dest>i_src){
+          if (longueur_pile(tableau[i_src+k][j_src-k])!=0){
+            return 0;
+            break;
+          }
+        } else {
+          if (longueur_pile(tableau[i_src-k][j_src-k])!=0){
+            return 0;
+            break;
+          }
+        }
+      }
+    }
     return 1;
   }
   return 0;
 }
 
-int cavaliers(int i_src,int j_src,int i_dest,int j_dest)
+int cavaliers(pile **tableau,int i_src,int j_src,int i_dest,int j_dest)
 {
   if (i_dest==i_src+2 || i_dest==i_src-2){
     if (j_dest==j_src+1 || j_dest==j_src-1){
diff --git a/src/deplacement.h b/src/deplacement.h
index d162db6..953bf50 100644
--- a/src/deplacement.h
+++ b/src/deplacement.h
@@ -44,28 +44,28 @@ int roi(int i_src,int j_src,int i_dest,int j_dest);
  * @assign
  * @ensure : verifie que le déplacement est valide pour une dame
  */
-int dames(int i_src,int j_src,int i_dest,int j_dest);
+int dames(pile **tableau,int i_src,int j_src,int i_dest,int j_dest);
 
 /*
  * @require
  * @assign
  * @ensure : verifie que le déplacement est valide pour une tour
  */
-int tours(int i_src,int j_src,int i_dest,int j_dest);
+int tours(pile **tableau,int i_src,int j_src,int i_dest,int j_dest);
 
 /*
  * @require
  * @assign
  * @ensure : verifie que le déplacement est valide pour un fou
  */
-int fous(int i_src,int j_src,int i_dest,int j_dest);
+int fous(pile **tableau,int i_src,int j_src,int i_dest,int j_dest);
 
 /*
  * @require
  * @assign
  * @ensure : verifie que le déplacement est valide pour un cavalier
  */
-int cavaliers(int i_src,int j_src,int i_dest,int j_dest);
+int cavaliers(pile ** tableau,int i_src,int j_src,int i_dest,int j_dest);
 /*
  * @require
  * @assign
diff --git a/stackchess b/stackchess
index f9fdf53180ba9dec72463d0f5e66f3cd0f3ab6fc..d5d40f291292aa9666dbdd2d91ea6ff9493a81c1 100755
GIT binary patch
delta 3629
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

delta 2453
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
Cuh(Ay

-- 
GitLab