From 3e8da05d1ee9b1d042aa749e1e06d9da2421ab6e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Lo=C3=AFc=20Dubard?= <loic.dubard@ensiie.fr>
Date: Tue, 11 Dec 2018 19:28:19 +0100
Subject: [PATCH] terminer test cavalier + test de fin de partie

---
 obj/main.o        | Bin 7000 -> 7168 bytes
 obj/tableau.o     | Bin 11376 -> 12136 bytes
 src/deplacement.c |  19 ++++++++-----------
 src/deplacement.h |   2 +-
 src/main.c        |   3 ++-
 src/tableau.c     |  13 +++++++++++++
 src/tableau.h     |   7 +++++++
 stackchess        | Bin 37232 -> 37768 bytes
 8 files changed, 31 insertions(+), 13 deletions(-)

diff --git a/obj/main.o b/obj/main.o
index 982deb19e71fb45fd96ce0099a364ee379963600..002e6f66c9d75b1012b84d6576ad88725219043c 100644
GIT binary patch
delta 623
zcmXw!O=uHQ5Xawae97BocgaV|Za3g5f<5VaNOKUjB9(w&c!=n!EoH^fQcX=kp|n!4
zP~xG>cofBR4>qia`hlc)kY0p(5RdiLf(T76R;cK_-OV57zs&sR4gdXKd0bsT4c%a5
zMfq6|HtJ{F^@H}+<63+CaP3QN?ehU6J?XZvU5|&~2E#2$c0Qp3<IoRla3i%W__Q1*
z>L*`#{yW83PIe$nxuFDClC~s~5{%`qG0-wGn=M4EruH{tlX06BLG*GWZga`<t^5Oj
zmO)-r6c*b2GC&`<H48W{rgy->OPP};HQ@Y=crO;XE`D%Toad?QToVNjx5LFuE`{q_
zIUl9HU}jg9i$+@crDp`)al$>VCQpv&ui-Abx&;fktuI^mr{-G?f8tJKuHmyezty_;
z$e(8nJ!1-%@ReZ=ugaewouHDDkN?GbhPy;xNJNr!h-yGTBAC{xuM&|YEm95Wz8sR|
z+zJhIMo_d}t$<I9Wo^rd7!!c+iWNAAy`o3%TGE^3H?c$B#UA-2y0(Xhw!nvW6*jSB
zd+J6yKA_?sdldH29roZ2HpyRNhx`Nf$h+t|9vorQ@zf(Neldn`ol&)#1Xzk9>7}xo
LmElR7Nl5)aGMA<U

delta 505
zcmYL^&r1S96vyX{uDfpTriSj0Leiz|Rvpya8W9La)FEh3SrG_%iy|oK2N860eW$>S
z$DmMHf}lF&ss01KcJ0!wOHs2sN)P5c^O^5^Z{D01dbxTQOlSJsxm%+jH#i52&~*=C
zHE<$J+vGpGgCjJ*0))go0$KMmsIxS{v}aML7+)q3mW5Xv^HVkT$M-4%M-|7f+z=QY
zB(KN!c4`D-N{$k@B$WZW_>we$;%(>+7#_&urbK8E8lEVRzV7?_?zZJv0H4(<%^!7M
zk6zLREyU|HZgiyNwX!2^ENE4H&?@ZM8;b|!OXBPMSHuO*>IQ3g7LTE83M5V3)D7)v
zKtaAI+<Sdj;ms$Eyjs+R(<8WL<R}IHdJ;QEc6j_Wvivj5v|ti#t|ne{oxwiWGBRd?
zf;O|lM<LNDge{hb0`|FchAd@44egXguT;@Fm4!O?`Sl92v=x3;MOhR#)A?{OBB+Wj
MPSu2<4xcph2MY~o%m4rY

diff --git a/obj/tableau.o b/obj/tableau.o
index 6656502d35d47551951fdca5d99e6a56502da20d..71278f037ff174ed6f999b3f36e0ef37428143f3 100644
GIT binary patch
delta 3058
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
T^Ed=bak>1i-&9@%Mfd&>wLY$h

delta 2310
zcmZ9OduUr#9LLYOX|j9sYHnUPCtH(dYaUJ7be(I$HqF{7xXdv&e03;u;H#BR-Bbt&
zYga_*L}~bK>L92San3qyiGzwDU2zYmL#Kbt7n3S<Lj>*gkAd@XPVVmxIR}z+e&5gU
z{2nLCxw*3Q_rb}GvN}DJ9ks)5M{L!kgOC;?hDyb|TfF^$4BH#09Q`(U-Wl=F+6d8~
zBy?}6z*kCb&=1qj91X$`PFD8tF#1yuj}ST%e}PBfSl`Nx^n*>~E`69AdEuqhHtCOX
zqt7(@i9;1WJ}A1{><@@Au*21v4~jBqg%@a!0mYnY{V4bG3xigoVl7g^v@7aysK>eK
zP(^t`_{_zEs@-zEC49s6nk&tVZg;c5T8>3W1;5y+)P_h1wz%8e2T|_~9dChW+y(Cb
zo}2kEq1+xc-Fe!J?%1fWSxa=8Xxkb(E@<7$I}kad0rS*`i0L1)i>|F<;DXjm=pVY_
z9}$eIs%XF(Q@EgY9iH~&m7^{2mgjQYD`iFlJfEG|)b*|nu63?TK;irST=2p>-maKV
z{mc3zFPna$Jl)7_UehzpDgn6ay<Zu&!;%qJ{#6=7t=AR!#Gi#f{HaDNkhL|ohQ}$~
zl#Mjh$QufL6P+?Y9|kkajmGrySq09<GW0cAiWzJd))>Os$!GDp8xrx`+0Ce0vqcAC
zf83~yHNTF8Y?k(3M}51bpFn+3(htEx++b@^-7V2p(Ay0*j^C_(60O1jr>#g2OY{lY
z({5CDpxTh=Z&=Tqq(6uDc}f2qF7R9zao1&u-T^dWz*t<>74)!9>v8B!^z>fE8oMO=
zI_m2sJqfjh!Jfq|_ek^roaEHbe?(&JmFUN?l<1);NUSv2&lvw*$>%(5=Tt-Wv_x-(
z{hW5=-k&787G^lzfb<`UmSKU@3eqUf)@hsueU-r$aZgdA>tKM>d8At;nua}`da&z9
zB)Scba9YN_Qxbg}E^yk3drwJp4bTpQy^rc8iLQj+4x{p?dD!HdME^qlZ%JQ7UBjH#
z2?U_l(L;~G$qs`O__m{my@WOIlsvzOMA8^u!LKwiUX<vsrc6GR^dQzThq?$Zq&d8s
zf;e0CL@;|CXo}wm60KpDN1-=mjP8>u=K4U=PoVx0>Q)VJVy>?w{~G#h*sE3BVbp!5
z4rfw2>yvz{7_%Ric!dukwKDc0JtXal;_1{S|F5y%FC_nMSjmr)ZhdyYn0l62iRUp;
zt9ku4uT|03cNi!NGiiful;~|()@E2p8}Mq{M{5l&b1!XFJAG7K`v<ZGXO)?;zf|B{
zwxAqqJ`5m|%UH|7Tt+*Fg~nhaS9G31>!1V9<qFPCE6fO2RB(0`l>6LJ?kXvZ9vJ7-
z>Lko}m9((e^s#}~T~u}@q1;{47(O-cgb6N=1Yy3rq)Y_G(+DE@j5gW)Pe8~RRPsfw
lnlwYGFu^Tf*tBNhQ*NDYJ~IiK0<EX$97~yOn(z)|{{b6*6bk?V

diff --git a/src/deplacement.c b/src/deplacement.c
index 5173933..e38f926 100644
--- a/src/deplacement.c
+++ b/src/deplacement.c
@@ -78,7 +78,7 @@ void case_destination(pile **tableau,int N,int i_src,int j_src, int *i_dest,int
         tmp=tmp->next;
       }
       if (valide){
-        effectuer(tableau,i_src,j_src,*i_dest,*j_dest,nb);
+        effectuer(tableau,i_src,j_src,*i_dest,*j_dest,nb,*tour);
         *tour=*tour+1;
       } else {
         printf("Déplacement illégal pour au moins un pion de la pile");
@@ -211,26 +211,23 @@ int fous(pile** tableau,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){
-      return 1;
-    }
-  } else if (j_dest==j_src+2 || j_dest==j_src-2){
-    if (i_dest==i_src+1 || i_dest==i_src-1){
-      return 1;
-    }
+  if ((i_dest==i_src+2 && longueur_pile(tableau[i_src+1][j_src])==0 && longueur_pile(tableau[i_src+2][j_src])==0) || (i_dest==i_src-2 && longueur_pile(tableau[i_src-1][j_src])==0 && longueur_pile(tableau[i_src-1][j_src])==0)){
+    if (j_dest==j_src+1 || j_dest==j_src-1) return 1;
+  } else if ((j_dest==j_src+2 && longueur_pile(tableau[i_src][j_src+1])==0 && longueur_pile(tableau[i_src][j_src+2])==0) || (j_dest==j_src-2 && longueur_pile(tableau[i_src][j_src-1])==0 && longueur_pile(tableau[i_src][j_src-2])==0)){
+    if (i_dest==i_src+1 || i_dest==i_src-1) return 1;
   }
   return 0;
 }
 
-void effectuer(pile **tableau,int i_src,int j_src, int i_dest,int j_dest,int nb)
+void effectuer(pile **tableau,int i_src,int j_src, int i_dest,int j_dest,int nb,int tour)
 {
   pile p;
   int i;
   for (i=0 ; i<nb ; i++){
     empiler(&p,depiler(tableau[i_src]+j_src));
   }
-  reset(tableau[i_dest]+j_dest);
+  if (sommet(tableau[i_dest][j_dest])[0]=="BN"[tour%2+1])
+    reset(tableau[i_dest]+j_dest);
   for (i=0 ; i<nb ; i++){
     empiler(tableau[i_dest]+j_dest,depiler(&p));
   }
diff --git a/src/deplacement.h b/src/deplacement.h
index 2e021c4..00349c8 100644
--- a/src/deplacement.h
+++ b/src/deplacement.h
@@ -71,5 +71,5 @@ int cavaliers(pile ** tableau,int i_src,int j_src,int i_dest,int j_dest);
  * @assign
  * @ensure : effectue le déplacement d'une pile de pion d'une case vers une autre
  */
-void effectuer(pile **tableau,int i_src, int j_src,int i_dest, int j_dest,int nb);
+void effectuer(pile **tableau,int i_src, int j_src,int i_dest, int j_dest,int nb,int tour);
 #endif
diff --git a/src/main.c b/src/main.c
index 248cf52..d8b4aa8 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1,6 +1,7 @@
 #include"tableau.h"
 #include"affichage.h"
 #include"action.h"
+#include"deplacement.h"
 /*main.c*/
 
 
@@ -15,7 +16,7 @@ int main(int argc, char **argv)
   char action;
   int tour=0;
   char sel[4]="\0\0\0\0";
-  while (1){ 
+  while (! partie_finie(tableau, N,tour)){ 
     affichage(tableau,N,sel,tour,"Entrez une action (c,d,a) >");
     scanf("%c",&action);
     realiser(action,tableau,N,sel,&tour);
diff --git a/src/tableau.c b/src/tableau.c
index a7eef0b..3c308f0 100644
--- a/src/tableau.c
+++ b/src/tableau.c
@@ -122,3 +122,16 @@ int nb_de_pion(pile p,char couleur)
   }
   return i;
 }
+
+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");
+    return 1;
+  }
+  return 0;
+}
\ No newline at end of file
diff --git a/src/tableau.h b/src/tableau.h
index 1a642d9..8599360 100644
--- a/src/tableau.h
+++ b/src/tableau.h
@@ -94,5 +94,12 @@ void determiner_indices(char *sel,int N,int *i,int *j);
  * @ensure retourne le nombre de pion d'une couleur donnée placés sur le haut de la pile/case
  */
 int nb_de_pion(pile p,char couleur);
+
+/*
+ * @require
+ * @assign
+ * @ensure retourne 1 si la partie est finie, 0 sinon
+ */
+int partie_finie(pile ** tableau, int N,int tour);
 #endif 
 
diff --git a/stackchess b/stackchess
index 0816eaf67adcc40d16e83698ecf7e762bb6316e5..ef37a891f0b869551dd442a5dfcbdc3150025051 100755
GIT binary patch
delta 8011
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
Lrn#W7^{)Q|(h^%R

delta 6754
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

-- 
GitLab