From d9222e05337f525e6838c4810e7d9d1e33a6d9cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Dubard?= <loic.dubard@ensiie.fr> Date: Fri, 9 Nov 2018 17:33:36 +0100 Subject: [PATCH] =?UTF-8?q?r=C3=A9organisation=20du=20projet=20et=20cr?= =?UTF-8?q?=C3=A9ation=20Makefile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 11 ++++++ obj/affichage.o | Bin 0 -> 2288 bytes obj/main.o | Bin 0 -> 1872 bytes obj/tableau.o | Bin 0 -> 2728 bytes src/affichage.c | 26 ++++++++++++++ src/affichage.h | 14 ++++++++ stackchess.c => src/main.c | 6 ++-- src/tableau.c | 72 +++++++++++++++++++++++++++++++++++++ src/tableau.h | 70 ++++++++++++++++++++++++++++++++++++ stackchess | Bin 0 -> 17192 bytes 10 files changed, 197 insertions(+), 2 deletions(-) create mode 100644 Makefile create mode 100644 obj/affichage.o create mode 100644 obj/main.o create mode 100644 obj/tableau.o create mode 100644 src/affichage.c create mode 100644 src/affichage.h rename stackchess.c => src/main.c (76%) create mode 100644 src/tableau.c create mode 100644 src/tableau.h create mode 100755 stackchess diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..d7a105c --- /dev/null +++ b/Makefile @@ -0,0 +1,11 @@ +CC=gcc -Wall -Wextra -ansi + +stackchess : main.o tableau.o affichage.o + cd obj && $(CC) $^ -o ../$@ + +main.o : src/main.c + $(CC) -c $< -o ./obj/$@ + +%.o: src/%.c src/%.h + $(CC) -c $< -o obj/$@ + diff --git a/obj/affichage.o b/obj/affichage.o new file mode 100644 index 0000000000000000000000000000000000000000..e86c05005ee87b10d46e42d89b070b9fa69fc406 GIT binary patch literal 2288 zcmb_c&rcIk5T0cf5R0H<VuHqA{DII7auGC=0xsP{BM~7Uo26`Rqb;PnHE3!yY1A}@ z1W$V9Kk(>DF-FnEsPX1iF)4wINe_)_QfIbr=(1fBW1P)<Z{GL5nR##Ky}hr7$D1Sx zSR@#R`ixP4=X>jV&{l)c4nCOH@;|lQmS4-?E9NunYiflSH@2`_Q%j_8_GwF(NO?hB zk-CDqo-0a2YANFrYc`xyOHx5CT~ybzAJ^0}F*hFD^osUOTk3jCh*nUGn)F30Kw-M9 zMZapVzsvS~(Dw0g)jHe|Z!=g>|K5d`f7jq4r<QSRW!zfFVzOGT?%Z|-*DCf}E3Szg zY@TiK!so7J+FteIS;VQ?Jo{<+!<*hf0D2+o_e1ui30Z*9*w_XCnajpZLQnYzl>wzc zFw|31&_x&J1Vy?#3DQER)a`3&UB&_)LyQ{9RVwJnfzC%wW9`jySVD@8dv!$J1HY<X zYqICf0Fd$X5*a;ti42a*<RHk<;+WM{8NBx^Lvx)Zw00a1IreFv9kC<WIt9l$P#L`N zfnD(PyWqiH@X#(e=&@KL8rN?aN>u0uL_*<-(UEXuVto9XIu)5384arum`^8CRt)Ad zmI;PwMQ$f%4KU}DNy8!#oumOyV;qtuY?R#!UPO{}1fozS_G4pwj6f9T*Jk*<ghG5D zHs&unaLO^`PX*3?Xe3#w4GnQWJMaUjv!8DQXFpuo9}d2A|G!=QHZkXm>)!tfy4Wb} zpX2rj+?}6c2i}2p%=eQM6!ODowE@MvleF|1P)sXb8{@2{ja#~684DIDv$~~&GGm&c zq~~grC{;3rYpFTQP(oLx1E!@%Zz6%rjCdrL){}-E<3DtM^g&1C{IbiSQ24ztF4DkL z=thll72HN@%6st(hzkR%2dVsWj|%=NfxG`0Puzh7-wpQ(pZ{u4?}2>os2$EZzWZO` zjz1*q`*C#2iXa|$f~d1SkE0IENqxx#C+NYwE-?50SB3qc%bxSk@FXf;_3IbEWUdp{ zk8IhVaSG#(jS!SY{0CyBx4I9T+nz9Y?GS<m0Z!1wA;R4@au78ydrj<L-)7bnxBVX$ CJ~Ea7 literal 0 HcmV?d00001 diff --git a/obj/main.o b/obj/main.o new file mode 100644 index 0000000000000000000000000000000000000000..83f308b5febfbd49ff1ad342670fcc623cd4076c GIT binary patch literal 1872 zcmbu9&1(};5Wr`X+Ez_!6c0ib0)kYrOBICHgXF_aRtPP`1TR9^#tm7_?n?Fvtxy#r z!V-l18U6|4K?Dz_;MsF8f<g}U9;h?B@1-y6?!``-%*^l2%=_BcH(ITdQWOxPzymmm z1O>>=o%n^oEkG7B(A52(`e2;*_r|*a@^D|9%;V@_Z>+GqKGY8N!PiB72%pa({X%uR zzyFJ@uT6&9ga^8>9bq;q=pXLMX~X7(2K*nQ?jP`p(ht7XHvy{U^8NhELv!0Qocy|a zS6y4(xEVT>L~=PapuDPsvXfJmGYg9&-0)T8q$EE56qj=EQ|0V@>K$efh!;AmIrwuN zH=2$;Nq{u|#Yq}F#Yq~@#9{2Rkig>?oCdm^S)t5J(mI2^Bg>-ZW>bUcdIG<dz&8?j zF@Zly;9wh;qqYMBt!iznRIIhODwW4tqtz&uYFZ0C)@N=HEXQJ&(X%{*S*`=7{le;* zeK0y5tKBuhF&T4r5rh(aZ0OR-pGTb>hf)fM1D=t1gYy(xx)qWClymAsXD7HV@g<4B zmiPsU=Q*eTq*GD7U7H!(pwc!2+ZA5l>=`OEcNnP83}%43?RlW~-7sjowrx5%=D5sM ztDDVLj~VUfm_TJ_x7FzzwmF^WlujP&=}knxv;r~`@qL9+m@9m;%cyjQ1=JbgPiDj+ z{Xe03#Fu`B^BbH;U)TX3j~ePB%WVv(=l|B<!CLA$b9Wev`J;WK^V54FwuUOpcOG1m zA^M_T*pkHL)ZcO-`JzssC+HB1uK$Q9tcyf$#rX?dM<?$7MttMqp6LFlR@4g~H#hZO p;R}7sExpyVG4;fvXN(9w@(t1YWZ~_m=puTt^&A@0%+QI}{{^4i!(#vd literal 0 HcmV?d00001 diff --git a/obj/tableau.o b/obj/tableau.o new file mode 100644 index 0000000000000000000000000000000000000000..1937f871456d0a771a097810b4fefb0042dba670 GIT binary patch literal 2728 zcmbtVU5Hyn6h2A%r(L_L6tuQNK#(oE*VPwmi<0ejb}uEm(l)46$=*$F+0gt*a#y<2 zq7W;jm&HE#;A8y(7km)}@y)bW(!PmO@L?Z<tPn{a>RTQH^*eKClJR;MM9(raXTEdJ zcV^DHnSD=W=Hsy#X^GKGG~Q{HXk+(SPfImT6SSAIcJuc$cB4Plyu9g)P5Tr3Mkir6 z+g<jto1)VeeO7ywk=4)k?flR7`ovx7<7Yee`r-ZKm_%F1=-xBF=!0<mz>k5W=-9EJ zY@hsWmkDnCmf(Gxjnoj`m@m4=#pb0u4bg|*XZ@<}BdT$0>fBpD@KNpN<pH39eWf+| zaclD1RtWY<0gZkNzFoVy+W9^Setn-Hn$O%!f~afzybSE-t9ycN7JBm9ogkZLk&Z_t z$CcLVi-9NMDyR@Mf`-+5TJ;s1%yDm28YJrN{En|X;!pC8dJ_mlUR8D0!G}!U&_SB3 zTWv99f}UuLfmCLEG5lMVySmB)qsofAAqFVz;JDbjbh{yj(1)ylqgkKWhD@K$h`B2- zt9WrvT9}(VmYO>0E*G6j>ZtXcH8cIfkw76jz-NWT-aSpRi^<rbiQRjy;X_RUJIn^i zS3J$`OMV!iduW$vB;udK2@u=U7%Y$Qq<v10?MsY9_Vc9enX&zS#v$`OX?uKDIxzor z#vw~QjqK+}_7>xiBRpw)A>dB|>R_;J@TBeW&jSa>wh{iV?w~*KN0}3mzht5W{-PuS zrYK3!t|%BR#-m_(Bxt9x3)H<>9yZP+dj;$<4E}wEWd=YL{ycEz(ebjMz|so8iIqk6 z5$gg5`~SiqMD`EsA_n6J)nm7WJ<DqtQF-44&i-r4U-l8$vcf-8xa=P=@|@+8>#SON zDprbK(J2+{j#sQ!D7TPVJTaTeEzZxM5odE}XHR5Aj>=A{RLzrH_j2zP3og~G<+AIM zTYkG(a%)s@gY|sPb*bjoVXC;ES6zcm%E4ff9efb_@O~gKZ-f7_4L+^z!CwORO!KT5 z_@se<WZ?S@yl3ECPtEgG92*Gpn>=&d;3;;7uvxjt{Yg2Gas53MLikO!{~(0x@8OFO zuD^#{Azb%;D}?L5lT}|Uqvu$?TClEYt>%^-%X2S!WEC9GA#1r_Co9h#t^li4J=a=z zB|BaBocsl{q`SM4J706ku1fd6mlPPdCE;Ik8W_tdv$)u+_DLI0hcI?vq%lmnt$ymi zD)0fU9Lw)6%cH?UPhw>}{PJ84<yG$g$p179%=usApG7R^=Xb>vo&RwYgs$(e*JB1| zx_<dD&(H4-bA{bEG@uhHa$P^2>lBoz`d?QK)$b11pI>Diuj?O`o4GesLBCe{`R(A? ja6I#dYY&KCSN*@h8$&|Zk?(O-ysiF)ykW$$8jk-9CHBTh literal 0 HcmV?d00001 diff --git a/src/affichage.c b/src/affichage.c new file mode 100644 index 0000000..cb96d5f --- /dev/null +++ b/src/affichage.c @@ -0,0 +1,26 @@ +#include<stdio.h> +#include"tableau.h" +/*affichage.c*/ + +void affiche(pile** tableau, int N) +{ + int i,j,h; + for (i=0 ; i<N ; i++){ + for (h=0 ; h<N ; h++){ + printf("+--"); + + if (h == N-1)printf("+\n"); + } + for (j=0 ; j<N ; j++) + if (est_vide(tableau[i][j])) + printf("| "); + else + printf("|%s", sommet(tableau[i][j])); + printf("|\n"); + } + for (i=0 ; i<N ; i++ ){ + printf("+--"); + if (i == N-1) printf("+"); + } + printf("\n"); +} diff --git a/src/affichage.h b/src/affichage.h new file mode 100644 index 0000000..04c6bee --- /dev/null +++ b/src/affichage.h @@ -0,0 +1,14 @@ +#ifndef _AFFICHAGE +#define _AFFICHAGE + +#include"tableau.h" +/*affichage.h*/ + +/* + * @require + * @assign + * @ensure effectue le rafraichissement de l'écran et l'affichage du jeu en terminal +*/ +void affiche(pile **tableau, int N); + +#endif diff --git a/stackchess.c b/src/main.c similarity index 76% rename from stackchess.c rename to src/main.c index 511b00d..ba9c7bf 100644 --- a/stackchess.c +++ b/src/main.c @@ -1,8 +1,10 @@ #include"tableau.h" +#include"affichage.h" +/*main.c*/ - -int main(int argc, char **argv){ +int main(int argc, char **argv) +{ int N = 6; if (argc != 1){ N=strtol(argv[1],NULL,10); diff --git a/src/tableau.c b/src/tableau.c new file mode 100644 index 0000000..5c47002 --- /dev/null +++ b/src/tableau.c @@ -0,0 +1,72 @@ +#include<stdio.h> +#include<stdlib.h> +#include<string.h> + +#include"tableau.h" +/*tableau.c*/ + +pile **initialisation(int N) +{ + int i,j; + pile ** tableau; + tableau = (pile**) malloc(N*sizeof(pile*)); + for (i=0 ; i<N ; i++){ + tableau[i] =(pile*)malloc(N*sizeof(pile)); + for (j=0 ; j<N ; j++) + tableau[i][j].sommet = NULL; + } + return tableau; +} + +int est_vide(pile p) +{ + return p.sommet == NULL; +} + +char *sommet(pile p) +{ + return p.sommet->chaine; +} + + +void empiler(pile *p, char *elt) +{ + noeud* nouveau; + nouveau = (noeud*) malloc(sizeof(noeud)); + nouveau->chaine = elt; + nouveau->next = p->sommet; + p->sommet = nouveau; +} + +char *depiler(pile *p) +{ + if (! est_vide(*p)){ + char *elt; + elt = p->sommet->chaine; + noeud* tmp = p->sommet; + p->sommet = p->sommet->next; + free(tmp); + return elt; + } + return NULL; +} + +void reset(pile *p) +{ + while (p->sommet) + depiler(p); +} + +void nettoyer(pile **tableau,int N) +{ + int i,j; + 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); + +} + diff --git a/src/tableau.h b/src/tableau.h new file mode 100644 index 0000000..52be8e2 --- /dev/null +++ b/src/tableau.h @@ -0,0 +1,70 @@ + +#ifndef _TABLEAU +#define _TABLEAU + +#include<stdio.h> +#include<stdlib.h> +#include<string.h> +/*tableau.h*/ + +typedef struct _noeud noeud; +struct _noeud{ + char *chaine; + noeud* next; +}; + +typedef struct _pile pile; +struct _pile{ + noeud* sommet; +}; + +/* + @require + @assign alloue un tableau de taille N*N + @ensure renvoie un tableau alloué de taille N*N dont les cases sont des piles +*/ +pile **initialisation(int N); + +/* + @require + @assign + @ensure retourne 1 si la pile est vide 0 sinon +*/ +int est_vide(pile p); + +/* + @require + @assign + @ensure retourne la valeur du sommet de la pile +*/ +char *sommet(pile p); + +/* + @ + @ + @ +*/ +void empiler(pile *p, char *elt); + +/* + * @require + * @assign + * @ensure enlève le sommet de la pile p et le retourne +*/ +char *depiler(pile *p); + +/* + * @require + * @assign + * @ensure remet une pile à zero +*/ +void reset(pile *p); + +/* + * @require + * @assign + * @ensure nettoie la mémoire allouée au tableau +*/ +void nettoyer(pile **tableau,int N); + +#endif diff --git a/stackchess b/stackchess new file mode 100755 index 0000000000000000000000000000000000000000..e5a9c2526ef9436324f0ba3dde332545833abdbc GIT binary patch literal 17192 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 literal 0 HcmV?d00001 -- GitLab