diff --git a/Makefile b/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..d7a105c21a003490517f5cf3ad95135df09ede90 --- /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 Binary files /dev/null and b/obj/affichage.o differ diff --git a/obj/main.o b/obj/main.o new file mode 100644 index 0000000000000000000000000000000000000000..83f308b5febfbd49ff1ad342670fcc623cd4076c Binary files /dev/null and b/obj/main.o differ diff --git a/obj/tableau.o b/obj/tableau.o new file mode 100644 index 0000000000000000000000000000000000000000..1937f871456d0a771a097810b4fefb0042dba670 Binary files /dev/null and b/obj/tableau.o differ diff --git a/src/affichage.c b/src/affichage.c new file mode 100644 index 0000000000000000000000000000000000000000..cb96d5fc7e83858dd6a740e89bf807f893d217e9 --- /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 0000000000000000000000000000000000000000..04c6bee4d46a5139bf4103e01413fd96f09b9b06 --- /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 511b00da95d00adbbaceb75a09712d452bc100e5..ba9c7bf44ddd30a94245168444d17dec96add9ff 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 0000000000000000000000000000000000000000..5c47002fb775b4524a821058b7fae3593f67349e --- /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 0000000000000000000000000000000000000000..52be8e28c7ebf911af1630537e5e6e98bf8d3457 --- /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 Binary files /dev/null and b/stackchess differ