diff --git a/Makefile b/Makefile index 69f450de409f8481315f5d7a8761eb053554ba42..da9164448d710b0cad63b38d82349bcb85d0a859 100644 --- a/Makefile +++ b/Makefile @@ -3,15 +3,18 @@ WIN32=i686-w64-mingw32-gcc WIN64=x86_64-w64-mingw32-gcc CFLAGS=-Wall -Wextra -ansi -g -lm -std=c99 -stackchess : main.o tableau.o affichage.o action.o deplacement.o +stackchess : main.o tableau.o affichage.o affichageold.o action.o deplacement.o cd obj && $(CC) $(CFLAGS) $^ -o ../build/$@ +play: stackchess + build/stackchess + all: stackchess stackchess32.exe stackchess64.exe clean -affichage.o : src/affichage.c src/affichage.h src/couleur.h +affichage.o : src/affichage.c src/affichage.h src/couleur.h $(CC) $(CFLAGS) -c $< -o ./obj/$@ -affichage32.o : src/affichage.c src/affichage.h src/couleur.h +affichage32.o : src/affichage.c src/affichage.h src/couleur.h $(WIN32) $(CFLAGS) -c $< -o ./obj/$@ affichage64.o : src/affichage.c src/affichage.h src/couleur.h @@ -26,10 +29,10 @@ affichage64.o : src/affichage.c src/affichage.h src/couleur.h %.o: src/%.c src/%.h $(CC) $(CFLAGS) -c $< -o obj/$@ -stackchess32.exe : main32.o tableau32.o affichage32.o action32.o deplacement32.o +stackchess32.exe : main32.o tableau32.o affichage32.o affichageold32.o action32.o deplacement32.o cd obj && $(WIN32) $(CFLAGS) $^ -o ../build/$@ -stackchess64.exe : main64.o tableau64.o affichage64.o action64.o deplacement64.o +stackchess64.exe : main64.o tableau64.o affichage64.o affichageold64.o action64.o deplacement64.o cd obj && $(WIN64) $(CFLAGS) $^ -o ../build/$@ clean : diff --git a/README.md b/README.md index da7741936dca25e4c04c04ad00756807d79e350f..eb0a4a35a1c7cd6e1dc4844428bb359418e9ac1a 100644 --- a/README.md +++ b/README.md @@ -82,7 +82,9 @@ On ne peut pas sauter par dessus une pièce (mais on peut se placer dessus si el # 3. Conseils d'utilisation ================================================================================== -Voici différentes commandes qui vont permettrons dde compiler et de jouer au jeu Stackchess en mode console : +Le rapport du projet se trouve à "doc/rapport.pdf" et les fichiers sources (.c et .h) se trouvent dans le répertoire "src". + +Voici différentes commandes qui vont permettrons de compiler et de jouer au jeu Stackchess en mode console : **Entrez dans votre console** : @@ -92,6 +94,9 @@ Voici différentes commandes qui vont permettrons dde compiler et de jouer au je > make play **Pour compiler le jeu pour windows :** + Pour créer des executables windows (sous linux) vous devez installer le compilateur cross-platform mingw : + +> sudo apt-get install mingw-w64 > make all diff --git a/build/stackchess b/build/stackchess index 950a3c386a1654fdd6cb52a9be75aea9992b789b..fa7607a8c48d77164ce435484a68d7ee1e3a2358 100755 Binary files a/build/stackchess and b/build/stackchess differ diff --git a/build/stackchess32.exe b/build/stackchess32.exe index b43378ac450cb1e626bdd5c206010a05443e5aa0..0cee438d18a949b97f42a9cccf4c2bee1241287c 100755 Binary files a/build/stackchess32.exe and b/build/stackchess32.exe differ diff --git a/build/stackchess64.exe b/build/stackchess64.exe index cdfa6db91b065775f2eb8fbaf4dd41a2586523c0..59f31fa2ad0af925f884788c422fab98e9c8b180 100755 Binary files a/build/stackchess64.exe and b/build/stackchess64.exe differ diff --git a/doc/latex/affichagenonansi.jpg b/doc/latex/affichagenonansi.jpg new file mode 100644 index 0000000000000000000000000000000000000000..52ffba2231838b69fba070715548e2ddf11e914b Binary files /dev/null and b/doc/latex/affichagenonansi.jpg differ diff --git a/doc/latex/rapport.pdf b/doc/latex/rapport.pdf index cee9f92617c9ab2a7cf5d22305af97896711b6f0..dbd19544ba14db83e4fd787fb2bcd707c3995b77 100644 Binary files a/doc/latex/rapport.pdf and b/doc/latex/rapport.pdf differ diff --git a/doc/latex/rapport.tex b/doc/latex/rapport.tex index 4f0a844fea324ebc54138a232d6966c1ceec0f23..a6f290ced95bc9f9150d67a040ee0f27f6dda0db 100644 --- a/doc/latex/rapport.tex +++ b/doc/latex/rapport.tex @@ -72,6 +72,18 @@ Les différentes opérations implémentées sur le plateau sont : \item deplacer les pièces du plateau si le déplacement est légal \end{itemize} \subsection{La gestion de l'affichage} +Il existe deux mode d'affichage : avec ou sans coloration.\\ + +Pour accéder au mode d'affichage il suffit de mettre comme second argument d'exécution du programme un 0 si on ne veut pas de couleur et un 1 sinon. Le premier argument correspond à la taille du plateau. + +\paragraph{Affichage sans couleurs :} +Il s'agit de celui présenté dans l'énoncé du sujet avec des barres verticales et des tirets pour délimiter les cases : +\begin{figure}[H] + \centering + \includegraphics[scale=1]{affichagenonansi.jpg} +\end{figure} + +\paragraph{Affichage en couleurs :} L'affichage se fait en mode terminal, en utilisant les séquences d'echappement ANSI pour avoir de la couleur : \begin{minted}{C} #define clrscr() printf("\033[H\033[2J") //rafraichi l'écran diff --git a/doc/rapport.pdf b/doc/rapport.pdf new file mode 100644 index 0000000000000000000000000000000000000000..dbd19544ba14db83e4fd787fb2bcd707c3995b77 Binary files /dev/null and b/doc/rapport.pdf differ diff --git a/src/action.c b/src/action.c index d6fe8827f04339b3fb0f96a752c3380ed41c9de2..a57c01fef0e7b5ddb3c2739339ad39c7b79a54a6 100644 --- a/src/action.c +++ b/src/action.c @@ -8,12 +8,12 @@ -void realiser(char action,pile **tableau,int N,char *cases,int *tour) +void realiser(char action,pile **tableau,int N,char *cases,int *tour,int ansi) { char sel[4]="\0\0\0\0"; switch (action){ case 'c' : - affichage(tableau,N,cases,*tour,"Entrez les coordonnées de la case à selectionner >"); + affichage(tableau,N,cases,*tour,"Entrez les coordonnées de la case à selectionner >",ansi); scanf("%3s",sel); viderbuffer(); if (sel[1] != '\0'){ @@ -21,10 +21,10 @@ void realiser(char action,pile **tableau,int N,char *cases,int *tour) } break; case 'd' : - deplacement(tableau,N,cases,tour); + deplacement(tableau,N,cases,tour,ansi); break; case 'a' : - affichage(tableau,N,cases,*tour,"\n Voulez vous abandonner le jeu (y|n)? \n"); + affichage(tableau,N,cases,*tour,"\n Voulez vous abandonner le jeu (y|n)? \n",ansi); char c; scanf("%1s",&c); if (c == 'y'){ diff --git a/src/action.h b/src/action.h index d681cb598121b04464596ca577795d040d3baf08..9b6e9f0a6294591173291757c984bcda817d9f7e 100644 --- a/src/action.h +++ b/src/action.h @@ -4,4 +4,4 @@ * @assign * @ensure fait entrer dans le bon mode (abandon, selection ou déplacement) */ -void realiser(char action,pile **tableau,int N,char *cases,int *tour); +void realiser(char action,pile **tableau,int N,char *cases,int *tour,int ansi); diff --git a/src/affichage.c b/src/affichage.c index 7b315106da10561cb9bcf7e94183103b4674bcab..3d815f4661d6928648602f4809b31295cd0afe22 100644 --- a/src/affichage.c +++ b/src/affichage.c @@ -3,6 +3,7 @@ #include"affichage.h" #include"couleur.h" #include<math.h> +#include"affichageold.h" /*affichage.c*/ void viderbuffer() { @@ -79,12 +80,21 @@ void affichetableau_pile_cote(pile **tableau, int N,char *sel) } -void affichage(pile **tableau,int N, char *sel,int tour,char *message) +void affichage(pile **tableau,int N, char *sel,int tour,char *message,int ansi) { - affichetableau_pile_cote(tableau,N,sel); - if (tour%2 == 0) - printf("\n [\x1B[1;5;32m%sBLANCS" RESET "] %s",NOIR,message); - else - printf("\n [\x1B[1;5;31m%sNOIRS" RESET "] %s",NOIR,message); + if (ansi == 1){ + affichetableau_pile_cote(tableau,N,sel); + if (tour%2 == 0) + printf("\n [\x1B[1;5;32m%sBLANCS" RESET "] %s",NOIR,message); + else + printf("\n [\x1B[1;5;31m%sNOIRS" RESET "] %s",NOIR,message); + } else { + affiche(tableau,N); + affichepile(sel,tableau,N); + if (tour%2 == 0) + printf("\n [BLANCS] %s",message); + else + printf("\n [NOIRS] %s",message); + } } diff --git a/src/affichage.h b/src/affichage.h index aee85fe738fc465400bc78576121700d00eb3dd0..2d47fdbffd63344aff76af7d2d46cac259549992 100644 --- a/src/affichage.h +++ b/src/affichage.h @@ -2,6 +2,7 @@ #define _AFFICHAGE #include"tableau.h" +#include"affichageold.h" /*affichage.h*/ @@ -37,5 +38,5 @@ void affichepion(char *pion,char* CASE); * @assign * @ensure combine affichetableau_pile_cote() et l'affichage du message destiné à l'utilisateur */ -void affichage(pile **tableau,int N,char *sel,int tour,char *message); +void affichage(pile **tableau,int N,char *sel,int tour,char *message,int ansi); #endif diff --git a/src/affichageold.c b/src/affichageold.c index 674c448c670fae146903a9673f7df12330ee70b4..8b6f78b5fd06d77acd446888c387c8ade28a83fb 100644 --- a/src/affichageold.c +++ b/src/affichageold.c @@ -10,7 +10,7 @@ void affiche(pile** tableau, int N) int i,j; printf(" "); for(i=0 ; i<N ; i++){ - printf(" %c ",'a'+i); + printf(" %c ",'A'+i); } printf("\n"); for (i=0 ; i<N ; i++){ @@ -47,14 +47,14 @@ void affichecouleur(pile **tableau, int N) if ((i+j)%2 == 1){ if (est_vide(tableau[i][j])) printf(NOIR " " RESET); - else if (tableau[i][j].sommet->chaine[1] == 'N') + else if (tableau[i][j]->chaine[1] == 'N') printf(PNOIRE NOIR "%c " RESET, *sommet(tableau[i][j])); else printf(PBLANCHE NOIR"%c " RESET, *sommet(tableau[i][j])); } else { if (est_vide(tableau[i][j])) printf(BLANC " " RESET); - else if (tableau[i][j].sommet->chaine[1] == 'N') + else if (tableau[i][j]->chaine[1] == 'N') printf(PNOIRE BLANC"%c " RESET, *sommet(tableau[i][j])); else printf(PBLANCHE BLANC"%c " RESET, *sommet(tableau[i][j])); @@ -75,9 +75,9 @@ void affichepile(char *sel,pile **tableau,int N) printf("Aucune case n'est sélectionnée."); else { printf("%s:\n",sel); - noeud* tmp=tableau[i][j].sommet; + pile tmp=tableau[i][j]; while (tmp != NULL){ - affichepion(tmp->chaine,NOIR); + printf("%s",tmp->chaine); tmp=tmp->next; printf("\n"); } diff --git a/src/affichageold.h b/src/affichageold.h index 055db69d7c5b3040897f90546b643fe94e20bc24..de1288f6d6a7d2e3059c10512440cafe3e51933a 100644 --- a/src/affichageold.h +++ b/src/affichageold.h @@ -1,10 +1,10 @@ -#ifndef _AFFICHAGE -#define _AFFICHAGE +#ifndef _AFFICHAGEOLD +#define _AFFICHAGEOLD #include"tableau.h" /*affichageold.h*/ -/*contient les vielles fonctions d'affichage*/ +/*contient les fonctions d'affichage non compatible ANSI*/ /* * @require \nothing * @assign \nothing diff --git a/src/deplacement.c b/src/deplacement.c index 11fd4e6a6a4a621b96b1856e53416bfa35d7210b..41a7da1ace6c31e67ab89ff380b891c2087646a1 100644 --- a/src/deplacement.c +++ b/src/deplacement.c @@ -6,7 +6,7 @@ //#include<unistd.h> /*deplacement.c*/ -void deplacement(pile **tableau, int N, char *sel, int *tour) +void deplacement(pile **tableau, int N, char *sel, int *tour,int ansi) { if (*sel != '\0'){ int i,j; @@ -14,11 +14,11 @@ void deplacement(pile **tableau, int N, char *sel, int *tour) if (i>=N || i<0 || j>=N || j<0) printf("\nCase sélectionnée hors du tableau."); else if (sommet(tableau[i][j])[1] == "BN"[*tour%2]){ - affichage(tableau,N,sel,*tour,"Combien de pions à déplacer >"); + affichage(tableau,N,sel,*tour,"Combien de pions à déplacer >",ansi); int nb=nb_a_selectionner(tableau,i,j,tour); if (nb>0){ int i_dest,j_dest; - affichage(tableau,N,sel,*tour,"Entrez les coordonnées de la case de destination>"); + affichage(tableau,N,sel,*tour,"Entrez les coordonnées de la case de destination>",ansi); case_destination(tableau,N,i,j,&i_dest,&j_dest,nb,tour); } } else diff --git a/src/deplacement.h b/src/deplacement.h index d6c3a3d0067a85fff823a7493f0d94707190342e..41db2ced4be154de3139daf209669a6eeb2088f5 100644 --- a/src/deplacement.h +++ b/src/deplacement.h @@ -10,7 +10,7 @@ * @assign * @ensure détermine si le déplacement est légal ou pas et l'effectue si c'est le cas */ -void deplacement(pile **tableau,int N, char *sel, int *tour); +void deplacement(pile **tableau,int N, char *sel, int *tour,int ansi); /* * @require diff --git a/src/main.c b/src/main.c index d8b4aa8dd1f1c3b93a6b4ef15b52422402415ddf..a9b38b64cbc0f6e7dd559c948f8fdd33d1f78d42 100644 --- a/src/main.c +++ b/src/main.c @@ -7,9 +7,11 @@ int main(int argc, char **argv) { - int N = 6; + int N = 6,ansi=1; if (argc != 1){ N=strtol(argv[1],NULL,10); + if (argc == 3) + ansi=strtol(argv[2],NULL,10); } pile **tableau=initialisation(N); debut_partie(tableau,N); @@ -17,9 +19,9 @@ int main(int argc, char **argv) int tour=0; char sel[4]="\0\0\0\0"; while (! partie_finie(tableau, N,tour)){ - affichage(tableau,N,sel,tour,"Entrez une action (c,d,a) >"); + affichage(tableau,N,sel,tour,"Entrez une action (c,d,a) >",ansi); scanf("%c",&action); - realiser(action,tableau,N,sel,&tour); + realiser(action,tableau,N,sel,&tour,ansi); } nettoyer(tableau,N); return 0;