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