From ab0c20711c7adc1eb10ea69df9268792406af73e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Dubard?= <loic.dubard@ensiie.fr> Date: Sun, 18 Nov 2018 12:33:48 +0100 Subject: [PATCH] ajout de debut_partie() qui place tous les pions --- Makefile | 4 ++-- obj/main.o | Bin 7448 -> 7096 bytes obj/tableau.o | Bin 8616 -> 10224 bytes src/action.c | 17 ++++++++++++----- src/main.c | 6 +----- src/tableau.c | 24 ++++++++++++++++++++++-- src/tableau.h | 17 ++++++++++++----- stackchess | Bin 26848 -> 28960 bytes 8 files changed, 49 insertions(+), 19 deletions(-) diff --git a/Makefile b/Makefile index c2f7e77..ad42cc2 100644 --- a/Makefile +++ b/Makefile @@ -1,13 +1,13 @@ CC=gcc -Wall -Wextra -ansi -g -std=c99 -stackchess : main.o tableau.o affichage.o action.o +stackchess : main.o tableau.o affichage.o action.o deplacement.o cd obj && $(CC) $^ -o ../$@ main.o : src/main.c $(CC) -c $< -o ./obj/$@ -affichage.o : src/affichage.c src/couleur.h +affichage.o : src/affichage.c src/affichage.h src/couleur.h $(CC) -c $< -o ./obj/$@ %.o: src/%.c src/%.h diff --git a/obj/main.o b/obj/main.o index 2a10c6ea5675f17db156b156f9cb01760037e95a..9a3d11526c522ad45c8a55eb46a92e765dafeb15 100644 GIT binary patch delta 528 zcmbPXwZnXZ22+LDM6CqQ?$AFT-L4-xuTA_@Gr677o#{No<_nB*%s_gw0jrMyKgUD{ z1_q{y@j}I^ISh;fn|oOO85z${4&)YR<evP6?Jhej^L17Z4w22T*>#zj7#JptbE|?3 zvEwdc<U9}53j(~8FY<^_zQE(b=mugjhJwjNFqr`+%R%Ji3A~m(DXB@NCGiD`MJ1W3 zlP~aEPZr=a@C=8T!@vThg@E|ae+Y<$iUTcXU<G1XD8CR&gVYNHF-(2?<V1dP#=gmp zeBxd+kkp7GsaXaUhnXn_<!?YzFNUQ4B*W%g{Bazh5VMjn<LuytsN<MiDPhjYKY62s zJ&^n;Vb96W2$4~nY$<8ZXgax2(w=Do-{eh_c8ms-KT6s&dQUc#vS-Q=om?bk$63t= zQO!Sjr<6I<4AIG-r0kfw*e4rF+c6eQE|j)s>g57PgV^K~(i)r-xFCuxCQsxMp3Ebo n!n8qjvXP7((+RH0MKX4r98gC!Ox`JD&UFIhT_D&1a<Lo$t)Pm7 delta 903 zcmdmCKErB)2Gb4kiCPKu9^I}VJh~Y?nh$Vz^qMjNfk)@@7hoDHgI%=wfB+8l%?BiK z$e^0k%?h+-;(~nsASZ?(KL!^k1{Xhu5GRJo{EY5Q7L1!C7~`0M^yD2ZJ_5oV6M>4E zCdLaDr{*v)ifk5P^=D+Xm>eiB&L}szhV8D@bynsQ4t-W3jz}N_Na;iP92`-b6WDc` zCr{u~0U5fDtB4U~s1{EeqvK>l9&yG1Fc||Tlfh)s<c~Z7?5Vj0nK`LNlYM!uSwO)t zxt-UrJ_5u70wy2^Iseap2uJ|3K>(yu2#8_gc_2X`fT@Qn|6c|X#!%k@6^E$@(I7AZ zLe*nvSOk%PTL5wt2&{ro80vRG#bFk3K=}u7s6U3HUYUVG2P$w2NrNzu4fFAb$&7sB zN#9YlF)(mL`HYMZ1}L0Fff%NXA1V%WmL^oaB$9eDB=ts&o2&TZI6yIZOU#T@fDfYn z!DLBsbH)l_vakn|6UFU0E1(9LPQJ(`Jo$~d3gg<zf)e&jANVH+N!T&2m^@L!p7HSH zi$I|hVv~g=?KnTPLCjK`94Tqe^h0d&BuP6aQI5%%B<&b~PZpH2XOiHae2`0Q@&hiG w$vILgAnqh7J0=0~$(Mjs0QY1eX*<pdybx2W!S?1zt8i+FLqs+}Tq4E;0E?5~=Kufz diff --git a/obj/tableau.o b/obj/tableau.o index b62cc85da7d295b0582d0ad5ee5b138195cc5bb1..5c5044a14e8f3a001d27defb681abd88e8f6ab97 100644 GIT binary patch literal 10224 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 T@gAGWpUsj!PmH+=N%#LRnd#z> delta 2342 zcmZ9OTWDNG7{_PMZj!Uf=CXUv?%8X0lih3*0<lp^OKojpir}_lQc%(dYXV*>HKMJ8 zt=3ksURqGse-#2nqfe{Bhh$&!WQnwW5Uq_=P`p4Ct4*zD@zNlo&Ybx+9%o>8X8zyr zyUe$TGrM|6dE}KIr<`KzW5`_%F`HR)+jbcIR;>85M$xDQ>xO)oG41AgA7dd&@h#DL zESmjI_2z=m>diqP!_Q{2X+`Y9k1#$MUVt6wYAX8GzBjUf?SZkTleEv;3z!Lv7-#(W zKG2{1jpT?W0x_esm&M#Pra6!P#_fE*a-eaRi&`*XMU6|mvMKmJ=g;9<a~_|xyk6Pg zddSDKxEju&(wV|c&X1keA>M$FU<6-T3En7IJ|7FZ%0sq|39BAA+c6aEFpk=*cp<Vc z>^30oelsRYVy$S7I`LMq`s*JxF8|NERao0R*1cSrrLT>tsMBnDtXD7@bx@85<F-c~ zF}yzS#hi4#65Q_~tsBK05T6p3V^&(OCd5aMh?-c9=td~s$4zXFJ1)0{?6tYZIe0X# zBJHB8i&~`fc#DYVi5S<22e3rM^<<gSh+n`HD$6jP^J$IPhyfy&Da*7*3}cdr-DIg~ z#3D*WJWH03HR1#o6INXI?H$VUgO|Y7gyUL!sY-(=w_8XjRWHefwR^2XoWodBMc+gI zo4o`MlmC+x;4ZIKXt!Z5sk(HA{P%0bVJs)D+hzUoiIU?bjaXAMJEiGwQ^a>Q{Y?y~ zRLz&k^PHE!RLXJl{Y2`wUaRo<mG-Ne{wMAK)^v`glscnH6(wk{J(0)2)9Q>1<hxNL z)@Z*?(@zq=Q`0YDGOcocM3(zCq7x+|Y>F|f5l>)|h#$#vRwMkV67euuzR`$fbhN8F zE>f>+C#jwNON<e5o``^W6UtE|KE*Rc)ZPg>jW~e0cJ+&%ru-vb0$;Z~UGAHMPP)fy z6`39*ulq2WagIEtSx3owTGPi#KS#O@E~SH%<%-4^N&iFR<D@6#%abu&%Y@=P)Ox)K zUr?@H=*T)pj%n6bvc9J26BK!dbh(x22QrTsXElDB;#|=9S%tITl^$I$OI$2!)QJhz zoE6$ES7OwDyiruM7Oz8H$9J!G-hi7rKjTG|x-!_1i-m^N#lt>VJ}iXYx$BJM?qw(L zvY!8zZF~>|c_(n3DlB3wpTVlQ?rzN4y)k+<tTm`W@~W0~m=xE&Q^oog8N;~PfDiKp zey1Do9{F5|u>qxAhL2((=k&HENmG-1^UF|rxCh+`FH?jSEafx&UQ`RQ9tu#)E9;RB z(E~h=YL^o@*rf7=5h`T(QK=axT2L$$_=|4A<raDSi-xrEH$;=2K)FSEFf0j=X<2k+ voN|`QBy+YR-Q5={%WGVW9_pQJdNc0s?h9OS|I;wG52fx+CjBES%TD|Y!R;gm diff --git a/src/action.c b/src/action.c index 286d76a..42ab26c 100644 --- a/src/action.c +++ b/src/action.c @@ -2,8 +2,8 @@ #include<stdlib.h> #include"tableau.h" #include"affichage.h" - - +#include"deplacement.h" +/*action.c*/ @@ -23,11 +23,18 @@ void realiser(char action,pile **tableau,int N,char *cases) break; case 'd' : printf("d"); + char couleur='N'; + deplacement(tableau,N,cases,couleur); break; case 'a' : - nettoyer(tableau,N); - printf("\n Vous allez quitter le jeu"); - exit(0); + printf("\n Voulez vous quitter le jeu (y|n)? \n"); + char c; + scanf("%1s",&c); + if (c == 'y'){ + nettoyer(tableau,N); + printf("\n Vous allez quitter le jeu"); + exit(0); + } break; default : printf("Spécial"); diff --git a/src/main.c b/src/main.c index 8893657..d1186ec 100644 --- a/src/main.c +++ b/src/main.c @@ -11,11 +11,7 @@ int main(int argc, char **argv) N=strtol(argv[1],NULL,10); } pile **tableau=initialisation(N); - empiler(tableau[0]+1,"RB"); - empiler(tableau[0], "RN"); - empiler(tableau[0]+2,"DB"); - empiler(tableau[0]+3,"DN"); - empiler(tableau[0],"TB"); + debut_partie(tableau,N); char action; char sel[4]="\0\0\0\0"; while (1){ diff --git a/src/tableau.c b/src/tableau.c index 5c47002..699b688 100644 --- a/src/tableau.c +++ b/src/tableau.c @@ -60,13 +60,33 @@ void reset(pile *p) void nettoyer(pile **tableau,int N) { int i,j; - for (i=0 ; i<N ; i++){ + 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); } +void debut_partie(pile **tableau, int N) +{ + int j; + empiler(tableau[0]+N/2-1,"DN"); + empiler(tableau[0]+N/2,"RN"); + empiler(tableau[N-1]+N/2-1,"DB"); + empiler(tableau[N-1]+N/2,"RB"); + for (j=0 ; j<N ; j++){ + empiler(tableau[1]+j,"PN"); + empiler(tableau[N-2]+j,"PB"); + if (j != N/2-1 && j != N/2){ + if (j%2 == 0){ + empiler(tableau[0]+j,"FN"); + empiler(tableau[N-1]+j,"FB"); + } else { + empiler(tableau[0]+j,"TN"); + empiler(tableau[N-1]+j,"TB"); + } + } + } +} diff --git a/src/tableau.h b/src/tableau.h index 52be8e2..8194227 100644 --- a/src/tableau.h +++ b/src/tableau.h @@ -40,14 +40,14 @@ int est_vide(pile p); char *sommet(pile p); /* - @ - @ - @ + @require elt doit être de taille 2 + @assign alloue un nouveau pointeur vers une structure noeud + @empile empile un pion sur une case du plateau */ void empiler(pile *p, char *elt); /* - * @require + * @require la pile à dépiler doit être non vide * @assign * @ensure enlève le sommet de la pile p et le retourne */ @@ -61,10 +61,17 @@ char *depiler(pile *p); void reset(pile *p); /* - * @require + * @require le tableau est supposé être passé par la fonction initialisation() * @assign * @ensure nettoie la mémoire allouée au tableau */ void nettoyer(pile **tableau,int N); +/* + * @require + * @assign + * @ensure posent les pions sur le plateau en debut de partie + */ +void debut_partie(pile **tableau,int N); + #endif diff --git a/stackchess b/stackchess index 45f0baf8e2d22ac5db59ee1dd54bef98df9b5a8d..0558c9da4e095c2bca2164b4e393676d85322182 100755 GIT binary patch delta 5456 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 delta 4080 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 Ks1*WzKK6h1>1J5~ -- GitLab