From 01cceb1eaae3b26da9693ff3f90344f9eb1e98b4 Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Fri, 18 Mar 2022 14:33:38 +0100 Subject: [PATCH 001/163] =?UTF-8?q?Tache=20B.1=20cr=C3=A9ation=20du=20fich?= =?UTF-8?q?ier=20makefile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 1 + 1 file changed, 1 insertion(+) create mode 100644 Makefile diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..887ff51 --- /dev/null +++ b/Makefile @@ -0,0 +1 @@ +oui \ No newline at end of file -- GitLab From ab280e693247749b0da4b17b1edc4df967cba5a3 Mon Sep 17 00:00:00 2001 From: "martin.fond" <martin.fond@ensiie.fr> Date: Fri, 18 Mar 2022 15:11:50 +0100 Subject: [PATCH 002/163] =?UTF-8?q?[LotA][A.2]=20Fonctions=20pass=C3=A9es?= =?UTF-8?q?=20en=20anglais?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- carte.h | 2 +- faction.h | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/carte.h b/carte.h index 3356488..616a552 100644 --- a/carte.h +++ b/carte.h @@ -2,6 +2,6 @@ #define CARTE -typedef struct carte* carte; +typedef struct card* card; #endif diff --git a/faction.h b/faction.h index 7d1c6d1..123b7bd 100644 --- a/faction.h +++ b/faction.h @@ -10,14 +10,14 @@ typedef int bool; @ensures : Retourne un faction initialisee */ -faction creer_faction(); +faction create_faction(); /* @requires : rien @assigns : rien @ensures : Retourne vrai si la faction a mulligan */ -bool a_mulligan(faction); +bool has_mulligan(faction); /* @requires : rien @@ -33,7 +33,7 @@ void declare_mulligan(faction); @ensures : Vide la main dans la pioche */ -void vider_main(faction); +void empty_main(faction); /* @@ -42,7 +42,7 @@ void vider_main(faction); @ensures : Melange la pioche */ -void melange_pioche(faction); +void shuffle_deck(faction); /* @requires : rien @@ -50,6 +50,6 @@ void melange_pioche(faction); @ensures : Met 8 cartes de la pioche dans la main */ -void repiocher(faction); +void redraw(faction); #endif \ No newline at end of file -- GitLab From f68bc94da248c85f57ecc49ef94fffa40c437f59 Mon Sep 17 00:00:00 2001 From: "martin.fond" <martin.fond@ensiie.fr> Date: Fri, 18 Mar 2022 15:12:57 +0100 Subject: [PATCH 003/163] =?UTF-8?q?[LotA][A.2]=20Fonctions=20pass=C3=A9es?= =?UTF-8?q?=20en=20anglais?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- faction.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/faction.h b/faction.h index 123b7bd..5957e77 100644 --- a/faction.h +++ b/faction.h @@ -33,7 +33,7 @@ void declare_mulligan(faction); @ensures : Vide la main dans la pioche */ -void empty_main(faction); +void empty_hand(faction); /* -- GitLab From 60f6538bdd1c6bdf399b759e268329a7fb917f79 Mon Sep 17 00:00:00 2001 From: "martin.fond" <martin.fond@ensiie.fr> Date: Fri, 18 Mar 2022 15:16:58 +0100 Subject: [PATCH 004/163] [LotA][A.2] Modification _H --- carte.h | 4 ++-- faction.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/carte.h b/carte.h index 616a552..6fe7999 100644 --- a/carte.h +++ b/carte.h @@ -1,5 +1,5 @@ -#ifndef CARTE -#define CARTE +#ifndef CARTE_H +#define CARTE_H typedef struct card* card; diff --git a/faction.h b/faction.h index 5957e77..3ef64e6 100644 --- a/faction.h +++ b/faction.h @@ -1,5 +1,5 @@ -#ifndef FACTION -#define FACTION +#ifndef FACTION_H +#define FACTION_H typedef struct faction* faction; typedef int bool; -- GitLab From 48adca6d0bb0b1c6a6735a204ce318fdd6fd8def Mon Sep 17 00:00:00 2001 From: Felicien FISCUS <felicien.fiscus@pc130-11.pedago.ensiie.fr> Date: Fri, 18 Mar 2022 15:34:55 +0100 Subject: [PATCH 005/163] custom random number generator with Lehmer --- OurRandom.h | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 OurRandom.h diff --git a/OurRandom.h b/OurRandom.h new file mode 100644 index 0000000..cf94bec --- /dev/null +++ b/OurRandom.h @@ -0,0 +1,35 @@ +#ifndef OUR_RANDOM_H +#define OUR_RANDOM_H +/* +The function rand isn't very good at computing random numbers, +when tested on a large scale, the distribution isn't as uniform as it seems. +The lehmer random generator is better at that. + +*/ + + +#include <stdio.h> +#include <stdlib.h> +#include <time.h> + +/**Lehmer documentation +*https://en.wikipedia.org/wiki/Lehmer_random_number_generator +* +*\brief like the function rand, except better, and same use : Lehmer(seed) % 10 +* generates a random number between 0 and 9 +*\param nLehmer : the seed to use +*\return a pseudo random big number, stored on 32bits. +*/ +u_int32_t Lehmer32(unsigned int* nLehmer) +{ + /*shenanigans*/ + *nLehmer += 0xe120fc15; + u_int64_t tmp; + tmp = (u_int64_t)(*nLehmer) * 0x4a39b70d; + u_int32_t m1 = (tmp >> 32) ^ tmp; + tmp = (u_int64_t)m1 * 0x12fad5c9; + u_int32_t m2 = (tmp >> 32) ^ tmp; + return m2; +} + +#endif /*OUR_RANDOM_H*/ \ No newline at end of file -- GitLab From 3f8f9bafb0370ed916fd8642788332c218f2103a Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Fri, 18 Mar 2022 16:26:39 +0100 Subject: [PATCH 006/163] Tache A.3 modification des commentaires, du nom du type abstrait en board, et ajout des lignes ifndef et define --- plateau.h | 124 +++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 90 insertions(+), 34 deletions(-) diff --git a/plateau.h b/plateau.h index 849549b..354dc62 100644 --- a/plateau.h +++ b/plateau.h @@ -1,56 +1,112 @@ +/** + *\file plateau.h + *\brief Interface de plateau.c + *\author Aurélien Coreau + * + *Interface de plateau.c qui est en charge de tout ce qui concerne le plateau et le déroulement de la partie. + * + */ + + + #include "carte.h" #include "faction.h" +#ifndef PLATEAU +#define PLATEAU + +/** + *\struct board + *\brief type board abstrait + * un objet de type board est un pointeur pointant vers une structure board ayant le support du jeu, ainsi que les détails des deux factions + */ + +typedef struct board* board; + + + + + + +/** + *\fn board create_new_board() + *\param aucun + *\brief Fonction de création d'un objet de type board, avec un support de jeu vide et les deux factions qui vont jouer + *\return un nouvel objet de type board (avec les éléments des deux factions) + */ + +board create_new_board(); + + + + + + + +/** + *\fn void free_board(board p) + *\param p de type board + *\brief Fonction permettant de libérer les cases mémoires qui ont été allouées aux éléments (support de jeu et les factions) pointés par p + *\return rien + */ + + +void free_board(board p); + + + + + + +/** + *\fn void set_round(board p) + *\param p de type board + *\brief Fonction permettant de réinitialiser le support de jeu pointé par p (sans faire de modification sur les factions) + *\return rien + */ + + +void set_round(board p); + + -/* -Création un type plateau contenant le support de jeu ainsi que les deux factions -*/ -typedef struct plateau* plateau; +/** + *\fn faction* display_faction(board p) + *\param p de type board + *\brief Fonction permettant de renvoyer la liste des deux factions pointées par p + *\return un pointeur vers deux éléments de type faction qui sont les deux factions étant en train de jouer + */ -/*requires rien - assigns rien - ensures renvoie un plateau vide (avec les éléments des deux factions) - */ -plateau create_new_board(); +faction* display_faction(board p); -/*requires p est un plateau valide - assigns rien - ensures libère la mémoire assignée à p - */ -void free_board(plateau p); -/*requires p est un plateau valide - assigns p - ensures réinitialise le support de jeu, sans modifier les factions - */ -void set_round(plateau p); +/** + *\fn void put_card(board p, card c) + *\param p de type board + *\param c de type card + *\brief Fonction permettant d'ajouter une carte sur le plateau, sur le support de jeu pointé par p + *\return rien + */ +void put_card(board p, card c); -/*requires p est un plateau valide - assigns rien - ensures renvoie la liste des deux factions du jeu - */ -faction* display_faction(plateau p); -/*requires p est un plateau valide - assigns p - ensures ajoute une carte sur le plateau - */ -void put_card(plateau p, carte c); +/** + *\fn void turn_over_card(board p) + *\param p de type board + *\brief Fonction permettant de retourner une carte visible du plateau (celle la plus en haut à gauche) et active son effet + *\return rien + */ -/*requires p est un plateau valide - assigns p - ensures retourne une carte visible du plateau (celle en haut à gauche) et active son effet - */ -void turn_over_card(plateau p); +void turn_over_card(board p); -- GitLab From ed45d191b538408f747a620afdef67c56d2198a8 Mon Sep 17 00:00:00 2001 From: "martin.fond" <martin.fond@ensiie.fr> Date: Fri, 18 Mar 2022 16:34:41 +0100 Subject: [PATCH 007/163] [LotA][A.2] Ajout de la doc doxygen --- carte.h | 5 ++++- faction.h | 52 +++++++++++++++++++++++++++++----------------------- 2 files changed, 33 insertions(+), 24 deletions(-) diff --git a/carte.h b/carte.h index 6fe7999..112bf25 100644 --- a/carte.h +++ b/carte.h @@ -1,7 +1,10 @@ #ifndef CARTE_H #define CARTE_H +/** +Creation d'un type carte contenant toutes les informations relatives a une carte +*/ typedef struct card* card; -#endif +#endif /* CARTE_H */ diff --git a/faction.h b/faction.h index 3ef64e6..264c488 100644 --- a/faction.h +++ b/faction.h @@ -1,55 +1,61 @@ #ifndef FACTION_H #define FACTION_H +/** +Creation d'un type faction contenant toutes les informations relatives a un joueur +y compris sa pioche. +*/ + typedef struct faction* faction; typedef int bool; -/* -@requires : rien -@assigns : rien -@ensures : Retourne un faction initialisee +/** +@requires rien \n +@assigns rien \n +@ensures Retourne un faction initialisee +*\brief Cree une faction initialisee */ faction create_faction(); -/* -@requires : rien -@assigns : rien -@ensures : Retourne vrai si la faction a mulligan +/** +@requires rien \n +@assigns rien \n +@ensures Retourne vrai si la faction a mulligan */ bool has_mulligan(faction); -/* -@requires : rien -@assigns : La faction +/** +@requires : rien \n +@assigns : La faction \n @ensures : Remelange la main et la pioche de la faction, repioche 8 cartes */ void declare_mulligan(faction); -/* -@requires : rien -@assigns : La faction +/** +@requires : rien \n +@assigns : La faction \n @ensures : Vide la main dans la pioche */ void empty_hand(faction); -/* -@requires : rien -@assigns : La faction -@ensures : Melange la pioche +/** +@requires rien \n +@assigns La faction \n +@ensures Melange la pioche */ void shuffle_deck(faction); -/* -@requires : rien -@assigns : La faction -@ensures : Met 8 cartes de la pioche dans la main +/** +@requires rien \n +@assigns La faction \n +@ensures Met 8 cartes de la pioche dans la main */ void redraw(faction); -#endif \ No newline at end of file +#endif /* FACTION_H */ \ No newline at end of file -- GitLab From 982881eb9ec4d23506069e6d13f4a35649585d3c Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Fri, 18 Mar 2022 16:34:44 +0100 Subject: [PATCH 008/163] =?UTF-8?q?Tache=20A.3=20ajout=20de=20la=20ligne?= =?UTF-8?q?=20#endif=20=C3=A0=20la=20fin=20et=20modification=20de=20PLATEA?= =?UTF-8?q?U=20en=20PLATEAU=5FH?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plateau.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/plateau.h b/plateau.h index 354dc62..7d98cc8 100644 --- a/plateau.h +++ b/plateau.h @@ -11,8 +11,8 @@ #include "carte.h" #include "faction.h" -#ifndef PLATEAU -#define PLATEAU +#ifndef PLATEAU_H +#define PLATEAU_H /** *\struct board @@ -110,3 +110,5 @@ void put_card(board p, card c); void turn_over_card(board p); + +#endif /*PLATEAU_H*/ \ No newline at end of file -- GitLab From 92d5692774e18cf0cf5e7b6bdc01ccc6b5788879 Mon Sep 17 00:00:00 2001 From: Felicien FISCUS <felicien.fiscus@pc130-11.pedago.ensiie.fr> Date: Fri, 18 Mar 2022 16:41:44 +0100 Subject: [PATCH 009/163] abstraction de Lehmer32() --- OurRandom.c | 13 +++++++++++++ OurRandom.h | 12 +----------- 2 files changed, 14 insertions(+), 11 deletions(-) create mode 100644 OurRandom.c diff --git a/OurRandom.c b/OurRandom.c new file mode 100644 index 0000000..6af488a --- /dev/null +++ b/OurRandom.c @@ -0,0 +1,13 @@ +#include "OurRandom.h" + +u_int32_t Lehmer32(unsigned int* nLehmer) +{ + /*shenanigans*/ + *nLehmer += 0xe120fc15; + u_int64_t tmp; + tmp = (u_int64_t)(*nLehmer) * 0x4a39b70d; + u_int32_t m1 = (tmp >> 32) ^ tmp; + tmp = (u_int64_t)m1 * 0x12fad5c9; + u_int32_t m2 = (tmp >> 32) ^ tmp; + return m2; +} \ No newline at end of file diff --git a/OurRandom.h b/OurRandom.h index cf94bec..3a957bc 100644 --- a/OurRandom.h +++ b/OurRandom.h @@ -20,16 +20,6 @@ The lehmer random generator is better at that. *\param nLehmer : the seed to use *\return a pseudo random big number, stored on 32bits. */ -u_int32_t Lehmer32(unsigned int* nLehmer) -{ - /*shenanigans*/ - *nLehmer += 0xe120fc15; - u_int64_t tmp; - tmp = (u_int64_t)(*nLehmer) * 0x4a39b70d; - u_int32_t m1 = (tmp >> 32) ^ tmp; - tmp = (u_int64_t)m1 * 0x12fad5c9; - u_int32_t m2 = (tmp >> 32) ^ tmp; - return m2; -} +u_int32_t Lehmer32(unsigned int* nLehmer); #endif /*OUR_RANDOM_H*/ \ No newline at end of file -- GitLab From f32280c9b769783407fb7d83dc40fec22b7aaa15 Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Fri, 18 Mar 2022 16:55:24 +0100 Subject: [PATCH 010/163] Tache A.3 modification de put_card --- plateau.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/plateau.h b/plateau.h index 7d98cc8..0505fe2 100644 --- a/plateau.h +++ b/plateau.h @@ -89,12 +89,14 @@ faction* display_faction(board p); /** *\fn void put_card(board p, card c) *\param p de type board - *\param c de type card - *\brief Fonction permettant d'ajouter une carte sur le plateau, sur le support de jeu pointé par p + *\param c de type card + *\param x de type int + *\param y de type int + *\brief Fonction permettant d'ajouter une carte sur le plateau à la position (x,y), sur le support de jeu pointé par p *\return rien */ -void put_card(board p, card c); +void put_card(board p, card c, int x, int y); -- GitLab From 1b53ba7f380e04cb6ca2d816bf4e88fb0552a5a6 Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Fri, 18 Mar 2022 16:59:26 +0100 Subject: [PATCH 011/163] Tache A.3 --- plateau.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/plateau.h b/plateau.h index 0505fe2..8e43259 100644 --- a/plateau.h +++ b/plateau.h @@ -1,3 +1,7 @@ +#ifndef PLATEAU_H +#define PLATEAU_H + + /** *\file plateau.h *\brief Interface de plateau.c @@ -11,8 +15,7 @@ #include "carte.h" #include "faction.h" -#ifndef PLATEAU_H -#define PLATEAU_H + /** *\struct board -- GitLab From e9cd95fee603678c368604b2dcf420b5f4486161 Mon Sep 17 00:00:00 2001 From: "martin.fond" <martin.fond@ensiie.fr> Date: Fri, 18 Mar 2022 17:00:18 +0100 Subject: [PATCH 012/163] [LotA][A.2] Mise a jour des commentaires (precision carte et doxygen) --- carte.h | 16 +++++++++++++++- faction.h | 11 ++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/carte.h b/carte.h index 112bf25..82ffb86 100644 --- a/carte.h +++ b/carte.h @@ -2,9 +2,23 @@ #define CARTE_H /** -Creation d'un type carte contenant toutes les informations relatives a une carte +*\file carte.h +*\brief Interface de carte.c +*\author Martin Fond +* +*Interface de carte.c qui est en charge de tout ce qui concerne les cartes. +* */ +/** +Creation d'un type carte contenant toutes les informations relatives a une carte : + -Nom + -Id + -Nombre d'occurences dans un deck + -Description de l'effet +*/ + + typedef struct card* card; #endif /* CARTE_H */ diff --git a/faction.h b/faction.h index 264c488..e258d17 100644 --- a/faction.h +++ b/faction.h @@ -1,6 +1,15 @@ #ifndef FACTION_H #define FACTION_H +/** +*\file faction.h +*\brief Interface de faction.c +*\author Martin Fond +* +*Interface de faction.c qui est en charge de tout ce qui concerne les factions. +* +*/ + /** Creation d'un type faction contenant toutes les informations relatives a un joueur y compris sa pioche. @@ -21,7 +30,7 @@ faction create_faction(); /** @requires rien \n @assigns rien \n -@ensures Retourne vrai si la faction a mulligan +@ensures Retourne vrai si la faction a relancee sa main et repiochee */ bool has_mulligan(faction); -- GitLab From e76173610fdc3c4fd6902881867ccdcbc807ba80 Mon Sep 17 00:00:00 2001 From: Felicien FISCUS <felicien.fiscus@pc130-11.pedago.ensiie.fr> Date: Fri, 18 Mar 2022 17:14:04 +0100 Subject: [PATCH 013/163] ajout finale de commentaire --- OurRandom.h | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/OurRandom.h b/OurRandom.h index 3a957bc..272af35 100644 --- a/OurRandom.h +++ b/OurRandom.h @@ -1,10 +1,11 @@ #ifndef OUR_RANDOM_H #define OUR_RANDOM_H -/* -The function rand isn't very good at computing random numbers, -when tested on a large scale, the distribution isn't as uniform as it seems. -The lehmer random generator is better at that. - +/** +*\file OurRandom.h +*\brief The function rand isn't very good at computing random numbers, +*when tested on a large scale, the distribution isn't as uniform as it seems. +*The lehmer random generator is better at that. It is a substitute for the rand function. +*\author Felicien Fiscus */ -- GitLab From f9ec5285dccf698afa159141a3491e7917518dd6 Mon Sep 17 00:00:00 2001 From: Lucas Desrumeaux <lucas@carjager.com> Date: Fri, 18 Mar 2022 17:22:40 +0100 Subject: [PATCH 014/163] =?UTF-8?q?Cr=C3=A9ation=20du=20fichier=20interfac?= =?UTF-8?q?e.h?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- interface.h | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 interface.h diff --git a/interface.h b/interface.h new file mode 100644 index 0000000..4dadd53 --- /dev/null +++ b/interface.h @@ -0,0 +1,78 @@ +/** + * \file interface.h + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \brief L'interface fait tous les affichages nécessaires avec les faction qui jouent + * \version 0.1 + * \date 2022-03-18 + * + * \copyright LeProjetDeQualiteSuperieur (c) 2022 + * + */ + +#ifndef INTERFACE_H +#define INTERFACE_H + +#include "plateau.h" +#include "faction.h" +#include "carte.h" + +/** + * \brief Fonction affiche le plateau actuel + * \param param1 plateau à afficher. + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-03-18 + */ +void display_board(board); + +/** + * \brief Fonction affiche la main d'une faction + * \param param1 faction dont la main est afficher ne peut être NULL. + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-03-18 + */ +void display_hand(faction); + +/** + * \brief Fonction demande à la faction \b param1 si elle veut vider sa main, mélanger sa pioche et repiocher + * \param param1 faction qui peut repiocher ne peut être NULL. + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-03-18 + */ +void want_to_redraw(faction); + +/** + * \brief Fonction demande à la faction \b param1 quelle carte de sa main elle veut poser face cachée sur le plateau + * \param param1 faction qui choisit une carte à placer ne peut être NULL. + * \return card* la carte choisie + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-03-18 + */ +card* choose_card_to_place(faction); + +/** + * \brief Fonction demande quelle position la faction \b param1 souhaite poser sa carte \b param2 + * \param param1, param2 faction qui souhaite poser une carte ne peut être NULL, carte à poser ne peut être NULL + * \return int[2] Les coordonnées de la carte a placer sur le plateau + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-03-18 + */ +int[2] where_to_place_card(faction, card); + +/** + * \brief Fonction affiche les effets de la carte retournée + * \param param1 carte qui vient d'être retournée + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-03-18 + */ +void display_card_effects(card); + +/** + * \brief Fonction affiche le vainqueur de la partie + * \param param1 Faction qui à gagné + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-03-18 + */ +void display_winner(faction) + + +#endif /*INTERFACE_H*/ \ No newline at end of file -- GitLab From 36781f8a31a88dbe8dc42d244a311ebc003ae68b Mon Sep 17 00:00:00 2001 From: Lucas Desrumeaux <lucas@carjager.com> Date: Fri, 18 Mar 2022 17:30:28 +0100 Subject: [PATCH 015/163] Ajout ; et type de retour w_to_place_card --- interface.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interface.h b/interface.h index 4dadd53..0285a03 100644 --- a/interface.h +++ b/interface.h @@ -56,7 +56,7 @@ card* choose_card_to_place(faction); * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) * \date 2022-03-18 */ -int[2] where_to_place_card(faction, card); +int* where_to_place_card(faction, card); /** * \brief Fonction affiche les effets de la carte retournée @@ -72,7 +72,7 @@ void display_card_effects(card); * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) * \date 2022-03-18 */ -void display_winner(faction) +void display_winner(faction); #endif /*INTERFACE_H*/ \ No newline at end of file -- GitLab From 6d48d2bc1d4e35a6509720a9ac125c7fb12e77e8 Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Fri, 18 Mar 2022 17:43:26 +0100 Subject: [PATCH 016/163] Tache A.3 modification du type de retour de turn_over_card() --- plateau.h | 24 +++--------------------- 1 file changed, 3 insertions(+), 21 deletions(-) diff --git a/plateau.h b/plateau.h index 8e43259..4cc3bb3 100644 --- a/plateau.h +++ b/plateau.h @@ -27,9 +27,6 @@ typedef struct board* board; - - - /** *\fn board create_new_board() *\param aucun @@ -41,10 +38,6 @@ board create_new_board(); - - - - /** *\fn void free_board(board p) *\param p de type board @@ -57,9 +50,6 @@ void free_board(board p); - - - /** *\fn void set_round(board p) *\param p de type board @@ -72,9 +62,6 @@ void set_round(board p); - - - /** *\fn faction* display_faction(board p) *\param p de type board @@ -87,8 +74,6 @@ faction* display_faction(board p); - - /** *\fn void put_card(board p, card c) *\param p de type board @@ -103,17 +88,14 @@ void put_card(board p, card c, int x, int y); - - - /** - *\fn void turn_over_card(board p) + *\fn card turn_over_card(board p) *\param p de type board *\brief Fonction permettant de retourner une carte visible du plateau (celle la plus en haut à gauche) et active son effet - *\return rien + *\return la carte qui a été retournée */ -void turn_over_card(board p); +card turn_over_card(board p); #endif /*PLATEAU_H*/ \ No newline at end of file -- GitLab From b5a83539ef7fca9da4a2beb39ce2fa65565dd70c Mon Sep 17 00:00:00 2001 From: Lucas Desrumeaux <lucas@carjager.com> Date: Fri, 18 Mar 2022 17:49:14 +0100 Subject: [PATCH 017/163] Ajout de la fonction hand_is_empty --- faction.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/faction.h b/faction.h index e258d17..60f238a 100644 --- a/faction.h +++ b/faction.h @@ -67,4 +67,13 @@ void shuffle_deck(faction); void redraw(faction); +/** + * \brief Fonction renvoie \b true si la main de la faction est vide, \b false sinon + * \return true la main est vide + * \return false la main n'est pas vide + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-03-18 + */ +bool hand_is_empty(faction); + #endif /* FACTION_H */ \ No newline at end of file -- GitLab From b752944792fa6d5f83ed4e644c9381b5ca429706 Mon Sep 17 00:00:00 2001 From: Felicien FISCUS <felicien.fiscus@pc130-11.pedago.ensiie.fr> Date: Fri, 18 Mar 2022 17:50:39 +0100 Subject: [PATCH 018/163] ajout fonction main --- main.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 main.c diff --git a/main.c b/main.c new file mode 100644 index 0000000..cd56cf6 --- /dev/null +++ b/main.c @@ -0,0 +1,43 @@ +/** +*\file main.c +*\brief fonction main gerant le deroulement du jeu via les interfaces incluses : +* \see faction.h carte.h plateau.h OurRandom.h +*\author Felicien Fiscus +*/ + +#include "faction.h" +#include "carte.h" +#include "plateau.h" +#include "stdio.h" +#include "OurRandom.h" + + + +int main(int argc, char** argv) +{ + /**initialisations*/ + + unsigned int lehmerSeed = clock(); + /*le jeu se joue en 3 manches maximum avec 2 phases par manche*/ + int fRound = 1, fPhase = 1; + faction* fFactions[2] = {create_faction(), create_faction()}; + /*choisis de maniere aleatoire une faction qui commence la premiere phase*/ + int first = Lehmer32(&lehmerSeed) % 2; + faction fFirst_faction = fFactions[first]; + faction fSecond_faction = fFactions[1 - first]; + + /*init plateau*/ + board fBoard = create_new_board(); + /**************/ + + /********************************/ + + /*debut phase 1*/ + + /***************/ + + /*liberation de la memoire*/ + free_board(fBoard); + /*************************/ + return 0; +} \ No newline at end of file -- GitLab From e64e0a31758329d261ebac30810441d5e385936b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?f=C3=A9licien=20fiscus-gay?= <felicien.fiscus@ensiie.fr> Date: Fri, 18 Mar 2022 22:06:50 +0100 Subject: [PATCH 019/163] ajout de la phase 1 main.c --- main.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/main.c b/main.c index cd56cf6..b6c38c6 100644 --- a/main.c +++ b/main.c @@ -10,6 +10,7 @@ #include "plateau.h" #include "stdio.h" #include "OurRandom.h" +#include "interface.h" @@ -26,16 +27,34 @@ int main(int argc, char** argv) faction fFirst_faction = fFactions[first]; faction fSecond_faction = fFactions[1 - first]; - /*init plateau*/ + /*init le plateau*/ board fBoard = create_new_board(); /**************/ /********************************/ - /*debut phase 1*/ - + /*phase 1: chacun son tour, les factions pose une carte sur la table, en commençant par la premiere faction*/ + while(!hand_is_empty(fFirst_faction) && !hand_is_empty(fSecond_faction)) + { + /*pour la premiere faction*/ + card* card_to_place = choose_card_to_place(fFirst_faction); + /*WARNING: attention au pointeur int de retour, est-ce que c'est alloué sur la heap ?*/ + int* card_coords = where_to_place_card(fFirst_faction, *card_to_place); + put_card(fBoard, card_to_place, card_coords[0], card_coords[1]); + + /*pour la deuxieme faction*/ + card* card_to_place = choose_card_to_place(fSecond_faction); + /*WARNING: attention au pointeur int de retour, est-ce que c'est alloué sur la heap ?*/ + int* card_coords = where_to_place_card(fSecond_faction, *card_to_place); + put_card(fBoard, card_to_place, card_coords[0], card_coords[1]); + + } /***************/ + /*phase 2*/ + + /********************/ + /*liberation de la memoire*/ free_board(fBoard); /*************************/ -- GitLab From df5df35a98eb180b346421bd46d7477eeaf467c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?f=C3=A9licien=20fiscus-gay?= <felicien.fiscus@ensiie.fr> Date: Sat, 19 Mar 2022 19:32:15 +0100 Subject: [PATCH 020/163] =?UTF-8?q?modification=20du=20systeme=20de=20coor?= =?UTF-8?q?donn=C3=A9es=20fourni=20au=20main.c?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- interface.h | 4 ++-- main.c | 10 ++++------ plateau.h | 7 +++---- 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/interface.h b/interface.h index 0285a03..98a442e 100644 --- a/interface.h +++ b/interface.h @@ -52,11 +52,11 @@ card* choose_card_to_place(faction); /** * \brief Fonction demande quelle position la faction \b param1 souhaite poser sa carte \b param2 * \param param1, param2 faction qui souhaite poser une carte ne peut être NULL, carte à poser ne peut être NULL - * \return int[2] Les coordonnées de la carte a placer sur le plateau + * \return int Les coordonnées 2D converti en 1D (= x + y * LargeurTableau) de la carte a placer sur le plateau * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) * \date 2022-03-18 */ -int* where_to_place_card(faction, card); +int where_to_place_card(faction, card); /** * \brief Fonction affiche les effets de la carte retournée diff --git a/main.c b/main.c index b6c38c6..51d7f95 100644 --- a/main.c +++ b/main.c @@ -38,15 +38,13 @@ int main(int argc, char** argv) { /*pour la premiere faction*/ card* card_to_place = choose_card_to_place(fFirst_faction); - /*WARNING: attention au pointeur int de retour, est-ce que c'est alloué sur la heap ?*/ - int* card_coords = where_to_place_card(fFirst_faction, *card_to_place); - put_card(fBoard, card_to_place, card_coords[0], card_coords[1]); + int card_coords = where_to_place_card(fFirst_faction, *card_to_place); + put_card(fBoard, card_to_place, card_coords); /*pour la deuxieme faction*/ card* card_to_place = choose_card_to_place(fSecond_faction); - /*WARNING: attention au pointeur int de retour, est-ce que c'est alloué sur la heap ?*/ - int* card_coords = where_to_place_card(fSecond_faction, *card_to_place); - put_card(fBoard, card_to_place, card_coords[0], card_coords[1]); + int card_coords = where_to_place_card(fSecond_faction, *card_to_place); + put_card(fBoard, card_to_place, card_coords); } /***************/ diff --git a/plateau.h b/plateau.h index 4cc3bb3..b491ec5 100644 --- a/plateau.h +++ b/plateau.h @@ -78,13 +78,12 @@ faction* display_faction(board p); *\fn void put_card(board p, card c) *\param p de type board *\param c de type card - *\param x de type int - *\param y de type int - *\brief Fonction permettant d'ajouter une carte sur le plateau à la position (x,y), sur le support de jeu pointé par p + *\param coords de type int, les coordonnées 1D de l'emplacement de la carte + *\brief Fonction permettant d'ajouter une carte c sur le plateau à la position coords, sur le support de jeu pointé par p *\return rien */ -void put_card(board p, card c, int x, int y); +void put_card(board p, card c, int coords); -- GitLab From 2851c291b50917a7a8dfbdf6c6d8f1fa81eb0e75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?f=C3=A9licien=20fiscus-gay?= <felicien.fiscus@ensiie.fr> Date: Sat, 19 Mar 2022 19:39:56 +0100 Subject: [PATCH 021/163] modification commentaire --- plateau.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plateau.h b/plateau.h index b491ec5..367fef2 100644 --- a/plateau.h +++ b/plateau.h @@ -75,7 +75,7 @@ faction* display_faction(board p); /** - *\fn void put_card(board p, card c) + *\fn void put_card(board p, card c, int coords) *\param p de type board *\param c de type card *\param coords de type int, les coordonnées 1D de l'emplacement de la carte -- GitLab From f8c5ccc23317ff9d490eebd3e7818a59c53e6214 Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Sat, 19 Mar 2022 20:49:57 +0100 Subject: [PATCH 022/163] =?UTF-8?q?Tache=20A.3=20modifications=20de=20comm?= =?UTF-8?q?entaires=20pour=20la=20derni=C3=A8re=20fonction?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plateau.h | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/plateau.h b/plateau.h index 367fef2..d8fa3a6 100644 --- a/plateau.h +++ b/plateau.h @@ -75,23 +75,24 @@ faction* display_faction(board p); /** - *\fn void put_card(board p, card c, int coords) + *\fn void put_card(board p, card c, int coord) *\param p de type board *\param c de type card - *\param coords de type int, les coordonnées 1D de l'emplacement de la carte - *\brief Fonction permettant d'ajouter une carte c sur le plateau à la position coords, sur le support de jeu pointé par p + *\param coords de type int, la coordonnée 1D de l'emplacement de la carte + *\brief Fonction permettant d'ajouter une carte c sur le plateau à la position coord, sur le support de jeu pointé par p *\return rien */ -void put_card(board p, card c, int coords); +void put_card(board p, card c, int coord); /** *\fn card turn_over_card(board p) *\param p de type board - *\brief Fonction permettant de retourner une carte visible du plateau (celle la plus en haut à gauche) et active son effet - *\return la carte qui a été retournée + *\brief Fonction permettant de retourner une carte visible du plateau si c'est possible (celle la plus en haut à gauche) et active son effet. + * Si cette fonction ne trouve pas de carte à retourner, elle renvoit le pointeur NULL + *\return la carte qui a été retournée ou le pointeur NULL */ -- GitLab From 5fbf64191606d06f8e5fb19f0f561812310af38b Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Sat, 19 Mar 2022 21:38:01 +0100 Subject: [PATCH 023/163] Tache A.3 modification du type de retour de set_round() --- plateau.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plateau.h b/plateau.h index d8fa3a6..6a03a7a 100644 --- a/plateau.h +++ b/plateau.h @@ -51,14 +51,14 @@ void free_board(board p); /** - *\fn void set_round(board p) + *\fn int set_round(board p) *\param p de type board - *\brief Fonction permettant de réinitialiser le support de jeu pointé par p (sans faire de modification sur les factions) - *\return rien + *\brief Fonction permettant de réinitialiser le support de jeu pointé par p (sans faire de modification sur les factions) si la partie n'est pas terminée + *\return un booléen indiquant si le jeu est terminée ou non */ -void set_round(board p); +int set_round(board p); -- GitLab From d2917c975f5adfd44388a03ac3fe8248766c2596 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?f=C3=A9licien=20fiscus-gay?= <felicien.fiscus@ensiie.fr> Date: Sat, 19 Mar 2022 21:48:41 +0100 Subject: [PATCH 024/163] permiere version finale du lotA --- interface.h | 3 +- main.c | 81 ++++++++++++++++++++++++++++++++++++----------------- 2 files changed, 57 insertions(+), 27 deletions(-) diff --git a/interface.h b/interface.h index 98a442e..94dacb0 100644 --- a/interface.h +++ b/interface.h @@ -35,10 +35,11 @@ void display_hand(faction); /** * \brief Fonction demande à la faction \b param1 si elle veut vider sa main, mélanger sa pioche et repiocher * \param param1 faction qui peut repiocher ne peut être NULL. + * \return bool vrai si la faction veut repiocher, faux sinon. * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) * \date 2022-03-18 */ -void want_to_redraw(faction); +bool want_to_redraw(faction); /** * \brief Fonction demande à la faction \b param1 quelle carte de sa main elle veut poser face cachée sur le plateau diff --git a/main.c b/main.c index 51d7f95..2d006e7 100644 --- a/main.c +++ b/main.c @@ -16,42 +16,71 @@ int main(int argc, char** argv) { - /**initialisations*/ + /**initialisations pre-manche*/ unsigned int lehmerSeed = clock(); /*le jeu se joue en 3 manches maximum avec 2 phases par manche*/ - int fRound = 1, fPhase = 1; - faction* fFactions[2] = {create_faction(), create_faction()}; - /*choisis de maniere aleatoire une faction qui commence la premiere phase*/ - int first = Lehmer32(&lehmerSeed) % 2; - faction fFirst_faction = fFactions[first]; - faction fSecond_faction = fFactions[1 - first]; - - /*init le plateau*/ + int fRound = 1; + /*init le plateau et le jeu */ board fBoard = create_new_board(); - /**************/ /********************************/ - - /*phase 1: chacun son tour, les factions pose une carte sur la table, en commençant par la premiere faction*/ - while(!hand_is_empty(fFirst_faction) && !hand_is_empty(fSecond_faction)) + do { - /*pour la premiere faction*/ - card* card_to_place = choose_card_to_place(fFirst_faction); - int card_coords = where_to_place_card(fFirst_faction, *card_to_place); - put_card(fBoard, card_to_place, card_coords); + faction fFactions[2] = display_faction(fBoard); + /*choisis de maniere aleatoire une faction qui commence la premiere phase*/ + int first = Lehmer32(&lehmerSeed) % 2; + faction fFirst_faction = fFactions[first]; + faction fSecond_faction = fFactions[1 - first]; + card fTurnedCard = 0; /*servira de stockage pour chaque carte qui sera retournee*/ - /*pour la deuxieme faction*/ - card* card_to_place = choose_card_to_place(fSecond_faction); - int card_coords = where_to_place_card(fSecond_faction, *card_to_place); - put_card(fBoard, card_to_place, card_coords); + /*au début chaque tour, on demande si les factions veulent repiocher (s'il le peuvent)*/ + if(has_mulligan(fFirst_faction) && want_to_redraw(fFirst_faction)) + { + declare_mulligan(fFirst_faction); + } + if(has_mulligan(fSecond_faction) && want_to_redraw(fSecond_faction)) + { + declare_mulligan(fSecond_faction); + } - } - /***************/ + /*phase 1: chacun son tour, les factions pose une carte sur la table, en commençant par la premiere faction*/ + + display_board(fBoard); + while(!hand_is_empty(fFirst_faction) && !hand_is_empty(fSecond_faction)) + { + /*pour la premiere faction*/ + card* card_to_place = choose_card_to_place(fFirst_faction); + int card_coords = where_to_place_card(fFirst_faction, *card_to_place); + put_card(fBoard, card_to_place, card_coords); + + display_board(fBoard); /*afficher le plateau à chaque mise à jour de celui-ci*/ + + /*pour la deuxieme faction*/ + card_to_place = choose_card_to_place(fSecond_faction); + card_coords = where_to_place_card(fSecond_faction, *card_to_place); + put_card(fBoard, card_to_place, card_coords); + + display_board(fBoard); + + } + /***************/ + + /*phase 2: on retourne toute les cartes posées sur le plateau et active leur effet*/ + /*douteux je sais, mais l'affectation retourne le membre de gauche, ici fTurnedCard qui est bien ce qu'on veut tester*/ + while(fTurnedCard = turn_over_card(fBoard)) /*equivalent à fTurnedCard = turn_over_card; while(fTurnedCard){...} sauf qu'ici on le fait à chaque tour de boucle*/ + { + /*d'abord on montre quelle est la nouvelle carte retournée*/ + display_board(fBoard); + /*et après on montre les effets qu'elle a fait*/ + display_card_effects(fTurnedCard); + } + /********************/ + + display_winner(fBoard); + + }while(set_round(fBoard)); - /*phase 2*/ - - /********************/ /*liberation de la memoire*/ free_board(fBoard); -- GitLab From 447a541a09ce083241200e1ff89af808dedd4e18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?f=C3=A9licien=20fiscus-gay?= <felicien.fiscus@ensiie.fr> Date: Sat, 19 Mar 2022 22:20:29 +0100 Subject: [PATCH 025/163] 2eme version finale du main.c --- main.c | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/main.c b/main.c index 2d006e7..62f20f0 100644 --- a/main.c +++ b/main.c @@ -20,25 +20,41 @@ int main(int argc, char** argv) unsigned int lehmerSeed = clock(); /*le jeu se joue en 3 manches maximum avec 2 phases par manche*/ - int fRound = 1; + int fRound = 0; /*init le plateau et le jeu */ board fBoard = create_new_board(); + faction fFactions[2] = display_faction(fBoard); + card fTurnedCard = 0; /*servira de stockage pour chaque carte qui sera retournee*/ + faction fFirst_faction = 0; + faction fSecond_faction = 0; /********************************/ do { - faction fFactions[2] = display_faction(fBoard); - /*choisis de maniere aleatoire une faction qui commence la premiere phase*/ - int first = Lehmer32(&lehmerSeed) % 2; - faction fFirst_faction = fFactions[first]; - faction fSecond_faction = fFactions[1 - first]; - card fTurnedCard = 0; /*servira de stockage pour chaque carte qui sera retournee*/ + /*check si on est au tour 1 ou au tour 3*/ + if((++fRound) % 2 == 1) /*je sais c'est complique pour rien, mais c'est drole hehe et puis les modulos c'est la vie*/ + { + /*choisis de maniere aleatoire une faction qui commence la premiere phase*/ + int first = Lehmer32(&lehmerSeed) % 2; + fFirst_faction = fFactions[first]; + fSecond_faction = fFactions[1 - first]; + } + else /*echange les deux factions de place 1ere = 2eme et 2eme = 1ere*/ + { + faction buff = fFirst_faction; + fFirst_faction = fSecond_faction; + fSecond_faction = buff; + } + /*au début chaque tour, on demande si les factions veulent repiocher (s'il le peuvent)*/ + display_hand(fFirst_faction); if(has_mulligan(fFirst_faction) && want_to_redraw(fFirst_faction)) { declare_mulligan(fFirst_faction); } + + display_hand(fSecond_faction); if(has_mulligan(fSecond_faction) && want_to_redraw(fSecond_faction)) { declare_mulligan(fSecond_faction); @@ -77,10 +93,10 @@ int main(int argc, char** argv) } /********************/ - display_winner(fBoard); - }while(set_round(fBoard)); - + + /*LE GAGNANT !! C'EEEST POUUUR GAGNEEEER !!! oui.*/ + display_winner(fBoard); /*liberation de la memoire*/ free_board(fBoard); -- GitLab From 4d1342a14bfcdd198a7421997bc7bdab429a2560 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?f=C3=A9licien=20fiscus-gay?= <felicien.fiscus@ensiie.fr> Date: Sat, 19 Mar 2022 23:53:51 +0100 Subject: [PATCH 026/163] Ajout du projet GanttProject --- DiagrammeGantt.gan | 81 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 DiagrammeGantt.gan diff --git a/DiagrammeGantt.gan b/DiagrammeGantt.gan new file mode 100644 index 0000000..bffbdbd --- /dev/null +++ b/DiagrammeGantt.gan @@ -0,0 +1,81 @@ +<?xml version="1.0" encoding="UTF-8"?><project name="Le projet de qualité supérieure" company="L'organisation de qualité supérieure" webLink="http://Leprojetdequalitésupériores" view-date="2022-03-13" view-index="0" gantt-divider-location="300" resource-divider-location="300" version="3.1.3103" locale="fr_FR"> + <description> + <![CDATA[Un jeu de carte fait en C de qualité supérieure, avec une équipe de qualité supérieure.]]> + </description> + <view zooming-state="default:0" id="gantt-chart"> + <field id="tpd3" name="Nom" width="155" order="0"/> + <field id="tpd4" name="Date de début" width="81" order="1"/> + <field id="tpd5" name="Date de fin" width="60" order="2"/> + </view> + <view id="resource-table"> + <field id="0" name="Nom" width="210" order="0"/> + <field id="1" name="Rôle par défaut" width="86" order="1"/> + </view> + <!-- --> + <calendars> + <day-types> + <day-type id="0"/> + <day-type id="1"/> + <default-week id="1" name="default" sun="1" mon="0" tue="0" wed="0" thu="0" fri="0" sat="1"/> + <only-show-weekends value="false"/> + <overriden-day-types/> + <days/> + </day-types> + </calendars> + <tasks empty-milestones="true"> + <taskproperties> + <taskproperty id="tpd0" name="type" type="default" valuetype="icon"/> + <taskproperty id="tpd1" name="priority" type="default" valuetype="icon"/> + <taskproperty id="tpd2" name="info" type="default" valuetype="icon"/> + <taskproperty id="tpd3" name="name" type="default" valuetype="text"/> + <taskproperty id="tpd4" name="begindate" type="default" valuetype="date"/> + <taskproperty id="tpd5" name="enddate" type="default" valuetype="date"/> + <taskproperty id="tpd6" name="duration" type="default" valuetype="int"/> + <taskproperty id="tpd7" name="completion" type="default" valuetype="int"/> + <taskproperty id="tpd8" name="coordinator" type="default" valuetype="text"/> + <taskproperty id="tpd9" name="predecessorsr" type="default" valuetype="text"/> + </taskproperties> + <task id="1" name="A.2" color="#8cb6ce" meeting="false" start="2022-03-17" duration="1" complete="100" thirdDate="2022-03-17" thirdDate-constraint="0" expand="true"> + <depend id="0" type="2" difference="0" hardness="Strong"/> + </task> + <task id="2" name="A.3" color="#8cb6ce" meeting="false" start="2022-03-17" duration="1" complete="100" thirdDate="2022-03-17" thirdDate-constraint="0" expand="true"> + <depend id="0" type="2" difference="0" hardness="Strong"/> + </task> + <task id="3" name="A.4" color="#8cb6ce" meeting="false" start="2022-03-17" duration="1" complete="100" thirdDate="2022-03-17" thirdDate-constraint="0" expand="true"> + <depend id="0" type="2" difference="0" hardness="Strong"/> + </task> + <task id="0" name="A.1" color="#8cb6ce" meeting="false" start="2022-03-18" duration="2" complete="100" thirdDate="2022-03-23" thirdDate-constraint="0" expand="true"> + <depend id="11" type="2" difference="0" hardness="Strong"/> + <depend id="12" type="2" difference="0" hardness="Strong"/> + <depend id="13" type="2" difference="0" hardness="Strong"/> + <depend id="14" type="2" difference="0" hardness="Strong"/> + <depend id="15" type="2" difference="0" hardness="Strong"/> + <depend id="16" type="2" difference="0" hardness="Strong"/> + <depend id="17" type="2" difference="0" hardness="Strong"/> + <depend id="18" type="2" difference="0" hardness="Strong"/> + </task> + <task id="11" name="B.1" color="#8cb6ce" meeting="false" start="2022-03-22" duration="15" complete="0" thirdDate="2022-03-11" thirdDate-constraint="0" expand="true"/> + <task id="12" name="B.2" color="#8cb6ce" meeting="false" start="2022-03-22" duration="15" complete="0" thirdDate="2022-03-11" thirdDate-constraint="0" expand="true"/> + <task id="13" name="B.3" color="#8cb6ce" meeting="false" start="2022-03-22" duration="15" complete="0" thirdDate="2022-03-11" thirdDate-constraint="0" expand="true"/> + <task id="14" name="B.4" color="#8cb6ce" meeting="false" start="2022-03-22" duration="15" complete="0" thirdDate="2022-03-11" thirdDate-constraint="0" expand="true"/> + <task id="15" name="B.5" color="#8cb6ce" meeting="false" start="2022-03-22" duration="15" complete="0" thirdDate="2022-03-11" thirdDate-constraint="0" expand="true"/> + <task id="16" name="B.6" color="#8cb6ce" meeting="false" start="2022-03-22" duration="15" complete="0" thirdDate="2022-03-11" thirdDate-constraint="0" expand="true"/> + <task id="17" name="B.7" color="#8cb6ce" meeting="false" start="2022-03-22" duration="15" complete="0" thirdDate="2022-03-11" thirdDate-constraint="0" expand="true"/> + <task id="18" name="B.8" color="#8cb6ce" meeting="false" start="2022-03-22" duration="15" complete="0" thirdDate="2022-03-11" thirdDate-constraint="0" expand="true"/> + </tasks> + <resources> + <resource id="0" name="Coreau Aurelien" function="Default:0" contacts="aurelien.coreau@ensiie.fr" phone=""/> + <resource id="1" name="Fond Martin" function="Default:0" contacts="martin.fond@ensiie.fr" phone=""/> + <resource id="2" name="Desrumeaux Lucas" function="Default:0" contacts="lucas.desrumeaux@ensiie.fr" phone=""/> + <resource id="3" name="Fiscus Félicien" function="Default:0" contacts="felicien.fiscus@ensiie.fr" phone=""/> + </resources> + <allocations> + <allocation task-id="2" resource-id="0" function="Default:0" responsible="false" load="100.0"/> + <allocation task-id="1" resource-id="1" function="Default:0" responsible="false" load="100.0"/> + <allocation task-id="3" resource-id="2" function="Default:0" responsible="false" load="100.0"/> + <allocation task-id="0" resource-id="3" function="Default:0" responsible="false" load="100.0"/> + </allocations> + <vacations/> + <previous/> + <roles roleset-name="Default"/> +</project> -- GitLab From b5a49bde3f1eb6baba3448f8d245b8b6a93fce50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?f=C3=A9licien=20fiscus-gay?= <felicien.fiscus@ensiie.fr> Date: Sun, 20 Mar 2022 01:31:31 +0100 Subject: [PATCH 027/163] version qui compile (hormis display_winner) --- OurRandom.c | 12 ++++++------ OurRandom.h | 5 +++-- main.c | 10 +++++----- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/OurRandom.c b/OurRandom.c index 6af488a..414f9d8 100644 --- a/OurRandom.c +++ b/OurRandom.c @@ -1,13 +1,13 @@ #include "OurRandom.h" -u_int32_t Lehmer32(unsigned int* nLehmer) +uint32_t Lehmer32(unsigned int* nLehmer) { /*shenanigans*/ *nLehmer += 0xe120fc15; - u_int64_t tmp; - tmp = (u_int64_t)(*nLehmer) * 0x4a39b70d; - u_int32_t m1 = (tmp >> 32) ^ tmp; - tmp = (u_int64_t)m1 * 0x12fad5c9; - u_int32_t m2 = (tmp >> 32) ^ tmp; + uint64_t tmp; + tmp = (uint64_t)(*nLehmer) * 0x4a39b70d; + uint32_t m1 = (tmp >> 32) ^ tmp; + tmp = (uint64_t)m1 * 0x12fad5c9; + uint32_t m2 = (tmp >> 32) ^ tmp; return m2; } \ No newline at end of file diff --git a/OurRandom.h b/OurRandom.h index 272af35..963a131 100644 --- a/OurRandom.h +++ b/OurRandom.h @@ -9,8 +9,9 @@ */ -#include <stdio.h> #include <stdlib.h> +#include <stdio.h> +#include <stdint.h> #include <time.h> /**Lehmer documentation @@ -21,6 +22,6 @@ *\param nLehmer : the seed to use *\return a pseudo random big number, stored on 32bits. */ -u_int32_t Lehmer32(unsigned int* nLehmer); +uint32_t Lehmer32(unsigned int* nLehmer); #endif /*OUR_RANDOM_H*/ \ No newline at end of file diff --git a/main.c b/main.c index 62f20f0..b96d3ce 100644 --- a/main.c +++ b/main.c @@ -14,7 +14,7 @@ -int main(int argc, char** argv) +int main(/*int argc, char** argv*/) { /**initialisations pre-manche*/ @@ -23,7 +23,7 @@ int main(int argc, char** argv) int fRound = 0; /*init le plateau et le jeu */ board fBoard = create_new_board(); - faction fFactions[2] = display_faction(fBoard); + faction* fFactions = display_faction(fBoard); card fTurnedCard = 0; /*servira de stockage pour chaque carte qui sera retournee*/ faction fFirst_faction = 0; faction fSecond_faction = 0; @@ -68,14 +68,14 @@ int main(int argc, char** argv) /*pour la premiere faction*/ card* card_to_place = choose_card_to_place(fFirst_faction); int card_coords = where_to_place_card(fFirst_faction, *card_to_place); - put_card(fBoard, card_to_place, card_coords); + put_card(fBoard, *card_to_place, card_coords); display_board(fBoard); /*afficher le plateau à chaque mise à jour de celui-ci*/ /*pour la deuxieme faction*/ card_to_place = choose_card_to_place(fSecond_faction); card_coords = where_to_place_card(fSecond_faction, *card_to_place); - put_card(fBoard, card_to_place, card_coords); + put_card(fBoard, *card_to_place, card_coords); display_board(fBoard); @@ -84,7 +84,7 @@ int main(int argc, char** argv) /*phase 2: on retourne toute les cartes posées sur le plateau et active leur effet*/ /*douteux je sais, mais l'affectation retourne le membre de gauche, ici fTurnedCard qui est bien ce qu'on veut tester*/ - while(fTurnedCard = turn_over_card(fBoard)) /*equivalent à fTurnedCard = turn_over_card; while(fTurnedCard){...} sauf qu'ici on le fait à chaque tour de boucle*/ + while((fTurnedCard = turn_over_card(fBoard))) /*equivalent à fTurnedCard = turn_over_card; while(fTurnedCard){...} sauf qu'ici on le fait à chaque tour de boucle*/ { /*d'abord on montre quelle est la nouvelle carte retournée*/ display_board(fBoard); -- GitLab From ddb50f0dc317c064001512088450ff278f6a2bc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?f=C3=A9licien=20fiscus-gay?= <felicien.fiscus@ensiie.fr> Date: Sun, 20 Mar 2022 15:27:44 +0100 Subject: [PATCH 028/163] =?UTF-8?q?ajout=20de=20diplay=5Fhand=20apr=C3=A8s?= =?UTF-8?q?=20repioche?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/main.c b/main.c index b96d3ce..cdeea68 100644 --- a/main.c +++ b/main.c @@ -52,14 +52,15 @@ int main(/*int argc, char** argv*/) if(has_mulligan(fFirst_faction) && want_to_redraw(fFirst_faction)) { declare_mulligan(fFirst_faction); + display_hand(fFirst_faction); } display_hand(fSecond_faction); if(has_mulligan(fSecond_faction) && want_to_redraw(fSecond_faction)) { declare_mulligan(fSecond_faction); + display_hand(fSecond_faction); } - /*phase 1: chacun son tour, les factions pose une carte sur la table, en commençant par la premiere faction*/ display_board(fBoard); -- GitLab From 7a6727261c23cfb4df3dfb8afdf014be12bb4bf5 Mon Sep 17 00:00:00 2001 From: Martin Fond <martin.fond@ensiie.fr> Date: Sun, 20 Mar 2022 19:10:18 +0100 Subject: [PATCH 029/163] [LotA][A.2] Mise a jour commentaires doxygen et ajout de delete_faction --- carte.h | 7 ++-- faction.h | 99 +++++++++++++++++++++++++++++++++++++++++-------------- 2 files changed, 80 insertions(+), 26 deletions(-) diff --git a/carte.h b/carte.h index 82ffb86..916fbd5 100644 --- a/carte.h +++ b/carte.h @@ -10,14 +10,17 @@ * */ -/** +/* Creation d'un type carte contenant toutes les informations relatives a une carte : -Nom -Id -Nombre d'occurences dans un deck -Description de l'effet */ - +/** +*\brief Creation d'un type carte contenant toutes les informations relatives a une carte independament du reste du jeu. +*\struct card +*/ typedef struct card* card; diff --git a/faction.h b/faction.h index 60f238a..a9d5d06 100644 --- a/faction.h +++ b/faction.h @@ -11,68 +11,119 @@ */ /** -Creation d'un type faction contenant toutes les informations relatives a un joueur +*\brief Creation d'un type faction contenant toutes les informations relatives a un joueur y compris sa pioche. +*\struct faction */ typedef struct faction* faction; typedef int bool; -/** -@requires rien \n -@assigns rien \n +/* +@requires rien +@assigns rien @ensures Retourne un faction initialisee +*/ +/** *\brief Cree une faction initialisee +*\fn faction create_faction() +*\return Une faction initialisee */ faction create_faction(); +/* +@requires faction est initialisee +@assigns faction +@ensures supprime la faction et libere la memoire +*/ /** -@requires rien \n -@assigns rien \n +*\brief Supprime une faction +*\param param1 faction a supprimer +*\fn void delete_faction() +*\return rien +*/ + +void delete_faction(faction); + +/* +@requires rien +@assigns rien @ensures Retourne vrai si la faction a relancee sa main et repiochee */ +/** +*\brief Retourne vrai si la faction a relancee sa main et repiochee +*\fn bool has_mulligan(faction) +*\param param1 faction dont on verifie l'utilisation de la repioche +*\return un booleen indiquant si la faction a mulligan +*/ bool has_mulligan(faction); +/* +@requires rien +@assigns La faction +@ensures Remelange la main et la pioche de la faction, repioche 8 cartes +*/ /** -@requires : rien \n -@assigns : La faction \n -@ensures : Remelange la main et la pioche de la faction, repioche 8 cartes +*\brief Remelange la main et la pioche de la faction, repioche 8 cartes +*\fn void declare_mulligan(faction) +*\param param1 faction qui desire repiocher +*\return rien */ - void declare_mulligan(faction); +/* +@requires rien +@assigns La faction +@ensures Vide la main dans la pioche +*/ + /** -@requires : rien \n -@assigns : La faction \n -@ensures : Vide la main dans la pioche +*\brief Vide la main de la faction dans sa pioche +*\fn void empty_hand(faction) +*\param param1 faction dont on vide la main +*\return rien */ void empty_hand(faction); -/** -@requires rien \n -@assigns La faction \n +/* +@requires rien +@assigns La faction @ensures Melange la pioche */ +/** +*\brief Melange la pioche d'une faction +*\fn void shuffle_deck(faction) +*\param param1 faction dont on melange la main +*\return rien +*/ + void shuffle_deck(faction); -/** -@requires rien \n -@assigns La faction \n +/* +@requires rien +@assigns La faction @ensures Met 8 cartes de la pioche dans la main */ +/** +*\brief Pioche 8 cartes +*\fn redraw(faction) +*\param param1 faction qui repioche +*\return rien +*/ + void redraw(faction); /** - * \brief Fonction renvoie \b true si la main de la faction est vide, \b false sinon - * \return true la main est vide - * \return false la main n'est pas vide - * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) - * \date 2022-03-18 +* \brief Fonction renvoie \b true si la main de la faction est vide, \b false sinon +* \fn hand_is_empty(faction) +* \param param1 faction dont on verifie la main +* \return true la main est vide +* \return false la main n'est pas vide */ bool hand_is_empty(faction); -- GitLab From b819cbd53d2eda2396cd50aea06917df172e702a Mon Sep 17 00:00:00 2001 From: Lucas Desrumeaux <lucas@carjager.com> Date: Sun, 20 Mar 2022 21:12:32 +0100 Subject: [PATCH 030/163] Changement attribut de display_winner dans interface.h --- interface.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interface.h b/interface.h index 0285a03..5197adb 100644 --- a/interface.h +++ b/interface.h @@ -68,11 +68,11 @@ void display_card_effects(card); /** * \brief Fonction affiche le vainqueur de la partie - * \param param1 Faction qui à gagné + * \param param1 Board pour connaître l'état de la partie * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) * \date 2022-03-18 */ -void display_winner(faction); +void display_winner(board); #endif /*INTERFACE_H*/ \ No newline at end of file -- GitLab From 83bd494b0ca5fd18c6e57b81f34e558dc529801a Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Tue, 22 Mar 2022 10:10:35 +0100 Subject: [PATCH 031/163] =?UTF-8?q?Tache=20B.1=20:=20d=C3=A9but=20du=20Mak?= =?UTF-8?q?efile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 887ff51..64dce50 100644 --- a/Makefile +++ b/Makefile @@ -1 +1,41 @@ -oui \ No newline at end of file +CC = gcc -Wall -std=c99 + +SRC = "../src/" + +BIN = "../bin/" + +HDS = "../headers/" + +OBJ = "../obj/" + + + +OBJETS = main.o OurRandom.o structure.o carte.o faction.o plateau.o interface.o + +all : testmain + + +testmain : $(OBJETS) + $(CC) -o $@ $(OBJ) + +main.o : main.c carte.h faction.h plateau.h interface.h OurRandom.h + $(CC) -c $< + +OurRandom.o : OurRandom.c OurRandom.h + $(CC) -c $< + +structure.o : structure.c structure.h + $(CC) -c $< + +carte.o : carte.c carte.h structure.h + $(CC) -c $< + +faction.o : faction.c faction.h structure.h + $(CC) -c $< + +plateau.o : plateau.c plateau.h structure.h carte.h faction.h + $(CC) -c $< + +interface.o : interface.c interface.h carte.h faction.h plateau.h + $(CC) -c $< + -- GitLab From 49b13b1b2ec5663ab0095cdc7405a7f13486d8ba Mon Sep 17 00:00:00 2001 From: "martin.fond" <martin.fond@ensiie.fr> Date: Tue, 22 Mar 2022 10:40:05 +0100 Subject: [PATCH 032/163] [LotB][B.4] Commit variables globales --- faction.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/faction.h b/faction.h index a9d5d06..4041151 100644 --- a/faction.h +++ b/faction.h @@ -10,6 +10,12 @@ * */ + +#define HAND_SIZE 8 +#define DECK_SIZE 47 + + + /** *\brief Creation d'un type faction contenant toutes les informations relatives a un joueur y compris sa pioche. -- GitLab From 456f66523e144e9a76ea14f001a958a105f23698 Mon Sep 17 00:00:00 2001 From: "martin.fond" <martin.fond@ensiie.fr> Date: Tue, 22 Mar 2022 11:08:50 +0100 Subject: [PATCH 033/163] [LotB][B.4] Ajout constantes et variable globales --- plateau.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/plateau.h b/plateau.h index 6a03a7a..47eeda8 100644 --- a/plateau.h +++ b/plateau.h @@ -16,6 +16,14 @@ #include "carte.h" #include "faction.h" +#ifdef HAND_SIZE +#define BOARD_SIZE (2*HAND_SIZE -1) +#endif + +#define WIN_NUMBER + + + /** *\struct board -- GitLab From de41061dccd5881b37d8fa63fd36868f56d7e6ae Mon Sep 17 00:00:00 2001 From: "martin.fond" <martin.fond@ensiie.fr> Date: Tue, 22 Mar 2022 11:50:17 +0100 Subject: [PATCH 034/163] [LotB][B.4] Commit variable globales 2 --- faction.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/faction.h b/faction.h index 4041151..c92fd10 100644 --- a/faction.h +++ b/faction.h @@ -11,6 +11,10 @@ */ +/** +*\brief declaration des variables globales +*/ + #define HAND_SIZE 8 #define DECK_SIZE 47 -- GitLab From fc587fd9c169c0658ba7f7cc84de1bcee11494ac Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Tue, 22 Mar 2022 12:12:09 +0100 Subject: [PATCH 035/163] Tache B.1 : modification du Makefile, ajout et modifications de constantes, ajout de deux nouvelles commandes (clear, doxygen), prise en compte des dossiers --- Makefile | 63 +++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 40 insertions(+), 23 deletions(-) diff --git a/Makefile b/Makefile index 64dce50..d2647dc 100644 --- a/Makefile +++ b/Makefile @@ -1,41 +1,58 @@ -CC = gcc -Wall -std=c99 +CC = gcc +CFLAGS = -Wall -Wextra -std=c99 -SRC = "../src/" +TARGET = ./bin/testmain -BIN = "../bin/" +OBJS = ./obj/main.o ./obj/OurRandom.o ./obj/structure.o ./obj/carte.o ./obj/faction.o ./obj/plateau.o ./obj/interface.o -HDS = "../headers/" +all : $(TARGET) -OBJ = "../obj/" +$(TARGET) : $(OBJS) + $(CC) $(CFLAGS) -o $@ $(OBJS) -OBJETS = main.o OurRandom.o structure.o carte.o faction.o plateau.o interface.o -all : testmain +./obj/main.o : ./src/main.c ./headers/carte.h ./headers/faction.h ./headers/plateau.h ./headers/interface.h ./headers/OurRandom.h + $(CC) $(CFLAGS) -c $< -testmain : $(OBJETS) - $(CC) -o $@ $(OBJ) -main.o : main.c carte.h faction.h plateau.h interface.h OurRandom.h - $(CC) -c $< -OurRandom.o : OurRandom.c OurRandom.h - $(CC) -c $< +./obj/OurRandom.o : ./src/OurRandom.c ./headers/OurRandom.h + $(CC) $(CFLAGS) -c $< -structure.o : structure.c structure.h - $(CC) -c $< -carte.o : carte.c carte.h structure.h - $(CC) -c $< -faction.o : faction.c faction.h structure.h - $(CC) -c $< +./obj/structure.o : ./src/structure.c ./headers/structure.h + $(CC) $(CFLAGS) -c $< -plateau.o : plateau.c plateau.h structure.h carte.h faction.h - $(CC) -c $< -interface.o : interface.c interface.h carte.h faction.h plateau.h - $(CC) -c $< +./obj/carte.o : ./src/carte.c ./headers/carte.h ./headers/structure.h + $(CC) $(CFLAGS) -c $< + + + +./obj/faction.o : ./src/faction.c ./headers/faction.h ./headers/structure.h + $(CC) $(CFLAGS) -c $< + + + +./obj/plateau.o : ./src/plateau.c ./headers/plateau.h ./headers/structure.h ./headers/carte.h ./headers/faction.h + $(CC) $(CFLAGS) -c $< + + + +./obj/interface.o : ./src/interface.c ./headers/interface.h ./headers/carte.h ./headers/faction.h ./headers/plateau.h + $(CC) $(CFLAGS) -c $< + + + +doc : doxygen + + + +clean : + rm -f $(TARGET) + rm -f $(OBJS) \ No newline at end of file -- GitLab From fb4c4a7751cf0a48d60f701876a86792e974c896 Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Tue, 22 Mar 2022 12:19:25 +0100 Subject: [PATCH 036/163] =?UTF-8?q?correction=20d'une=20faute=20de=20fran?= =?UTF-8?q?=C3=A7ais?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plateau.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plateau.h b/plateau.h index 47eeda8..41e94e2 100644 --- a/plateau.h +++ b/plateau.h @@ -62,7 +62,7 @@ void free_board(board p); *\fn int set_round(board p) *\param p de type board *\brief Fonction permettant de réinitialiser le support de jeu pointé par p (sans faire de modification sur les factions) si la partie n'est pas terminée - *\return un booléen indiquant si le jeu est terminée ou non + *\return un booléen indiquant si le jeu est terminé ou non */ -- GitLab From 8d8e8394613a5aba5678a226cdd6be19def2a167 Mon Sep 17 00:00:00 2001 From: Felicien FISCUS <felicien.fiscus@pc225-14.pedago.ensiie.fr> Date: Tue, 22 Mar 2022 12:28:04 +0100 Subject: [PATCH 037/163] [B.3] ajout de structure.h --- faction.h | 9 ----- structure.h | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+), 9 deletions(-) create mode 100644 structure.h diff --git a/faction.h b/faction.h index c92fd10..97d363c 100644 --- a/faction.h +++ b/faction.h @@ -11,14 +11,6 @@ */ -/** -*\brief declaration des variables globales -*/ - -#define HAND_SIZE 8 -#define DECK_SIZE 47 - - /** *\brief Creation d'un type faction contenant toutes les informations relatives a un joueur @@ -27,7 +19,6 @@ y compris sa pioche. */ typedef struct faction* faction; -typedef int bool; /* @requires rien diff --git a/structure.h b/structure.h new file mode 100644 index 0000000..7881a0b --- /dev/null +++ b/structure.h @@ -0,0 +1,102 @@ +#ifndef STRUCTURE_H +#define STRUCTURE_H + +/** + * \file structure.h + * \brief gere les structures de données (tableau, file, pile, ...) utilisées dans les fichiers plateau.h faction.h et carte.h + * \author Felicien Fiscus + */ + +/*pratique*/ +typedef enum bool +{ + false, true +} bool; + +/*Structure pile et list chainee utilisees dans la suite*/ + +/**\struct +* +*/ +struct Node +{ + +} + + +/*************************************/ + +typedef enum CardType +{ + FISE, FISA, FC, EcologIIE, lIIEns, Soiree_sans_alcool, + Alcool, Cafe, The, Ecocup, Reprographie, Isolation_du_batiment, + Parcours_sobriete_numerique, Heures_supplementaires, Kahina_Bouchama, + Kevin_Goilard, Massinissa_Merabet, Vitera_Y, Jonas_Senizergues, + Fetia_Bannour, Catherine_Dubois, Anne_Laure_Ligozat, Guillaume_Burel, + Christophe_Mouilleron, Thomas_Lim, Julien_Forest, Dimitri_Watel, + Djibril_Aurelien_Dembele_Cabot, Eric_Lejeune, Lucienne_Pacave, + Katrin_Salhab, Laurent_Prevel, CardTypeCount +} CardType; + + +/** + * \brief donne la chaine de caracteres correspondant au CardType + * \param type + * \return la chaine de caracteres, doit etre libere par celui qui l'appelle + */ +char* cardType_toString(CardType type); + +static + +/** + * \struct card + * \brief definition du type abstrait dans carte.h +*/ +struct card +{ + CardType fCardType; + unsigned int fNbOccurences; + char fEffectDesc[MAX_LEN]; +} + +/** + * \struct card + * \brief definition du type abstrait dans carte.h + * +*/ +struct faction +{ + char fNom[MAX_LEN]; + unsigned int fPtsDDRS; + unsigned int fNbRoundWon; + CList fHand; + Pile fDeck; + bool fHasMulligan; +} + +typedef enum CellState +{ + Empty, FaceUp, FaceDown +} CellState; + +/** + * \struct cell + * \brief correspond a case/cellule du plateau de jeu + * + */ +struct cell +{ + card* fCard; + CellState fState; +} + +/** + * \brief utilisee dans plateau.h + */ +struct board +{ + cell fBoard[BOARD_SIZE * BOARD_SIZE]; + faction fFactions[2]; +} + +#endif /*STRUCTURE_H*/ \ No newline at end of file -- GitLab From 2c926d302a15d03d4f93d62695c2ff82f5bcaf6c Mon Sep 17 00:00:00 2001 From: Felicien FISCUS <felicien.fiscus@pc225-14.pedago.ensiie.fr> Date: Tue, 22 Mar 2022 12:32:16 +0100 Subject: [PATCH 038/163] [B.3] ajout de Node --- structure.h | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/structure.h b/structure.h index 7881a0b..89d97ea 100644 --- a/structure.h +++ b/structure.h @@ -15,14 +15,17 @@ typedef enum bool /*Structure pile et list chainee utilisees dans la suite*/ -/**\struct -* +/** \struct Node +* \brief une structure de liste pour les cartes */ struct Node { - + card fCard; + Node* fNext; } +typedef Node* List; + /*************************************/ -- GitLab From 1e46a21a78cce3bcea09b1418e79dffe8c6d9a04 Mon Sep 17 00:00:00 2001 From: Martin Fond <martin.fond@ensiie.fr> Date: Sat, 26 Mar 2022 19:08:15 +0100 Subject: [PATCH 039/163] [LotB][B.6] Ajout des fichiers faction.c carte.c et plateau.c --- OurRandom.h => headers/OurRandom.h | 0 carte.h => headers/carte.h | 0 faction.h => headers/faction.h | 2 +- interface.h => headers/interface.h | 0 plateau.h => headers/plateau.h | 0 structure.h => headers/structure.h | 4 ++-- OurRandom.c => src/OurRandom.c | 0 src/carte.c | 1 + src/faction.c | 38 ++++++++++++++++++++++++++++++ main.c => src/main.c | 10 ++++---- src/plateau.c | 1 + 11 files changed, 48 insertions(+), 8 deletions(-) rename OurRandom.h => headers/OurRandom.h (100%) rename carte.h => headers/carte.h (100%) rename faction.h => headers/faction.h (99%) rename interface.h => headers/interface.h (100%) rename plateau.h => headers/plateau.h (100%) rename structure.h => headers/structure.h (97%) rename OurRandom.c => src/OurRandom.c (100%) create mode 100644 src/carte.c create mode 100644 src/faction.c rename main.c => src/main.c (95%) create mode 100644 src/plateau.c diff --git a/OurRandom.h b/headers/OurRandom.h similarity index 100% rename from OurRandom.h rename to headers/OurRandom.h diff --git a/carte.h b/headers/carte.h similarity index 100% rename from carte.h rename to headers/carte.h diff --git a/faction.h b/headers/faction.h similarity index 99% rename from faction.h rename to headers/faction.h index 97d363c..6f5181f 100644 --- a/faction.h +++ b/headers/faction.h @@ -10,7 +10,7 @@ * */ - +#include "structure.h" /** *\brief Creation d'un type faction contenant toutes les informations relatives a un joueur diff --git a/interface.h b/headers/interface.h similarity index 100% rename from interface.h rename to headers/interface.h diff --git a/plateau.h b/headers/plateau.h similarity index 100% rename from plateau.h rename to headers/plateau.h diff --git a/structure.h b/headers/structure.h similarity index 97% rename from structure.h rename to headers/structure.h index 89d97ea..1ed2e61 100644 --- a/structure.h +++ b/headers/structure.h @@ -20,11 +20,11 @@ typedef enum bool */ struct Node { - card fCard; + struct card fCard; Node* fNext; } -typedef Node* List; +typedef Node* CList; /*************************************/ diff --git a/OurRandom.c b/src/OurRandom.c similarity index 100% rename from OurRandom.c rename to src/OurRandom.c diff --git a/src/carte.c b/src/carte.c new file mode 100644 index 0000000..0c8bcaf --- /dev/null +++ b/src/carte.c @@ -0,0 +1 @@ +#include "../headers/carte.h" \ No newline at end of file diff --git a/src/faction.c b/src/faction.c new file mode 100644 index 0000000..7e1f66d --- /dev/null +++ b/src/faction.c @@ -0,0 +1,38 @@ +#include "../headers/structure.h" +#include "../headers/faction.h" + + +faction create_faction(){ + faction new_faction; + new_faction->fPtsDDRS = 0; + new_faction->fNbRoundWon = 0; + new_faction->fHand = malloc(sizeof(Node)); + new_faction->fDeck = malloc(47*sizeof(card)); + new_faction->fHas_Mulligan = false; + return new_faction; +} + +void delete_faction(faction fac_to_del){ + free(fac_to_del->fHand); + free(fac_to_del->fDeck); + free(fac_to_del); +} + +bool has_mulligan(faction fac_to_test){ + return fac_to_test->fHas_Mulligan; +} + + + +void declare_mulligan(faction fac){ + if (has_mulligan(fac)){return} + + empty_hand(fac); + shuffle_hand(fac); + redraw(fac); + fac->fHas_Mulligan = true; +} + +void empty_hand(faction fac){ + +} \ No newline at end of file diff --git a/main.c b/src/main.c similarity index 95% rename from main.c rename to src/main.c index cdeea68..62a62df 100644 --- a/main.c +++ b/src/main.c @@ -5,12 +5,12 @@ *\author Felicien Fiscus */ -#include "faction.h" -#include "carte.h" -#include "plateau.h" +#include "../headers/faction.h" +#include "../headers/carte.h" +#include "../headers/plateau.h" #include "stdio.h" -#include "OurRandom.h" -#include "interface.h" +#include "../headers/OurRandom.h" +#include "../headers/interface.h" diff --git a/src/plateau.c b/src/plateau.c new file mode 100644 index 0000000..38e6045 --- /dev/null +++ b/src/plateau.c @@ -0,0 +1 @@ +#include "../headers/plateau.h" -- GitLab From 4c4eaf6b50cb0cf84509cc385ea9548f6236de07 Mon Sep 17 00:00:00 2001 From: "martin.fond" <martin.fond@ensiie.fr> Date: Fri, 1 Apr 2022 14:17:34 +0200 Subject: [PATCH 040/163] [LotB][B.4] Ajout des variables globales --- headers/structure.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/headers/structure.h b/headers/structure.h index 1ed2e61..7530c2a 100644 --- a/headers/structure.h +++ b/headers/structure.h @@ -7,6 +7,10 @@ * \author Felicien Fiscus */ +#define HAND_SIZE 8 +#define MAX_LEN 200 +#define BOARD_SIZE 2*HAND_SIZE - 1 + /*pratique*/ typedef enum bool { @@ -60,6 +64,7 @@ struct card CardType fCardType; unsigned int fNbOccurences; char fEffectDesc[MAX_LEN]; + int player; } /** -- GitLab From d5e31fe1f9463ba53253d96b1190d413bf524efa Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Fri, 1 Apr 2022 14:35:54 +0200 Subject: [PATCH 041/163] Tache B1 : ajout de commentaires --- Makefile | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/Makefile b/Makefile index d2647dc..8cff489 100644 --- a/Makefile +++ b/Makefile @@ -1,18 +1,33 @@ +# Déclaration de constantes + + # Par rapport au compilateur gcc + CC = gcc CFLAGS = -Wall -Wextra -std=c99 + # Cible de toutes les compilations, fichier où se trouve la fonction main() + TARGET = ./bin/testmain + # Ensemble des fichiers objets qui vont être générés + OBJS = ./obj/main.o ./obj/OurRandom.o ./obj/structure.o ./obj/carte.o ./obj/faction.o ./obj/plateau.o ./obj/interface.o + + +# Commande permettant de réaliser toutes les compilations nécessaires en même temps pour la cible + all : $(TARGET) +# Création d'un fichier objet associé à la cible $(TARGET) : $(OBJS) $(CC) $(CFLAGS) -o $@ $(OBJS) +# Création des fichiers objets en fonction des dépendances, pour chaque source + ./obj/main.o : ./src/main.c ./headers/carte.h ./headers/faction.h ./headers/plateau.h ./headers/interface.h ./headers/OurRandom.h $(CC) $(CFLAGS) -c $< @@ -49,9 +64,15 @@ $(TARGET) : $(OBJS) + +# Création d'une commande "doc" permettant de lancer l'outil doxygen + + doc : doxygen +# Création d'une commande "clean" permettant de supprimer les fichers objets et la cible + clean : rm -f $(TARGET) -- GitLab From dbb99ffc9be5e571810f06f7824e06227b9df055 Mon Sep 17 00:00:00 2001 From: Felicien FISCUS <felicien.fiscus@pc130-10.pedago.ensiie.fr> Date: Fri, 1 Apr 2022 15:23:19 +0200 Subject: [PATCH 042/163] [LotB][B.3] ajout des methodes pour CList --- headers/structure.h | 88 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 87 insertions(+), 1 deletion(-) diff --git a/headers/structure.h b/headers/structure.h index 7530c2a..e16c38a 100644 --- a/headers/structure.h +++ b/headers/structure.h @@ -28,8 +28,94 @@ struct Node Node* fNext; } -typedef Node* CList; +typedef struct Node* CList; +/** + * \brief fonction pour avoir une liste vide + * \param none + * \return CList vide + */ +CList empty_CList(); + +/** + * \brief permet d'avoir la longueur de la liste + * \param lst la CList + * \return int >= 0 taille de lst + */ +unsigned int size(CList lst); + +/** + * \brief permet d'ajouter une card à la CList, en tête de liste par copie de la card + * \param lst la CList + * \param crd la card a ajouter + * \return la CList avec l'ajout + */ +CList add_card(CList lst, struct card crd); + +/** + * \brief permet d'ajouter une liste deja existante en tete de la CList 'lst', c'est une concaténation + * \param lst la CList a modifier + * \param concat la CList a ajouter à lst, si size(concat) == 0 rien ne sera modifier + * \return la CList modifier + */ +CList add_list(CList lst, CList concat); + +/** + * \brief insert une card a la CList spécifié, a la position spécifié, si aucune n'est spécifié, rien ne se passe + * \param lst CList a modifié + * \param crd la carte à ajouter + * \param index_pos la position en tant qu'index ou sera inserer la carte: la carte après insertion + * sera donc la \a index_pos ème node de la CList. + * si vous voulez insérer en spécifiant la position avec une Node, il suffit de spécifier \a node_pos + * et de mettre \a index_pos à -1. + * \param node_pos la Node où la carte sera insérer: elle sera insérer juste apres node_pos + * si vous voulez insérer en spécifiant la position avec un int, il suffit de spécifier \a index_pos + * et de mettre \a node_pos à NULL + * \return CList la CList résultante avec l'élement insérer ou (si aucune position n'est spécifié) la meme CList que passer en argument + */ +CList insert_where(CList lst, struct card crd, int index_pos, struct Node* node_pos); + +/** + * \brief check si la CList spécifié est vide ou pas + * \param lst la CList à tester + * \return bool true si \a lst a 0 element, false sinon + */ +bool is_empty(CList lst); + + +/** + * \brief enlève un element de la liste spécifié qui correspond à la carte spécifié. + * \param lst la CList à modifié + * \param crd la carte à enlever + * \return CList NULL si aucune carte de \a lst ne correspond à celle spécifié, la CList mis à jour sinon. + */ +CList remove(CList lst, struct card crd); + +/** + * \brief la meme chose que \see remove sauf qu'au lieu de spécifié la carte, + * on spécifie la position de la carte qu'on veut enlever + * \param lst la CList à modifier + * \param index_pos la position en tant qu'index de la carte qui sera retiré. + * si vous voulez retirer un element en spécifiant la position avec une Node, il suffit de spécifier \a node_pos + * et de mettre \a index_pos à -1. + * \param node_pos la Node où la carte sera retiré. + * si vous voulez retirer en spécifiant la position avec un int, il suffit de spécifier \a index_pos + * et de mettre \a node_pos à NULL + * \return CList NULL si la position spécifié est invalide, et la meme CList inchangé si aucune position n'est spécifié + */ +CList remove_where(CList lst, int index_pos, struct Node* node_pos); + +/** + * \struct Stack + * \brief Structure de pile pour gerer le jeu de cartes de chaque faction + * + * + */ +typedef struct Stack +{ + struct card fStack[MAX_LEN]; + struct card fTop; +} Stack; /*************************************/ -- GitLab From a538e238c6664fb8f3da676c7286334e61acc301 Mon Sep 17 00:00:00 2001 From: "martin.fond" <martin.fond@ensiie.fr> Date: Fri, 1 Apr 2022 15:46:17 +0200 Subject: [PATCH 043/163] [LotB][B.6] Premiere implementation de plateau.c --- src/plateau.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/src/plateau.c b/src/plateau.c index 38e6045..26dcf64 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -1 +1,77 @@ #include "../headers/plateau.h" + + +board create_new_board() +{ + board new_board; + int i; + for (i=0; i < BOARD_SIZE* BOARD_SIZE; i += 1) + { + (board->fBoard[i])->fState = Empty; + (board->fBoard[i])->fCard = NULL; + } + + board->fFaction[0] = create_faction(); + board->fFaction[1] = create_faction(); + +} + +void free_board(board p) +{ + delete_faction(p->fFaction[0]); + delete_faction(p->fFaction[1]); +} + +int set_round(board p) +{ + int i; + for (i=0; i < BOARD_SIZE* BOARD_SIZE; i += 1) + { + /* Reinitialisation des cases du tableau */ + (p->fBoard[i])->fState = Empty; + (p->fBoard[i])->fCard = NULL; + } + if (p->fFaction[0] = WIN_NUMBER || p->fFaction[1] = WIN_NUMBER) + { + /* Si un joeur a gagne on renvoi false */ + return false; + } + /* Si aucun joueur n'a gagne on renvoi true et la partie continue */ + return true; +} + +faction* display_faction(board p) +{ + return p->fFaction; +} + +void put_card(board p, card c, int coord) +{ + (p->fBoard[coord])->fCard = c; + (p->fBoard[coord])->fState = FaceDown; +} + + +void card_effect(board p, card c) +{ + return; +} + +card turn_over_card(board p) +{ + card current = (fBoard[0]->fCard); + int index =0; + while (current = NULL && index < BOARD_SIZE) + { + index += 1; + current = fBoard[index]->fCard; + } + if (current != NULL) + { + card_effect(p, current); + } + return current; +} + + + -- GitLab From 369b51d822ad08e24d22fa76bf63fe0468c63677 Mon Sep 17 00:00:00 2001 From: Felicien FISCUS <felicien.fiscus@pc130-10.pedago.ensiie.fr> Date: Fri, 1 Apr 2022 16:05:18 +0200 Subject: [PATCH 044/163] =?UTF-8?q?[LotB][B.3]ajout=20des=20m=C3=A9thodes?= =?UTF-8?q?=20pour=20Stack=20et=20de=20free=5FCList?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- headers/structure.h | 168 ++++++++++++++++++++++++++++++++------------ 1 file changed, 122 insertions(+), 46 deletions(-) diff --git a/headers/structure.h b/headers/structure.h index e16c38a..1419cbf 100644 --- a/headers/structure.h +++ b/headers/structure.h @@ -17,6 +17,39 @@ typedef enum bool false, true } bool; + +typedef enum CardType +{ + FISE, FISA, FC, EcologIIE, lIIEns, Soiree_sans_alcool, + Alcool, Cafe, The, Ecocup, Reprographie, Isolation_du_batiment, + Parcours_sobriete_numerique, Heures_supplementaires, Kahina_Bouchama, + Kevin_Goilard, Massinissa_Merabet, Vitera_Y, Jonas_Senizergues, + Fetia_Bannour, Catherine_Dubois, Anne_Laure_Ligozat, Guillaume_Burel, + Christophe_Mouilleron, Thomas_Lim, Julien_Forest, Dimitri_Watel, + Djibril_Aurelien_Dembele_Cabot, Eric_Lejeune, Lucienne_Pacave, + Katrin_Salhab, Laurent_Prevel, CardTypeCount +} CardType; + + +/** + * \brief donne la chaine de caracteres correspondant au CardType + * \param type + * \return la chaine de caracteres, doit etre libere par celui qui l'appelle + */ +char* cardType_toString(CardType type); + +/** + * \struct card + * \brief definition du type abstrait dans carte.h +*/ +struct card +{ + CardType fCardType; + unsigned int fNbOccurences; + char fEffectDesc[MAX_LEN]; + int player; +} + /*Structure pile et list chainee utilisees dans la suite*/ /** \struct Node @@ -24,7 +57,7 @@ typedef enum bool */ struct Node { - struct card fCard; + struct card* fCard; Node* fNext; } @@ -44,13 +77,28 @@ CList empty_CList(); */ unsigned int size(CList lst); +/** + * \brief insert une card a la CList spécifié, a la position spécifié, si aucune n'est spécifié, rien ne se passe + * \param lst CList a modifié + * \param crd la carte à ajouter + * \param index_pos la position en tant qu'index ou sera inserer la carte: la carte après insertion + * sera donc la \a index_pos ème node de la CList. + * si vous voulez insérer en spécifiant la position avec une Node, il suffit de spécifier \a node_pos + * et de mettre \a index_pos à -1. + * \param node_pos la Node où la carte sera insérer: elle sera insérer juste apres node_pos + * si vous voulez insérer en spécifiant la position avec un int, il suffit de spécifier \a index_pos + * et de mettre \a node_pos à NULL + * \return CList la CList résultante avec l'élement insérer ou (si aucune position n'est spécifié) la meme CList que passer en argument + */ +CList insert_where(CList lst, struct card* crd, int index_pos, struct Node* node_pos); + /** * \brief permet d'ajouter une card à la CList, en tête de liste par copie de la card * \param lst la CList * \param crd la card a ajouter * \return la CList avec l'ajout */ -CList add_card(CList lst, struct card crd); +CList add_card(CList lst, struct card* crd); /** * \brief permet d'ajouter une liste deja existante en tete de la CList 'lst', c'est une concaténation @@ -60,21 +108,6 @@ CList add_card(CList lst, struct card crd); */ CList add_list(CList lst, CList concat); -/** - * \brief insert une card a la CList spécifié, a la position spécifié, si aucune n'est spécifié, rien ne se passe - * \param lst CList a modifié - * \param crd la carte à ajouter - * \param index_pos la position en tant qu'index ou sera inserer la carte: la carte après insertion - * sera donc la \a index_pos ème node de la CList. - * si vous voulez insérer en spécifiant la position avec une Node, il suffit de spécifier \a node_pos - * et de mettre \a index_pos à -1. - * \param node_pos la Node où la carte sera insérer: elle sera insérer juste apres node_pos - * si vous voulez insérer en spécifiant la position avec un int, il suffit de spécifier \a index_pos - * et de mettre \a node_pos à NULL - * \return CList la CList résultante avec l'élement insérer ou (si aucune position n'est spécifié) la meme CList que passer en argument - */ -CList insert_where(CList lst, struct card crd, int index_pos, struct Node* node_pos); - /** * \brief check si la CList spécifié est vide ou pas * \param lst la CList à tester @@ -105,6 +138,14 @@ CList remove(CList lst, struct card crd); */ CList remove_where(CList lst, int index_pos, struct Node* node_pos); +/** + * \brief libere la memoire allouée par la CList + * \param lst CList a libéré si liste vide, la fonction en fait rien + * \return rien + */ +void free_CList(CList lst); + + /** * \struct Stack * \brief Structure de pile pour gerer le jeu de cartes de chaque faction @@ -113,45 +154,80 @@ CList remove_where(CList lst, int index_pos, struct Node* node_pos); */ typedef struct Stack { - struct card fStack[MAX_LEN]; - struct card fTop; + struct card* fStack[MAX_LEN]; + struct card* fTop; } Stack; -/*************************************/ -typedef enum CardType -{ - FISE, FISA, FC, EcologIIE, lIIEns, Soiree_sans_alcool, - Alcool, Cafe, The, Ecocup, Reprographie, Isolation_du_batiment, - Parcours_sobriete_numerique, Heures_supplementaires, Kahina_Bouchama, - Kevin_Goilard, Massinissa_Merabet, Vitera_Y, Jonas_Senizergues, - Fetia_Bannour, Catherine_Dubois, Anne_Laure_Ligozat, Guillaume_Burel, - Christophe_Mouilleron, Thomas_Lim, Julien_Forest, Dimitri_Watel, - Djibril_Aurelien_Dembele_Cabot, Eric_Lejeune, Lucienne_Pacave, - Katrin_Salhab, Laurent_Prevel, CardTypeCount -} CardType; +/*stack methods: empty_stack, is_stack_empty, stack_size, pop, push, head, shuffle, reverse, free_stack*/ +/** + * \brief construit une stack avec 0 éléments + * \param none + * \return pointeur vers la stack initialiser vide + */ +Stack* empty_stack(); +/** + * \param stck doit être une adresse valide + * \return whether the stack is empty + * + */ +bool is_stack_empty(Stack* stck); /** - * \brief donne la chaine de caracteres correspondant au CardType - * \param type - * \return la chaine de caracteres, doit etre libere par celui qui l'appelle + * \param stck valid Stack pointer + * \return la taille de la Stack + * */ -char* cardType_toString(CardType type); +unsigned int stack_size(Stack* stck); -static +/** + * \brief enleve l'element en haut de la pile + * \param stck valid Stack pointer + * \return l'element enlever, attention si l'élement est allouer dynamiquement, la responsabilité + * de desallouer la mémoire de cette élement est transmise au caller + */ +struct card* pop(Stack* stck); /** - * \struct card - * \brief definition du type abstrait dans carte.h -*/ -struct card -{ - CardType fCardType; - unsigned int fNbOccurences; - char fEffectDesc[MAX_LEN]; - int player; -} + * \brief ajoute une card en haut de la pile + * \param stck Valid Stack pointer + * \param crd la carte à ajouter + * \return rien + */ +void push(Stack* stck, struct card* crd); + +/** + * \brief méthode d'acces à la tête de la pile + * \param stck Valid Stack pointer + * \return la tête de la pile + */ +struct card* head(Stack* stck); + +/** + * \brief utiliser pour mélanger la pile rapidement + * \param stck Valid Stack pointer + * \return rien + */ +void shuffle_stack(Stack* stck); + +/** + * \brief inverse l'ordre des élements dans la pile + * \param stck Valid Stack pointer + * \return rien + * + */ +void reverse(Stack* stck); + +/** + * \brief libere la mémoire allouer par la pile ainsi que la pile elle même + * \param stck Valid Stack pointer + * \return rien + */ +void free_stack(Stack* stck); + +/*************************************/ + /** * \struct card -- GitLab From 0f86715d19eae6e39340d9af8e6c41e3b7df836d Mon Sep 17 00:00:00 2001 From: "martin.fond" <martin.fond@ensiie.fr> Date: Fri, 1 Apr 2022 16:21:03 +0200 Subject: [PATCH 045/163] [LotB] Ajout du fichier de configuration pour doxygen --- doxygen_config | 2488 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 2488 insertions(+) create mode 100644 doxygen_config diff --git a/doxygen_config b/doxygen_config new file mode 100644 index 0000000..6689125 --- /dev/null +++ b/doxygen_config @@ -0,0 +1,2488 @@ +# Doxyfile 1.8.13 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a double hash (##) is considered a comment and is placed in +# front of the TAG it is preceding. +# +# All text after a single hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists, items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (\" \"). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all text +# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv +# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv +# for the list of possible encodings. +# The default value is: UTF-8. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by +# double-quotes, unless you are using Doxywizard) that should identify the +# project for which the documentation is generated. This name is used in the +# title of most generated pages and in a few other places. +# The default value is: My Project. + +PROJECT_NAME = "My Project" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. This +# could be handy for archiving the generated documentation or if some version +# control system is used. + +PROJECT_NUMBER = + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer a +# quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = YES + +# With the PROJECT_LOGO tag one can specify a logo or an icon that is included +# in the documentation. The maximum height of the logo should not exceed 55 +# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy +# the logo to the output directory. + +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path +# into which the generated documentation will be written. If a relative path is +# entered, it will be relative to the location where doxygen was started. If +# left blank the current directory will be used. + +OUTPUT_DIRECTORY = + +# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- +# directories (in 2 levels) under the output directory of each output format and +# will distribute the generated files over these directories. Enabling this +# option can be useful when feeding doxygen a huge amount of source files, where +# putting all generated files in the same directory would otherwise causes +# performance problems for the file system. +# The default value is: NO. + +CREATE_SUBDIRS = NO + +# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII +# characters to appear in the names of generated files. If set to NO, non-ASCII +# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode +# U+3044. +# The default value is: NO. + +ALLOW_UNICODE_NAMES = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, +# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), +# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, +# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, +# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, +# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, +# Ukrainian and Vietnamese. +# The default value is: English. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member +# descriptions after the members that are listed in the file and class +# documentation (similar to Javadoc). Set to NO to disable this. +# The default value is: YES. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief +# description of a member or function before the detailed description +# +# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. +# The default value is: YES. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator that is +# used to form the text in various listings. Each string in this list, if found +# as the leading text of the brief description, will be stripped from the text +# and the result, after processing the whole list, is used as the annotated +# text. Otherwise, the brief description is used as-is. If left blank, the +# following values are used ($name is automatically replaced with the name of +# the entity):The $name class, The $name widget, The $name file, is, provides, +# specifies, contains, represents, a, an and the. + +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# doxygen will generate a detailed section even if there is only a brief +# description. +# The default value is: NO. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. +# The default value is: NO. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path +# before files name in the file list and in the header files. If set to NO the +# shortest path that makes the file name unique will be used +# The default value is: YES. + +FULL_PATH_NAMES = YES + +# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. +# Stripping is only done if one of the specified strings matches the left-hand +# part of the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the path to +# strip. +# +# Note that you can specify absolute paths here, but also relative paths, which +# will be relative from the directory where doxygen is started. +# This tag requires that the tag FULL_PATH_NAMES is set to YES. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the +# path mentioned in the documentation of a class, which tells the reader which +# header file to include in order to use a class. If left blank only the name of +# the header file containing the class definition is used. Otherwise one should +# specify the list of include paths that are normally passed to the compiler +# using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but +# less readable) file names. This can be useful is your file systems doesn't +# support long names like on DOS, Mac, or CD-ROM. +# The default value is: NO. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the +# first line (until the first dot) of a Javadoc-style comment as the brief +# description. If set to NO, the Javadoc-style will behave just like regular Qt- +# style comments (thus requiring an explicit @brief command for a brief +# description.) +# The default value is: NO. + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first +# line (until the first dot) of a Qt-style comment as the brief description. If +# set to NO, the Qt-style will behave just like regular Qt-style comments (thus +# requiring an explicit \brief command for a brief description.) +# The default value is: NO. + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a +# multi-line C++ special comment block (i.e. a block of //! or /// comments) as +# a brief description. This used to be the default behavior. The new default is +# to treat a multi-line C++ comment block as a detailed description. Set this +# tag to YES if you prefer the old behavior instead. +# +# Note that setting this tag to YES also means that rational rose comments are +# not recognized any more. +# The default value is: NO. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the +# documentation from any documented member that it re-implements. +# The default value is: YES. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new +# page for each member. If set to NO, the documentation of a member will be part +# of the file/class/namespace that contains it. +# The default value is: NO. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen +# uses this value to replace tabs by spaces in code fragments. +# Minimum value: 1, maximum value: 16, default value: 4. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that act as commands in +# the documentation. An alias has the form: +# name=value +# For example adding +# "sideeffect=@par Side Effects:\n" +# will allow you to put the command \sideeffect (or @sideeffect) in the +# documentation, which will result in a user-defined paragraph with heading +# "Side Effects:". You can put \n's in the value part of an alias to insert +# newlines. + +ALIASES = + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding "class=itcl::class" +# will allow you to use the command class in the itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. For +# instance, some of the names that are used will be different. The list of all +# members will be omitted, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or +# Python sources only. Doxygen will then generate output that is more tailored +# for that language. For instance, namespaces will be presented as packages, +# qualified scopes will look different, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources. Doxygen will then generate output that is tailored for Fortran. +# The default value is: NO. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for VHDL. +# The default value is: NO. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, and +# language is one of the parsers supported by doxygen: IDL, Java, Javascript, +# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: +# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: +# Fortran. In the later case the parser tries to guess whether the code is fixed +# or free formatted code, this is the default for Fortran type files), VHDL. For +# instance to make doxygen treat .inc files as Fortran files (default is PHP), +# and .f files as C (default is Fortran), use: inc=Fortran f=C. +# +# Note: For files without extension you can use no_extension as a placeholder. +# +# Note that for custom extensions you also need to set FILE_PATTERNS otherwise +# the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments +# according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you can +# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in +# case of backward compatibilities issues. +# The default value is: YES. + +MARKDOWN_SUPPORT = YES + +# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up +# to that level are automatically included in the table of contents, even if +# they do not have an id attribute. +# Note: This feature currently applies only to Markdown headings. +# Minimum value: 0, maximum value: 99, default value: 0. +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. + +TOC_INCLUDE_HEADINGS = 0 + +# When enabled doxygen tries to link words that correspond to documented +# classes, or namespaces to their corresponding documentation. Such a link can +# be prevented in individual cases by putting a % sign in front of the word or +# globally by setting AUTOLINK_SUPPORT to NO. +# The default value is: YES. + +AUTOLINK_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should set this +# tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); +# versus func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. +# The default value is: NO. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. +# The default value is: NO. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: +# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen +# will parse them like normal C++ but will assume all classes use public instead +# of private inheritance when no explicit protection keyword is present. +# The default value is: NO. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES will make +# doxygen to replace the get and set methods by a property in the documentation. +# This will only work if the methods are indeed getting or setting a simple +# type. If this is not the case, or you want to show the methods anyway, you +# should set this option to NO. +# The default value is: YES. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. +# The default value is: NO. + +DISTRIBUTE_GROUP_DOC = NO + +# If one adds a struct or class to a group and this option is enabled, then also +# any nested class or struct is added to the same group. By default this option +# is disabled and one has to add nested compounds explicitly via \ingroup. +# The default value is: NO. + +GROUP_NESTED_COMPOUNDS = NO + +# Set the SUBGROUPING tag to YES to allow class member groups of the same type +# (for instance a group of public functions) to be put as a subgroup of that +# type (e.g. under the Public Functions section). Set it to NO to prevent +# subgrouping. Alternatively, this can be done per class using the +# \nosubgrouping command. +# The default value is: YES. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions +# are shown inside the group in which they are included (e.g. using \ingroup) +# instead of on a separate page (for HTML and Man pages) or section (for LaTeX +# and RTF). +# +# Note that this feature does not work in combination with +# SEPARATE_MEMBER_PAGES. +# The default value is: NO. + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions +# with only public data fields or simple typedef fields will be shown inline in +# the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO, structs, classes, and unions are shown on a separate page (for HTML and +# Man pages) or section (for LaTeX and RTF). +# The default value is: NO. + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or +# enum is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically be +# useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. +# The default value is: NO. + +TYPEDEF_HIDES_STRUCT = NO + +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can be +# an expensive process and often the same symbol appears multiple times in the +# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small +# doxygen will become slower. If the cache is too large, memory is wasted. The +# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range +# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 +# symbols. At the end of a run doxygen will report the cache usage and suggest +# the optimal cache size from a speed point of view. +# Minimum value: 0, maximum value: 9, default value: 0. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in +# documentation are documented, even if no documentation was available. Private +# class members and static file members will be hidden unless the +# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. +# Note: This will also disable the warnings about undocumented members that are +# normally produced when WARNINGS is set to YES. +# The default value is: NO. + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will +# be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal +# scope will be included in the documentation. +# The default value is: NO. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be +# included in the documentation. +# The default value is: NO. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO, +# only classes defined in header files are included. Does not have any effect +# for Java sources. +# The default value is: YES. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. If set to YES, local methods, +# which are defined in the implementation section but not in the interface are +# included in the documentation. If set to NO, only methods in the interface are +# included. +# The default value is: NO. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base name of +# the file that contains the anonymous namespace. By default anonymous namespace +# are hidden. +# The default value is: NO. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all +# undocumented members inside documented classes or files. If set to NO these +# members will be included in the various overviews, but no documentation +# section is generated. This option has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. If set +# to NO, these classes will be included in the various overviews. This option +# has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend +# (class|struct|union) declarations. If set to NO, these declarations will be +# included in the documentation. +# The default value is: NO. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any +# documentation blocks found inside the body of a function. If set to NO, these +# blocks will be appended to the function's detailed documentation block. +# The default value is: NO. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation that is typed after a +# \internal command is included. If the tag is set to NO then the documentation +# will be excluded. Set it to YES to include the internal documentation. +# The default value is: NO. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file +# names in lower-case letters. If set to YES, upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. +# The default value is: system dependent. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with +# their full class and namespace scopes in the documentation. If set to YES, the +# scope will be hidden. +# The default value is: NO. + +HIDE_SCOPE_NAMES = NO + +# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will +# append additional text to a page's title, such as Class Reference. If set to +# YES the compound reference will be hidden. +# The default value is: NO. + +HIDE_COMPOUND_REFERENCE= NO + +# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of +# the files that are included by a file in the documentation of that file. +# The default value is: YES. + +SHOW_INCLUDE_FILES = YES + +# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each +# grouped member an include statement to the documentation, telling the reader +# which file to include in order to use the member. +# The default value is: NO. + +SHOW_GROUPED_MEMB_INC = NO + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include +# files with double quotes in the documentation rather than with sharp brackets. +# The default value is: NO. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the +# documpages.ailed) documentation of file and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. +# The default value is: YES. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief +# descriptions of file, namespace and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. Note that +# this will also influence the order of the classes in the class list. +# The default value is: NO. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the +# (brief and detailed) documentation of class members so that constructors and +# destructors are listed first. If set to NO the constructors will appear in the +# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. +# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief +# member documentation. +# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting +# detailed member documentation. +# The default value is: NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy +# of group names into alphabetical order. If set to NO the group names will +# appear in their defined order. +# The default value is: NO. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by +# fully-qualified names, including namespaces. If set to NO, the class list will +# be sorted only by class name, not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the alphabetical +# list. +# The default value is: NO. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper +# type resolution of all parameters of a function it will reject a match between +# the prototype and the implementation of a member function even if there is +# only one candidate or it is obvious which candidate to choose by doing a +# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still +# accept a match between prototype and implementation in such cases. +# The default value is: NO. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo +# list. This list is created by putting \todo commands in the documentation. +# The default value is: YES. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test +# list. This list is created by putting \test commands in the documentation. +# The default value is: YES. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug +# list. This list is created by putting \bug commands in the documentation. +# The default value is: YES. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) +# the deprecated list. This list is created by putting \deprecated commands in +# the documentation. +# The default value is: YES. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional documentation +# sections, marked by \if <section_label> ... \endif and \cond <section_label> +# ... \endcond blocks. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the +# initial value of a variable or macro / define can have for it to appear in the +# documentation. If the initializer consists of more lines than specified here +# it will be hidden. Use a value of 0 to hide initializers completely. The +# appearance of the value of individual variables and macros / defines can be +# controlled using \showinitializer or \hideinitializer command in the +# documentation regardless of this setting. +# Minimum value: 0, maximum value: 10000, default value: 30. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at +# the bottom of the documentation of classes and structs. If set to YES, the +# list will mention the files that were used to generate the documentation. +# The default value is: YES. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This +# will remove the Files entry from the Quick Index and from the Folder Tree View +# (if specified). +# The default value is: YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces +# page. This will remove the Namespaces entry from the Quick Index and from the +# Folder Tree View (if specified). +# The default value is: YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command command input-file, where command is the value of the +# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided +# by doxygen. Whatever the program writes to standard output is used as the file +# version. For an example see the documentation. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. You can +# optionally specify a file name after the option, if omitted DoxygenLayout.xml +# will be used as the name of the layout file. +# +# Note that if you run doxygen from a directory containing a file called +# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE +# tag is left empty. + +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files containing +# the reference definitions. This must be a list of .bib files. The .bib +# extension is automatically appended if omitted. This requires the bibtex tool +# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. +# For LaTeX the style of the bibliography can be controlled using +# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the +# search path. See also \cite for info how to create references. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# Configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated to +# standard output by doxygen. If QUIET is set to YES this implies that the +# messages are off. +# The default value is: NO. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES +# this implies that the warnings are on. +# +# Tip: Turn warnings on while writing the documentation. +# The default value is: YES. + +WARNINGS = YES + +# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate +# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: YES. + +WARN_IF_UNDOCUMENTED = YES + +# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some parameters +# in a documented function, or documenting parameters that don't exist or using +# markup commands wrongly. +# The default value is: YES. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that +# are documented, but have no documentation for their parameters or return +# value. If set to NO, doxygen will only warn about wrong or incomplete +# parameter documentation, but not about the absence of documentation. +# The default value is: NO. + +WARN_NO_PARAMDOC = NO + +# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when +# a warning is encountered. +# The default value is: NO. + +WARN_AS_ERROR = NO + +# The WARN_FORMAT tag determines the format of the warning messages that doxygen +# can produce. The string should contain the $file, $line, and $text tags, which +# will be replaced by the file and line number from which the warning originated +# and the warning text. Optionally the format may contain $version, which will +# be replaced by the version of the file (if it could be obtained via +# FILE_VERSION_FILTER) +# The default value is: $file:$line: $text. + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning and error +# messages should be written. If left blank the output is written to standard +# error (stderr). + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# Configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag is used to specify the files and/or directories that contain +# documented source files. You may enter file names like myfile.cpp or +# directories like /usr/src/myproject. Separate the files or directories with +# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING +# Note: If this tag is empty the current directory is searched. + +INPUT = + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses +# libiconv (or the iconv built into libc) for the transcoding. See the libiconv +# documentation (see: http://www.gnu.org/software/libiconv) for the list of +# possible encodings. +# The default value is: UTF-8. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and +# *.h) to filter out the source-files in the directories. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# read by doxygen. +# +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, +# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, +# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, +# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, +# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf and *.qsf. + +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.idl \ + *.ddl \ + *.odl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.cs \ + *.d \ + *.php \ + *.php4 \ + *.php5 \ + *.phtml \ + *.inc \ + *.m \ + *.markdown \ + *.md \ + *.mm \ + *.dox \ + *.py \ + *.pyw \ + *.f90 \ + *.f95 \ + *.f03 \ + *.f08 \ + *.f \ + *.for \ + *.tcl \ + *.vhd \ + *.vhdl \ + *.ucf \ + *.qsf + +# The RECURSIVE tag can be used to specify whether or not subdirectories should +# be searched for input files as well. +# The default value is: NO. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. +# The default value is: NO. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories use the pattern */test/* + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or directories +# that contain example code fragments that are included (see the \include +# command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank all +# files are included. + +EXAMPLE_PATTERNS = * + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude commands +# irrespective of the value of the RECURSIVE tag. +# The default value is: NO. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or directories +# that contain images that are to be included in the documentation (see the +# \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command: +# +# <filter> <input-file> +# +# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the +# name of an input file. Doxygen will then use the output that the filter +# program writes to standard output. If FILTER_PATTERNS is specified, this tag +# will be ignored. +# +# Note that the filter must not add or remove lines; it is applied before the +# code is scanned, but not when the output code is generated. If lines are added +# or removed, the anchors will not be placed correctly. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: pattern=filter +# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how +# filters are used. If the FILTER_PATTERNS tag is empty or if none of the +# patterns match the file name, INPUT_FILTER is applied. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will also be used to filter the input files that are used for +# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). +# The default value is: NO. + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and +# it is also possible to disable source filtering for a specific pattern using +# *.ext= (so without naming a filter). +# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. + +FILTER_SOURCE_PATTERNS = + +# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page +# (index.html). This can be useful if you have a project on for instance GitHub +# and want to reuse the introduction page also for the doxygen output. + +USE_MDFILE_AS_MAINPAGE = + +#--------------------------------------------------------------------------- +# Configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will be +# generated. Documented entities will be cross-referenced with these sources. +# +# Note: To get rid of all source code in the generated output, make sure that +# also VERBATIM_HEADERS is set to NO. +# The default value is: NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body of functions, +# classes and enums directly into the documentation. +# The default value is: NO. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any +# special comment blocks from generated source code fragments. Normal C, C++ and +# Fortran comments will always remain visible. +# The default value is: YES. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES then for each documented +# function all documented functions referencing it will be listed. +# The default value is: NO. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES then for each documented function +# all documented entities called/used by that function will be listed. +# The default value is: NO. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set +# to YES then the hyperlinks from functions in REFERENCES_RELATION and +# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will +# link to the documentation. +# The default value is: YES. + +REFERENCES_LINK_SOURCE = YES + +# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the +# source code will show a tooltip with additional information such as prototype, +# brief description and links to the definition and documentation. Since this +# will make the HTML file larger and loading of large files a bit slower, you +# can opt to disable this feature. +# The default value is: YES. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +SOURCE_TOOLTIPS = YES + +# If the USE_HTAGS tag is set to YES then the references to source code will +# point to the HTML generated by the htags(1) tool instead of doxygen built-in +# source browser. The htags tool is part of GNU's global source tagging system +# (see http://www.gnu.org/software/global/global.html). You will need version +# 4.8.6 or higher. +# +# To use it do the following: +# - Install the latest version of global +# - Enable SOURCE_BROWSER and USE_HTAGS in the config file +# - Make sure the INPUT points to the root of the source tree +# - Run doxygen as normal +# +# Doxygen will invoke htags (and that will in turn invoke gtags), so these +# tools must be available from the command line (i.e. in the search path). +# +# The result: instead of the source browser generated by doxygen, the links to +# source code will now point to the output of htags. +# The default value is: NO. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a +# verbatim copy of the header file for each class for which an include is +# specified. Set to NO to disable this. +# See also: Section \class. +# The default value is: YES. + +VERBATIM_HEADERS = YES + +# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the +# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the +# cost of reduced performance. This can be particularly helpful with template +# rich C++ code for which doxygen's built-in parser lacks the necessary type +# information. +# Note: The availability of this option depends on whether or not doxygen was +# generated with the -Duse-libclang=ON option for CMake. +# The default value is: NO. + +CLANG_ASSISTED_PARSING = NO + +# If clang assisted parsing is enabled you can provide the compiler with command +# line options that you would normally use when invoking the compiler. Note that +# the include paths will already be set by doxygen for the files and directories +# specified with INPUT and INCLUDE_PATH. +# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. + +CLANG_OPTIONS = + +#--------------------------------------------------------------------------- +# Configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all +# compounds will be generated. Enable this if the project contains a lot of +# classes, structs, unions or interfaces. +# The default value is: YES. + +ALPHABETICAL_INDEX = YES + +# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in +# which the alphabetical index list will be split. +# Minimum value: 1, maximum value: 20, default value: 5. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all classes will +# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag +# can be used to specify a prefix (or a list of prefixes) that should be ignored +# while generating the index headers. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output +# The default value is: YES. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each +# generated HTML page (for example: .htm, .php, .asp). +# The default value is: .html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a user-defined HTML header file for +# each generated HTML page. If the tag is left blank doxygen will generate a +# standard header. +# +# To get valid HTML the header file that includes any scripts and style sheets +# that doxygen needs, which is dependent on the configuration options used (e.g. +# the setting GENERATE_TREEVIEW). It is highly recommended to start with a +# default header using +# doxygen -w html new_header.html new_footer.html new_stylesheet.css +# YourConfigFile +# and then modify the file new_header.html. See also section "Doxygen usage" +# for information on how to generate the default header that doxygen normally +# uses. +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. For a description +# of the possible markers and block names see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each +# generated HTML page. If the tag is left blank doxygen will generate a standard +# footer. See HTML_HEADER for more information on how to generate a default +# footer and what special commands can be used inside the footer. See also +# section "Doxygen usage" for information on how to generate the default footer +# that doxygen normally uses. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style +# sheet that is used by each HTML page. It can be used to fine-tune the look of +# the HTML output. If left blank doxygen will generate a default style sheet. +# See also section "Doxygen usage" for information on how to generate the style +# sheet that doxygen normally uses. +# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as +# it is more robust and this tag (HTML_STYLESHEET) will in the future become +# obsolete. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_STYLESHEET = + +# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# cascading style sheets that are included after the standard style sheets +# created by doxygen. Using this option one can overrule certain style aspects. +# This is preferred over using HTML_STYLESHEET since it does not replace the +# standard style sheet and is therefore more robust against future updates. +# Doxygen will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). For an example see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that the +# files will be copied as-is; there are no commands or markers available. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen +# will adjust the colors in the style sheet and background images according to +# this color. Hue is specified as an angle on a colorwheel, see +# http://en.wikipedia.org/wiki/Hue for more information. For instance the value +# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 +# purple, and 360 is red again. +# Minimum value: 0, maximum value: 359, default value: 220. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors +# in the HTML output. For a value of 0 the output will use grayscales only. A +# value of 255 will produce the most vivid colors. +# Minimum value: 0, maximum value: 255, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the +# luminance component of the colors in the HTML output. Values below 100 +# gradually make the output lighter, whereas values above 100 make the output +# darker. The value divided by 100 is the actual gamma applied, so 80 represents +# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not +# change the gamma. +# Minimum value: 40, maximum value: 240, default value: 80. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting this +# to YES can help to show when doxygen was last run and thus if the +# documentation is up to date. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_TIMESTAMP = NO + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_SECTIONS = NO + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries +# shown in the various tree structured indices initially; the user can expand +# and collapse entries dynamically later on. Doxygen will expand the tree to +# such a level that at most the specified number of entries are visible (unless +# a fully collapsed tree already exceeds this amount). So setting the number of +# entries 1 will produce a full collapsed tree by default. 0 is a special value +# representing an infinite number of entries and will result in a full expanded +# tree by default. +# Minimum value: 0, maximum value: 9999, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files will be +# generated that can be used as input for Apple's Xcode 3 integrated development +# environment (see: http://developer.apple.com/tools/xcode/), introduced with +# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a +# Makefile in the HTML output directory. Running make will produce the docset in +# that directory and running make install will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at +# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_DOCSET = NO + +# This tag determines the name of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# The default value is: Doxygen generated docs. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# This tag specifies a string that should uniquely identify the documentation +# set bundle. This should be a reverse domain-name style string, e.g. +# com.mycompany.MyDocSet. Doxygen will append .docset to the name. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. +# The default value is: org.doxygen.Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. +# The default value is: Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three +# additional HTML index files: index.hhp, index.hhc, and index.hhk. The +# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop +# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on +# Windows. +# +# The HTML Help Workshop contains a compiler that can convert all HTML output +# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML +# files are now used as the Windows 98 help format, and will replace the old +# Windows help format (.hlp) on all Windows platforms in the future. Compressed +# HTML files also contain an index, a table of contents, and you can search for +# words in the documentation. The HTML workshop also contains a viewer for +# compressed HTML files. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_HTMLHELP = NO + +# The CHM_FILE tag can be used to specify the file name of the resulting .chm +# file. You can add a path in front of the file if the result should not be +# written to the html output directory. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_FILE = + +# The HHC_LOCATION tag can be used to specify the location (absolute path +# including file name) of the HTML help compiler (hhc.exe). If non-empty, +# doxygen will try to run the HTML help compiler on the generated index.hhp. +# The file has to be specified with full path. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +HHC_LOCATION = + +# The GENERATE_CHI flag controls if a separate .chi index file is generated +# (YES) or that it should be included in the master .chm file (NO). +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +GENERATE_CHI = NO + +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) +# and project file content. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_INDEX_ENCODING = + +# The BINARY_TOC flag controls whether a binary table of contents is generated +# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it +# enables the Previous and Next buttons. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members to +# the table of contents of the HTML help documentation and to the tree view. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that +# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help +# (.qch) of the generated HTML documentation. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify +# the file name of the resulting .qch file. The path specified is relative to +# the HTML output folder. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help +# Project output. For more information please see Qt Help Project / Namespace +# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt +# Help Project output. For more information please see Qt Help Project / Virtual +# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- +# folders). +# The default value is: doc. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_VIRTUAL_FOLDER = doc + +# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom +# filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's filter section matches. Qt Help Project / Filter Attributes (see: +# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_SECT_FILTER_ATTRS = + +# The QHG_LOCATION tag can be used to specify the location of Qt's +# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the +# generated .qhp file. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be +# generated, together with the HTML files, they form an Eclipse help plugin. To +# install this plugin and make it available under the help contents menu in +# Eclipse, the contents of the directory containing the HTML and XML files needs +# to be copied into the plugins directory of eclipse. The name of the directory +# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. +# After copying Eclipse needs to be restarted before the help appears. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the Eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have this +# name. Each documentation set should have its own identifier. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# If you want full control over the layout of the generated HTML pages it might +# be necessary to disable the index and replace it with your own. The +# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top +# of each HTML page. A value of NO enables the index and the value YES disables +# it. Since the tabs in the index contain the same information as the navigation +# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. If the tag +# value is set to YES, a side panel will be generated containing a tree-like +# index structure (just like the one that is generated for HTML Help). For this +# to work a browser that supports JavaScript, DHTML, CSS and frames is required +# (i.e. any modern browser). Windows users are probably better off using the +# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can +# further fine-tune the look of the index. As an example, the default style +# sheet generated by doxygen has an example that shows how to put an image at +# the root of the tree instead of the PROJECT_NAME. Since the tree basically has +# the same information as the tab index, you could consider setting +# DISABLE_INDEX to YES when enabling this option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_TREEVIEW = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that +# doxygen will group on one line in the generated HTML documentation. +# +# Note that a value of 0 will completely suppress the enum values from appearing +# in the overview section. +# Minimum value: 0, maximum value: 20, default value: 4. +# This tag requires that the tag GENERATE_HTML is set to YES. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used +# to set the initial width (in pixels) of the frame in which the tree is shown. +# Minimum value: 0, maximum value: 1500, default value: 250. +# This tag requires that the tag GENERATE_HTML is set to YES. + +TREEVIEW_WIDTH = 250 + +# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to +# external symbols imported via tag files in a separate window. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of LaTeX formulas included as images in +# the HTML documentation. When you change the font size after a successful +# doxygen run you need to manually remove any form_*.png images from the HTML +# output directory to force them to be regenerated. +# Minimum value: 8, maximum value: 50, default value: 10. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are not +# supported properly for IE 6.0, but are supported on all modern browsers. +# +# Note that when changing this option you need to delete any form_*.png files in +# the HTML output directory before the changes have effect. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see +# http://www.mathjax.org) which uses client side Javascript for the rendering +# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX +# installed or if you want to formulas look prettier in the HTML output. When +# enabled you may also need to install MathJax separately and configure the path +# to it using the MATHJAX_RELPATH option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +USE_MATHJAX = NO + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. See the MathJax site (see: +# http://docs.mathjax.org/en/latest/output.html) for more details. +# Possible values are: HTML-CSS (which is slower, but has the best +# compatibility), NativeMML (i.e. MathML) and SVG. +# The default value is: HTML-CSS. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the HTML +# output directory using the MATHJAX_RELPATH option. The destination directory +# should contain the MathJax.js script. For instance, if the mathjax directory +# is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax +# Content Delivery Network so you can quickly see the result without installing +# MathJax. However, it is strongly recommended to install a local copy of +# MathJax from http://www.mathjax.org before deployment. +# The default value is: http://cdn.mathjax.org/mathjax/latest. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax +# extension names that should be enabled during MathJax rendering. For example +# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_EXTENSIONS = + +# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces +# of code that will be used on startup of the MathJax code. See the MathJax site +# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# example see the documentation. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_CODEFILE = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for +# the HTML output. The underlying search engine uses javascript and DHTML and +# should work on any modern browser. Note that when using HTML help +# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) +# there is already a search function so this one should typically be disabled. +# For large projects the javascript based search engine can be slow, then +# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to +# search using the keyboard; to jump to the search box use <access key> + S +# (what the <access key> is depends on the OS and browser, but it is typically +# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down +# key> to jump into the search results window, the results can be navigated +# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel +# the search. The filter options can be selected when the cursor is inside the +# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> +# to select a filter and <Enter> or <escape> to activate or cancel the filter +# option. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +SEARCHENGINE = YES + +# When the SERVER_BASED_SEARCH tag is enabled the search engine will be +# implemented using a web server instead of a web client using Javascript. There +# are two flavors of web server based searching depending on the EXTERNAL_SEARCH +# setting. When disabled, doxygen will generate a PHP script for searching and +# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing +# and searching needs to be provided by external tools. See the section +# "External Indexing and Searching" for details. +# The default value is: NO. +# This tag requires that the tag SEARCHENGINE is set to YES. + +SERVER_BASED_SEARCH = NO + +# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP +# script for searching. Instead the search results are written to an XML file +# which needs to be processed by an external indexer. Doxygen will invoke an +# external search engine pointed to by the SEARCHENGINE_URL option to obtain the +# search results. +# +# Doxygen ships with an example indexer (doxyindexer) and search engine +# (doxysearch.cgi) which are based on the open source search engine library +# Xapian (see: http://xapian.org/). +# +# See the section "External Indexing and Searching" for details. +# The default value is: NO. +# This tag requires that the tag SEARCHENGINE is set to YES. + +EXTERNAL_SEARCH = NO + +# The SEARCHENGINE_URL should point to a search engine hosted by a web server +# which will return the search results when EXTERNAL_SEARCH is enabled. +# +# Doxygen ships with an example indexer (doxyindexer) and search engine +# (doxysearch.cgi) which are based on the open source search engine library +# Xapian (see: http://xapian.org/). See the section "External Indexing and +# Searching" for details. +# This tag requires that the tag SEARCHENGINE is set to YES. + +SEARCHENGINE_URL = + +# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed +# search data is written to a file for indexing by an external tool. With the +# SEARCHDATA_FILE tag the name of this file can be specified. +# The default file is: searchdata.xml. +# This tag requires that the tag SEARCHENGINE is set to YES. + +SEARCHDATA_FILE = searchdata.xml + +# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the +# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is +# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple +# projects and redirect the results back to the right project. +# This tag requires that the tag SEARCHENGINE is set to YES. + +EXTERNAL_SEARCH_ID = + +# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen +# projects other than the one defined by this configuration file, but that are +# all added to the same external search index. Each project needs to have a +# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of +# to a relative location where the documentation can be found. The format is: +# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... +# This tag requires that the tag SEARCHENGINE is set to YES. + +EXTRA_SEARCH_MAPPINGS = + +#--------------------------------------------------------------------------- +# Configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. +# The default value is: YES. + +GENERATE_LATEX = YES + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: latex. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. +# +# Note that when enabling USE_PDFLATEX this option is only used for generating +# bitmaps for formulas in the HTML output, but not in the Makefile that is +# written to the output directory. +# The default file is: latex. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate +# index for LaTeX. +# The default file is: makeindex. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX +# documents. This may be useful for small projects and may help to save some +# trees in general. +# The default value is: NO. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used by the +# printer. +# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x +# 14 inches) and executive (7.25 x 10.5 inches). +# The default value is: a4. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +PAPER_TYPE = a4 + +# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names +# that should be included in the LaTeX output. The package can be specified just +# by its name or with the correct syntax as to be used with the LaTeX +# \usepackage command. To get the times font for instance you can specify : +# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times} +# To use the option intlimits with the amsmath package you can specify: +# EXTRA_PACKAGES=[intlimits]{amsmath} +# If left blank no extra packages will be included. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the +# generated LaTeX document. The header should contain everything until the first +# chapter. If it is left blank doxygen will generate a standard header. See +# section "Doxygen usage" for information on how to let doxygen write the +# default header to a separate file. +# +# Note: Only use a user-defined header if you know what you are doing! The +# following commands have a special meaning inside the header: $title, +# $datetime, $date, $doxygenversion, $projectname, $projectnumber, +# $projectbrief, $projectlogo. Doxygen will replace $title with the empty +# string, for the replacement values of the other commands the user is referred +# to HTML_HEADER. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_HEADER = + +# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the +# generated LaTeX document. The footer should contain everything after the last +# chapter. If it is left blank doxygen will generate a standard footer. See +# LATEX_HEADER for more information on how to generate a default footer and what +# special commands can be used inside the footer. +# +# Note: Only use a user-defined footer if you know what you are doing! +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_FOOTER = + +# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# LaTeX style sheets that are included after the standard style sheets created +# by doxygen. Using this option one can overrule certain style aspects. Doxygen +# will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_EXTRA_STYLESHEET = + +# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the LATEX_OUTPUT output +# directory. Note that the files will be copied as-is; there are no commands or +# markers available. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_EXTRA_FILES = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is +# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will +# contain links (just like the HTML output) instead of page references. This +# makes the output suitable for online browsing using a PDF viewer. +# The default value is: YES. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +PDF_HYPERLINKS = YES + +# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate +# the PDF file directly from the LaTeX files. Set this option to YES, to get a +# higher quality PDF documentation. +# The default value is: YES. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +USE_PDFLATEX = YES + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode +# command to the generated LaTeX files. This will instruct LaTeX to keep running +# if errors occur, instead of asking the user for help. This option is also used +# when generating formulas in HTML. +# The default value is: NO. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_BATCHMODE = NO + +# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the +# index chapters (such as File Index, Compound Index, etc.) in the output. +# The default value is: NO. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_HIDE_INDICES = NO + +# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source +# code with syntax highlighting in the LaTeX output. +# +# Note that which sources are shown also depends on other settings such as +# SOURCE_BROWSER. +# The default value is: NO. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_SOURCE_CODE = NO + +# The LATEX_BIB_STYLE tag can be used to specify the style to use for the +# bibliography, e.g. plainnat, or ieeetr. See +# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. +# The default value is: plain. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_BIB_STYLE = plain + +# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated +# page will contain the date and time when the page was generated. Setting this +# to NO can help when comparing the output of multiple runs. +# The default value is: NO. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_TIMESTAMP = NO + +#--------------------------------------------------------------------------- +# Configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The +# RTF output is optimized for Word 97 and may not look too pretty with other RTF +# readers/editors. +# The default value is: NO. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: rtf. +# This tag requires that the tag GENERATE_RTF is set to YES. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF +# documents. This may be useful for small projects and may help to save some +# trees in general. +# The default value is: NO. +# This tag requires that the tag GENERATE_RTF is set to YES. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will +# contain hyperlink fields. The RTF file will contain links (just like the HTML +# output) instead of page references. This makes the output suitable for online +# browsing using Word or some other Word compatible readers that support those +# fields. +# +# Note: WordPad (write) and others do not support links. +# The default value is: NO. +# This tag requires that the tag GENERATE_RTF is set to YES. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's config +# file, i.e. a series of assignments. You only have to provide replacements, +# missing definitions are set to their default value. +# +# See also section "Doxygen usage" for information on how to generate the +# default style sheet that doxygen normally uses. +# This tag requires that the tag GENERATE_RTF is set to YES. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an RTF document. Syntax is +# similar to doxygen's config file. A template extensions file can be generated +# using doxygen -e rtf extensionFile. +# This tag requires that the tag GENERATE_RTF is set to YES. + +RTF_EXTENSIONS_FILE = + +# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code +# with syntax highlighting in the RTF output. +# +# Note that which sources are shown also depends on other settings such as +# SOURCE_BROWSER. +# The default value is: NO. +# This tag requires that the tag GENERATE_RTF is set to YES. + +RTF_SOURCE_CODE = NO + +#--------------------------------------------------------------------------- +# Configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for +# classes and files. +# The default value is: NO. + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. A directory man3 will be created inside the directory specified by +# MAN_OUTPUT. +# The default directory is: man. +# This tag requires that the tag GENERATE_MAN is set to YES. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to the generated +# man pages. In case the manual section does not start with a number, the number +# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is +# optional. +# The default value is: .3. +# This tag requires that the tag GENERATE_MAN is set to YES. + +MAN_EXTENSION = .3 + +# The MAN_SUBDIR tag determines the name of the directory created within +# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by +# MAN_EXTENSION with the initial . removed. +# This tag requires that the tag GENERATE_MAN is set to YES. + +MAN_SUBDIR = + +# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it +# will generate one additional man file for each entity documented in the real +# man page(s). These additional files only source the real man page, but without +# them the man command would be unable to find the correct page. +# The default value is: NO. +# This tag requires that the tag GENERATE_MAN is set to YES. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# Configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that +# captures the structure of the code including all documentation. +# The default value is: NO. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: xml. +# This tag requires that the tag GENERATE_XML is set to YES. + +XML_OUTPUT = xml + +# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program +# listings (including syntax highlighting and cross-referencing information) to +# the XML output. Note that enabling this will significantly increase the size +# of the XML output. +# The default value is: YES. +# This tag requires that the tag GENERATE_XML is set to YES. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# Configuration options related to the DOCBOOK output +#--------------------------------------------------------------------------- + +# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files +# that can be used to generate PDF. +# The default value is: NO. + +GENERATE_DOCBOOK = NO + +# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in +# front of it. +# The default directory is: docbook. +# This tag requires that the tag GENERATE_DOCBOOK is set to YES. + +DOCBOOK_OUTPUT = docbook + +# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the +# program listings (including syntax highlighting and cross-referencing +# information) to the DOCBOOK output. Note that enabling this will significantly +# increase the size of the DOCBOOK output. +# The default value is: NO. +# This tag requires that the tag GENERATE_DOCBOOK is set to YES. + +DOCBOOK_PROGRAMLISTING = NO + +#--------------------------------------------------------------------------- +# Configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an +# AutoGen Definitions (see http://autogen.sf.net) file that captures the +# structure of the code including all documentation. Note that this feature is +# still experimental and incomplete at the moment. +# The default value is: NO. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# Configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module +# file that captures the structure of the code including all documentation. +# +# Note that this feature is still experimental and incomplete at the moment. +# The default value is: NO. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary +# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI +# output from the Perl module output. +# The default value is: NO. +# This tag requires that the tag GENERATE_PERLMOD is set to YES. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely +# formatted so it can be parsed by a human reader. This is useful if you want to +# understand what is going on. On the other hand, if this tag is set to NO, the +# size of the Perl module output will be much smaller and Perl will parse it +# just the same. +# The default value is: YES. +# This tag requires that the tag GENERATE_PERLMOD is set to YES. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file are +# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful +# so different doxyrules.make files included by the same Makefile don't +# overwrite each other's variables. +# This tag requires that the tag GENERATE_PERLMOD is set to YES. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all +# C-preprocessor directives found in the sources and include files. +# The default value is: YES. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names +# in the source code. If set to NO, only conditional compilation will be +# performed. Macro expansion can be done in a controlled way by setting +# EXPAND_ONLY_PREDEF to YES. +# The default value is: NO. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then +# the macro expansion is limited to the macros specified with the PREDEFINED and +# EXPAND_AS_DEFINED tags. +# The default value is: NO. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES, the include files in the +# INCLUDE_PATH will be searched if a #include is found. +# The default value is: YES. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by the +# preprocessor. +# This tag requires that the tag SEARCH_INCLUDES is set to YES. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will be +# used. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that are +# defined before the preprocessor is started (similar to the -D option of e.g. +# gcc). The argument of the tag is a list of macros of the form: name or +# name=definition (no spaces). If the definition and the "=" are omitted, "=1" +# is assumed. To prevent a macro definition from being undefined via #undef or +# recursively expanded use the := operator instead of the = operator. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this +# tag can be used to specify a list of macro names that should be expanded. The +# macro definition that is found in the sources will be used. Use the PREDEFINED +# tag if you want to use a different macro definition that overrules the +# definition found in the source code. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will +# remove all references to function-like macros that are alone on a line, have +# an all uppercase name, and do not end with a semicolon. Such function macros +# are typically used for boiler-plate code, and will confuse the parser if not +# removed. +# The default value is: YES. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration options related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES tag can be used to specify one or more tag files. For each tag +# file the location of the external documentation should be added. The format of +# a tag file without this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where loc1 and loc2 can be relative or absolute paths or URLs. See the +# section "Linking to external documentation" for more information about the use +# of tag files. +# Note: Each tag file must have a unique name (where the name does NOT include +# the path). If a tag file is not located in the directory in which doxygen is +# run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create a +# tag file that is based on the input files it reads. See section "Linking to +# external documentation" for more information about the usage of tag files. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES, all external class will be listed in +# the class index. If set to NO, only the inherited external classes will be +# listed. +# The default value is: NO. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will be +# listed. +# The default value is: YES. + +EXTERNAL_GROUPS = YES + +# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in +# the related pages index. If set to NO, only the current project's pages will +# be listed. +# The default value is: YES. + +EXTERNAL_PAGES = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of 'which perl'). +# The default file (with absolute path) is: /usr/bin/perl. + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram +# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to +# NO turns the diagrams off. Note that this option also works with HAVE_DOT +# disabled, but it is recommended to install and use dot, since it yields more +# powerful graphs. +# The default value is: YES. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see: +# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# You can include diagrams made with dia in doxygen documentation. Doxygen will +# then run dia to produce the diagram and insert it in the documentation. The +# DIA_PATH tag allows you to specify the directory where the dia binary resides. +# If left empty dia is assumed to be found in the default search path. + +DIA_PATH = + +# If set to YES the inheritance and collaboration graphs will hide inheritance +# and usage relations if the target is undocumented or is not a class. +# The default value is: YES. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz (see: +# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent +# Bell Labs. The other options in this section have no effect if this option is +# set to NO +# The default value is: YES. + +HAVE_DOT = YES + +# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed +# to run in parallel. When set to 0 doxygen will base this on the number of +# processors available in the system. You can set it explicitly to a value +# larger than 0 to get control over the balance between CPU load and processing +# speed. +# Minimum value: 0, maximum value: 32, default value: 0. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_NUM_THREADS = 0 + +# When you want a differently looking font in the dot files that doxygen +# generates you can specify the font name using DOT_FONTNAME. You need to make +# sure dot is able to find the font, which can be done by putting it in a +# standard location or by setting the DOTFONTPATH environment variable or by +# setting DOT_FONTPATH to the directory containing the font. +# The default value is: Helvetica. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_FONTNAME = Helvetica + +# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of +# dot graphs. +# Minimum value: 4, maximum value: 24, default value: 10. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the default font as specified with +# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set +# the path where dot can find it using this tag. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_FONTPATH = + +# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for +# each documented class showing the direct and indirect inheritance relations. +# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a +# graph for each documented class showing the direct and indirect implementation +# dependencies (inheritance, containment, and class references variables) of the +# class with other documented classes. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for +# groups, showing the direct groups dependencies. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +UML_LOOK = NO + +# If the UML_LOOK tag is enabled, the fields and methods are shown inside the +# class node. If there are many fields or methods and many nodes the graph may +# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the +# number of items for each type to make the size more manageable. Set this to 0 +# for no limit. Note that the threshold may be exceeded by 50% before the limit +# is enforced. So when you set the threshold to 10, up to 15 fields may appear, +# but if the number exceeds 15, the total amount of fields shown is limited to +# 10. +# Minimum value: 0, maximum value: 100, default value: 10. +# This tag requires that the tag HAVE_DOT is set to YES. + +UML_LIMIT_NUM_FIELDS = 10 + +# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and +# collaboration graphs will show the relations between templates and their +# instances. +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +TEMPLATE_RELATIONS = NO + +# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to +# YES then doxygen will generate a graph for each documented file showing the +# direct and indirect include dependencies of the file with other documented +# files. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +INCLUDE_GRAPH = YES + +# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are +# set to YES then doxygen will generate a graph for each documented file showing +# the direct and indirect include dependencies of the file with other documented +# files. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH tag is set to YES then doxygen will generate a call +# dependency graph for every global function or class method. +# +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. Disabling a call graph can be +# accomplished by means of the command \hidecallgraph. +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller +# dependency graph for every global function or class method. +# +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable caller graphs for selected +# functions only using the \callergraph command. Disabling a caller graph can be +# accomplished by means of the command \hidecallergraph. +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical +# hierarchy of all classes instead of a textual one. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the +# dependencies a directory has on other directories in a graphical way. The +# dependency relations are determined by the #include relations between the +# files in the directories. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. For an explanation of the image formats see the section +# output formats in the documentation of the dot tool (Graphviz (see: +# http://www.graphviz.org/)). +# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order +# to make the SVG files visible in IE 9+ (other browsers do not have this +# requirement). +# Possible values are: png, png:cairo, png:cairo:cairo, png:cairo:gd, png:gd, +# png:gd:gd, jpg, jpg:cairo, jpg:cairo:gd, jpg:gd, jpg:gd:gd, gif, gif:cairo, +# gif:cairo:gd, gif:gd, gif:gd:gd, svg, png:gd, png:gd:gd, png:cairo, +# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and +# png:gdiplus:gdiplus. +# The default value is: png. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_IMAGE_FORMAT = png + +# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to +# enable generation of interactive SVG images that allow zooming and panning. +# +# Note that this requires a modern browser other than Internet Explorer. Tested +# and working are Firefox, Chrome, Safari, and Opera. +# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make +# the SVG files visible. Older versions of IE do not have SVG support. +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +INTERACTIVE_SVG = NO + +# The DOT_PATH tag can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the \dotfile +# command). +# This tag requires that the tag HAVE_DOT is set to YES. + +DOTFILE_DIRS = + +# The MSCFILE_DIRS tag can be used to specify one or more directories that +# contain msc files that are included in the documentation (see the \mscfile +# command). + +MSCFILE_DIRS = + +# The DIAFILE_DIRS tag can be used to specify one or more directories that +# contain dia files that are included in the documentation (see the \diafile +# command). + +DIAFILE_DIRS = + +# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the +# path where java can find the plantuml.jar file. If left blank, it is assumed +# PlantUML is not used or called during a preprocessing step. Doxygen will +# generate a warning when it encounters a \startuml command in this case and +# will not generate output for the diagram. + +PLANTUML_JAR_PATH = + +# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a +# configuration file for plantuml. + +PLANTUML_CFG_FILE = + +# When using plantuml, the specified paths are searched for files specified by +# the !include statement in a plantuml block. + +PLANTUML_INCLUDE_PATH = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes +# that will be shown in the graph. If the number of nodes in a graph becomes +# larger than this value, doxygen will truncate the graph, which is visualized +# by representing a node as a red box. Note that doxygen if the number of direct +# children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that +# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. +# Minimum value: 0, maximum value: 10000, default value: 50. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs +# generated by dot. A depth value of 3 means that only nodes reachable from the +# root by following a path via at most 3 edges will be shown. Nodes that lay +# further from the root node will be omitted. Note that setting this option to 1 +# or 2 may greatly reduce the computation time needed for large code bases. Also +# note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. +# Minimum value: 0, maximum value: 1000, default value: 0. +# This tag requires that the tag HAVE_DOT is set to YES. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not seem +# to support this out of the box. +# +# Warning: Depending on the platform used, enabling this option may lead to +# badly anti-aliased labels on the edges of a graph (i.e. they become hard to +# read). +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) support +# this, this feature is disabled by default. +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page +# explaining the meaning of the various boxes and arrows in the dot generated +# graphs. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot +# files that are used to generate the various graphs. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_CLEANUP = YES -- GitLab From 468ec445d4ba9bfe5db61d9906987f306e843dde Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Fri, 1 Apr 2022 16:21:55 +0200 Subject: [PATCH 046/163] Tache B.1 : modification de la commande doc --- Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 8cff489..21528bf 100644 --- a/Makefile +++ b/Makefile @@ -68,7 +68,8 @@ $(TARGET) : $(OBJS) # Création d'une commande "doc" permettant de lancer l'outil doxygen -doc : doxygen +doc : + doxygen doxygen_config # Création d'une commande "clean" permettant de supprimer les fichers objets et la cible -- GitLab From 17fa63650a852e037a173e5693548ecc2650d2d2 Mon Sep 17 00:00:00 2001 From: "martin.fond" <martin.fond@ensiie.fr> Date: Fri, 1 Apr 2022 16:53:18 +0200 Subject: [PATCH 047/163] [LotB][B.4][B.6] Suppression des variables globales redondantes et implementation de empty_hand (faction.c) --- headers/faction.h | 1 + headers/plateau.h | 9 +++------ headers/structure.h | 2 +- src/faction.c | 9 +++++++-- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/headers/faction.h b/headers/faction.h index 6f5181f..51f2abc 100644 --- a/headers/faction.h +++ b/headers/faction.h @@ -11,6 +11,7 @@ */ #include "structure.h" +#include "OurRandom.h" /** *\brief Creation d'un type faction contenant toutes les informations relatives a un joueur diff --git a/headers/plateau.h b/headers/plateau.h index 41e94e2..9981d2f 100644 --- a/headers/plateau.h +++ b/headers/plateau.h @@ -15,12 +15,10 @@ #include "carte.h" #include "faction.h" +#include "structure.h" -#ifdef HAND_SIZE -#define BOARD_SIZE (2*HAND_SIZE -1) -#endif -#define WIN_NUMBER +#define WIN_NUMBER 2 @@ -34,8 +32,7 @@ typedef struct board* board; - -/** +#define WIN_NUMBE *\fn board create_new_board() *\param aucun *\brief Fonction de création d'un objet de type board, avec un support de jeu vide et les deux factions qui vont jouer diff --git a/headers/structure.h b/headers/structure.h index 1419cbf..da78548 100644 --- a/headers/structure.h +++ b/headers/structure.h @@ -240,7 +240,7 @@ struct faction unsigned int fPtsDDRS; unsigned int fNbRoundWon; CList fHand; - Pile fDeck; + Stack fDeck; bool fHasMulligan; } diff --git a/src/faction.c b/src/faction.c index 7e1f66d..159a2bc 100644 --- a/src/faction.c +++ b/src/faction.c @@ -34,5 +34,10 @@ void declare_mulligan(faction fac){ } void empty_hand(faction fac){ - -} \ No newline at end of file + int i; + for (i=0; i < HAND_SIZE; i += 1) + { + push(fac->fDeck, fac->fHand->fCard); + remove_where(fac->fHand->fCard, 0, NULL); + } +} -- GitLab From 9a02523a07c890511304928ddeb65d7f58149d7e Mon Sep 17 00:00:00 2001 From: Felicien FISCUS <felicien.fiscus@pc130-10.pedago.ensiie.fr> Date: Fri, 1 Apr 2022 17:16:04 +0200 Subject: [PATCH 048/163] [LotB][B.3]fixing des erreurs de syntaxe et de compilation --- headers/structure.h | 41 +++++++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/headers/structure.h b/headers/structure.h index 1419cbf..cebc076 100644 --- a/headers/structure.h +++ b/headers/structure.h @@ -70,6 +70,14 @@ typedef struct Node* CList; */ CList empty_CList(); +/** + * \brief check si la CList spécifié est vide ou pas + * \param lst la CList à tester + * \return bool true si \a lst a 0 element, false sinon + */ +bool is_empty(CList lst); + + /** * \brief permet d'avoir la longueur de la liste * \param lst la CList @@ -85,10 +93,11 @@ unsigned int size(CList lst); * sera donc la \a index_pos ème node de la CList. * si vous voulez insérer en spécifiant la position avec une Node, il suffit de spécifier \a node_pos * et de mettre \a index_pos à -1. - * \param node_pos la Node où la carte sera insérer: elle sera insérer juste apres node_pos + * \param node_pos la Node où la carte sera insérer: elle sera insérer à la place de node_pos * si vous voulez insérer en spécifiant la position avec un int, il suffit de spécifier \a index_pos * et de mettre \a node_pos à NULL - * \return CList la CList résultante avec l'élement insérer ou (si aucune position n'est spécifié) la meme CList que passer en argument + * \return CList la CList résultante avec l'élement insérer ou (si aucune position n'est spécifié ou si la position n'est pas valide) + * la meme CList que passer en argument et affiche un message d'erreur dans stderr */ CList insert_where(CList lst, struct card* crd, int index_pos, struct Node* node_pos); @@ -101,28 +110,23 @@ CList insert_where(CList lst, struct card* crd, int index_pos, struct Node* node CList add_card(CList lst, struct card* crd); /** - * \brief permet d'ajouter une liste deja existante en tete de la CList 'lst', c'est une concaténation + * \brief permet d'ajouter une liste deja existante en queue de la CList 'lst', c'est une concaténation * \param lst la CList a modifier * \param concat la CList a ajouter à lst, si size(concat) == 0 rien ne sera modifier * \return la CList modifier */ CList add_list(CList lst, CList concat); -/** - * \brief check si la CList spécifié est vide ou pas - * \param lst la CList à tester - * \return bool true si \a lst a 0 element, false sinon - */ -bool is_empty(CList lst); /** * \brief enlève un element de la liste spécifié qui correspond à la carte spécifié. * \param lst la CList à modifié * \param crd la carte à enlever - * \return CList NULL si aucune carte de \a lst ne correspond à celle spécifié, la CList mis à jour sinon. + * \return struct card* NULL si aucune carte de \a lst ne correspond à celle spécifié, la carte retiré sinon. + * Attention, la responsabilité de désallouer la mémoire pris par la carte en question est transmise au caller */ -CList remove(CList lst, struct card crd); +struct card* remove(CList lst, struct card* crd); /** * \brief la meme chose que \see remove sauf qu'au lieu de spécifié la carte, @@ -136,10 +140,11 @@ CList remove(CList lst, struct card crd); * et de mettre \a node_pos à NULL * \return CList NULL si la position spécifié est invalide, et la meme CList inchangé si aucune position n'est spécifié */ -CList remove_where(CList lst, int index_pos, struct Node* node_pos); +struct card* remove_where(CList lst, int index_pos, struct Node* node_pos); /** - * \brief libere la memoire allouée par la CList + * \brief libere la memoire allouée par la CList, s'il reste des cartes dans la liste, + * cette fonction libère aussi la mémoire prise par ces cartes * \param lst CList a libéré si liste vide, la fonction en fait rien * \return rien */ @@ -220,7 +225,7 @@ void shuffle_stack(Stack* stck); void reverse(Stack* stck); /** - * \brief libere la mémoire allouer par la pile ainsi que la pile elle même + * \brief libere la mémoire allouer par la pile ainsi que celle des cartes s'il en reste * \param stck Valid Stack pointer * \return rien */ @@ -240,7 +245,7 @@ struct faction unsigned int fPtsDDRS; unsigned int fNbRoundWon; CList fHand; - Pile fDeck; + Stack fDeck; bool fHasMulligan; } @@ -256,7 +261,7 @@ typedef enum CellState */ struct cell { - card* fCard; + struct card* fCard; CellState fState; } @@ -265,8 +270,8 @@ struct cell */ struct board { - cell fBoard[BOARD_SIZE * BOARD_SIZE]; - faction fFactions[2]; + struct cell fBoard[BOARD_SIZE * BOARD_SIZE]; + struct faction fFactions[2]; } #endif /*STRUCTURE_H*/ \ No newline at end of file -- GitLab From a2b92462267e16ba5eaf5afab977108cdabffd5a Mon Sep 17 00:00:00 2001 From: "martin.fond" <martin.fond@ensiie.fr> Date: Fri, 1 Apr 2022 17:19:46 +0200 Subject: [PATCH 049/163] [LotB][B.6] Implementation de faction.c (ajout des fonctions manquantes) --- headers/plateau.h | 2 ++ src/faction.c | 23 +++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/headers/plateau.h b/headers/plateau.h index 9981d2f..bd0a136 100644 --- a/headers/plateau.h +++ b/headers/plateau.h @@ -33,6 +33,8 @@ typedef struct board* board; #define WIN_NUMBE + +/** *\fn board create_new_board() *\param aucun *\brief Fonction de création d'un objet de type board, avec un support de jeu vide et les deux factions qui vont jouer diff --git a/src/faction.c b/src/faction.c index 159a2bc..9c89c9a 100644 --- a/src/faction.c +++ b/src/faction.c @@ -41,3 +41,26 @@ void empty_hand(faction fac){ remove_where(fac->fHand->fCard, 0, NULL); } } + +void shuffle_deck(faction fac) +{ + shuffle_stack(fac->fDeck); +} + +void redraw(faction fac) +{ + int i; + for (i=0; i < HAND_SIZE; i += 1) + { + add_card(fac->fHand, pop(fac->fDeck)); + } +} + +bool hand_is_empty(faction fac) +{ + if (fac->fHand == NULL) + { + return true; + } + return false; +} \ No newline at end of file -- GitLab From c492f2ad4ee69cdb694f36493340672541c04ccb Mon Sep 17 00:00:00 2001 From: Felicien FISCUS <felicien.fiscus@pc130-10.pedago.ensiie.fr> Date: Fri, 1 Apr 2022 17:21:37 +0200 Subject: [PATCH 050/163] [LotB][B.3] modifs commentaires explicitation --- headers/structure.h | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/headers/structure.h b/headers/structure.h index cebc076..e5170eb 100644 --- a/headers/structure.h +++ b/headers/structure.h @@ -121,34 +121,35 @@ CList add_list(CList lst, CList concat); /** * \brief enlève un element de la liste spécifié qui correspond à la carte spécifié. - * \param lst la CList à modifié + * \param lst la CList à modifié , doit etre un pointeur valide * \param crd la carte à enlever * \return struct card* NULL si aucune carte de \a lst ne correspond à celle spécifié, la carte retiré sinon. * Attention, la responsabilité de désallouer la mémoire pris par la carte en question est transmise au caller */ -struct card* remove(CList lst, struct card* crd); +struct card* remove(CList* lst, struct card* crd); /** * \brief la meme chose que \see remove sauf qu'au lieu de spécifié la carte, * on spécifie la position de la carte qu'on veut enlever - * \param lst la CList à modifier + * \param lst la CList à modifier, doit etre un pointeur valide * \param index_pos la position en tant qu'index de la carte qui sera retiré. * si vous voulez retirer un element en spécifiant la position avec une Node, il suffit de spécifier \a node_pos * et de mettre \a index_pos à -1. * \param node_pos la Node où la carte sera retiré. * si vous voulez retirer en spécifiant la position avec un int, il suffit de spécifier \a index_pos * et de mettre \a node_pos à NULL - * \return CList NULL si la position spécifié est invalide, et la meme CList inchangé si aucune position n'est spécifié + * \return struct card* NULL si la position spécifié est invalide, et la carte enlever sinon + * Attention, la responsabilité de désallouer la mémoire pris par la carte en question est transmise au caller */ -struct card* remove_where(CList lst, int index_pos, struct Node* node_pos); +struct card* remove_where(CList* lst, int index_pos, struct Node* node_pos); /** * \brief libere la memoire allouée par la CList, s'il reste des cartes dans la liste, * cette fonction libère aussi la mémoire prise par ces cartes - * \param lst CList a libéré si liste vide, la fonction en fait rien + * \param lst CList a libéré si liste vide, la fonction en fait rien, doit etre un pointeur valide * \return rien */ -void free_CList(CList lst); +void free_CList(CList* lst); /** -- GitLab From 8bb02e6ed503811c4080ef66245839d6a813565f Mon Sep 17 00:00:00 2001 From: Lucas Desrumeaux <lucas@carjager.com> Date: Fri, 1 Apr 2022 17:23:25 +0200 Subject: [PATCH 051/163] [B.2] Premier test d'exemple pour tester Cunit --- test/example | Bin 0 -> 17136 bytes test/example.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100755 test/example create mode 100644 test/example.c diff --git a/test/example b/test/example new file mode 100755 index 0000000000000000000000000000000000000000..efa37f40bc32e81e3e039147b109d8a64e7155f9 GIT binary patch literal 17136 zcmeHOeQX@X6`%9v!-3>{Au%|Hl5I*PhsYN@bzGCk<<6h$)(JGR3sn=Avu|Uc@ZC9g zd&Q<eT^Ud;Ff~XmL2acFDFRebQ&p9Ke&96aqvAtJMXOL$HKj$IOA5i1)&-L5d$aHD z?e5(HMOD>5cBH#E@Ap1t=FQID&h5N!boO>t_<VwkUwmF57hY*1VG=ZKqY99)Xb~&m zd#$)sECGIz#7ueEBp@}*$qFZ}B-{@a?P{=6f?i_6f+_b9DcY4Q!_)v%5i~W?ZZTGg zchkev52h@)+EdUNiXy))dIlAsFtyuZY)0#)Sd6wh=|PIi5u$8|EZR+w-2~Y&6|7H` z<B2iBPYaF1O%;$~QRKG}Zo6yA&P_W=pDDJ1W!Gy)?31*2HQCiE(v5J_-6kxUa(iC_ zJB-W6Ej-OTsl9UZFhg-<O4BJejl>6<n>LNa>PO<q>{$I+OLKj5Qz(-PZI)fYeqkGU zO?B_+$7z{GjKV1AVm0w7|7GP%-}(LaRX^MO)_dK9YoB{={qfy#_JM7p4i>cMDQ12J zR8R-Uzd!r{Rx1(XF}8L7_Vg2fzW3%6`iqH|_g%|N1~iJx!vI}S42!-pcopDE3H=w# z=-*HV|7jWgwletpW$=xFEAVlbdjKdkuCX%sR=^ebxXTKNZcwZd!LU=JNW4}kF8nm8 zt#hhMZZ+w<{Rp_O2D8byftOOF(0cl|YcV~o55+Tvp6=V;K9Wl6ebIptU1-`+B9+uK zMl@|`nyFe+vAti5gU5JuBz}{wnJVdV0dO=H(=yq(p)+IX83XG>x}oXmbSf<cnT(z` zdJ>}}dO}YcQ6rv8B0dn!#0Rwus3uY|>B2<P*`$V!GN?2-qDPb2(L%F0Kpb2%3}A39 zs_l&@WygR;5sfDijVFbs$D&3Q1Ou6ji3603iSFK>wsviEXme;wacB#x!zX;ORv^$& zu>LAgUK82c_%d8c>rJtB|K<ChLKn*z-Cr3$MZbHMVf0$KPcnb<N)yMm$ZH*uQ#PD^ zA)d40&>^dwvEj=tREPx|j%$z00m7F8KtqzEgEqVn86h6B;dr0na>Rzq-$N2SX2b3G z*;yNoZF70nhM&hE(Bn4zd>igny$E;_@FL(vz>9zvf&ZTfyi;}Qd+OxrO7+ggFK-e; zy?xfG$RAfHe^q%*b~3+Z0O0xj`avL7YX#~Lqhx;WPx*X)M)LSTGCz01;_*Rbe(tEn z<Ac)t+>b0CA4uls9<X?P5SgF5$Kvq;WPa|O7LN}e^K<){hu*Zx-gF4rAK+gIVebn3 zQ!f7JF8(Jj{!tfy*u{U}#edt*H~y_>>cn;G)T`>`U(Q_J*E_wq86u!guXqvyqfWQt zULaqc29v+f0DC`F)ak|dBDrG0sD{w*z&eC}S^iYj+6fq~I7Sro<5GXi0Fn*o)TuM- z(KoMDk1qIC-_z=ebH-|Lu$~-L=1=XFabSC#pNUo!i|odJb+WYrtLoHi#&Y$})+NB? z9zK`P=VB1trx%}ve;s^#z}9LX?dNU;Ay)dq?lJ7$o?~U$$m1x62s{KEREWSKNvaP6 z`Go=!jEKlR2rbSOe8BY=RG;Zw0FlUT0~thOX)X<wH?rz<HC`9$^p>wn(z+X5<(fgJ zPIWG*lea90?DE`&z~>@p(4pQ5@O1SJrcn#FKlMzm6Af;k1=Tmsf-362vF1s<PIFHn z@GgEG$FKL{>(|F1h__*P<n<M~rgyrv{c<59U+$UuU8KKf>fK0RWa@){b-KO@;9b2N z&f*%%{qO^5<>*<zv9|FQn!nzu`QE8FJEmTb<X8Vuojm4KulPguueiRxx+k(bvL|v~ zL_4;3Z^+&rt~`vdT$k2Ll-=>Zya;#^@FL(vz>9zv0WShx1iT1%5%41Li6ek-P=r1f z#g{*!LD497;p?KlbXFJmibqN9RSaZ&7yGy2J6Zg%f8j0Iz5(5TCZEUc-~ph=f!4g8 z&*S?x-#qN2fChn9!iH}x&^n-fKvkd%K!<@2zmv}&0g46Rm16PTv{U%Tg1(EFFRh#b z8RGat6Wf42zYrZu<tv`cpxOkV>!~jy5bO%ne4*<68!IQom9<+h|LkS!P#x{D-_L>` zzZ+uQfXXc369`bjw(f$@N*GHOVx58D9Tn{>mUKaffJONuh<}Luc@Vz^{gp4T*nXs7 ze;VYA!2Y}FhvgObN(J}}LoA1J?+3Y#@~%MeTNOQln!Ej-0cCnoXQ1w`#T|i$JC>+{ zmdT~vfp9X=5(zX!0(ETxr7cj?76`TlD&>2yKJaq{{Mg^~pi8fK5%415MZk-I7XdE< zUIe@dcoFa-@V|)wpF87oX0-jW&U7*VDs^W$cZ)VJ@IFhH1FKBBhIl?-d@=ES2CbHO zKIew}7c4A)_gp@O{6RX*#(RZPs_<E`lO*S}UX9dIKI2t`PM}nq#QG*PF+u0T@Rb{u zS@~Vq_wm`XiwJ*+0LF9F5$-qJ^O-ts|5CDNz4!Cx_@KKIf){^syw8$9cugpIjyr7I zB!7tH|015pLGJ%+#5&jQ^4LK09VU7;(d&th5}hDAL-Zg~m%EQ-E5oKrcYFI*rLKP< zn>4b@6``h3Lw#dba*elcZU{9rg&H@Q_(!^g^N~L5e7{}W5C1vv`E)1l7kvKQi7yg2 zmzV%QoWADk)~UZl@b&7%mkPeFop`0-`F7&V1Yajk{5-+eqZ2=0@OA6NVHKB{7e8cC zC?)ZLI8qX?60;@opp~!TY<H#L`-BsR!>@`RG3$P@$~up4m-^vfl>H_3tF3djPW=l7 z-*24wMWWR8?iV%I{lTdZcek(|G3$O&TXa4fC4Rwozk&^}>qYQqO#v}$cweo6Ng1W{ zzAO(Ae$a(~nsB~vv;OCx;<NRK?;~9jFOEZk{P6Dp`x%$|#qm4<c&Yv$lKQoxCJYrQ ze7`F<-bX;k2lIFu2jVKF{68Ues*C3FIlz6QcphIOef}NdCSI47;_K=?>8E(!x4;iX zg(zMxK^WKtFkdtDyT`v%ip06K0^M8&?*UvXs9CiaC0=~J>1F(km%;BSgWnH$sl0+( z)UPOBrw7aUd9)1vJo$I8mzSk}P;8*{?o~A69N?wm@K334g~h5=!Mv=jSR?p%f(4f# z4l~2f7Li~h;5c6j&6iI2Ho{w6{dpSXL0Cshm=uZpM)s$0f7?X(7o{JkE^^lZj(&n+ zr)-egy_wpT|Gk3BFyY;VbHc$sz;V28Keqs`I9*HbKET(Nz{OzN$QW5T;WH=-c^;aP zfW!&N^vFQ+LoB5Yjid&mBU;Qzr88PIJ0=EG_=miq$3iU)&5$NiN(nP7;#xGFj*dgt zgaH{Jd(+W`uEny6#5kDPIGG>fP%ZrBZ|I3pa3vE?x^_mkcWRwGIxyeFX%rJ$$5(bl zw)eC<B{Dq)AV^@+I#tc|pmyvOT6gbNZINE>s;;hGoqbwgq^-9Ty~-qz!Aw?mzjT^O zsce=H%akdVh60!)`^BBQLb)fPR>*}Z%1{Z1?Wrg*3y`iti7MDfGq*;*EO904VC$u_ zYQRM%r42`uF^qT5Rp2ZZPionW4)HC72AvC;Sz~L0MkG^s>?t!cl?GAj2qY2l6k>K! z$&?{yYL0W5B9s|V7|{WsM%tvqT#F|mOKDVuk|{$E4JEUo(R6AQl844^&_Fg0X>;)y zL6NqedLud{r223)Gb}=}@gy{1QX_3jzNV)$n0F-Ah|xfn)<>dfK()~kLxf~_LQoA2 zrGUjsMjsR*LmvYcmj!62WNuMNAEt#c90PC6nLf-FVOnq<nu;dk;LJ3K%p?(l)rg5v zrIz=9is2Iq+|uAT&MY<bT+5XAXC#)oTu1sD_~4$1?OVv6sRA;4;pYOznxSI1zn1Ko z;(IlF;rlsbJy5aR^K&^<g%ydq?XLm+AF!w5{`2!Y(<ZW`?U(gj!)~Kc!96G2pQQdX zJ%GW5f_=m)kDvF4alp`o?Rh`Il=rouA`7`=R_ucs?ityh_YF+fktX+_^_boYa@>P5 z&-)9e3fa5+Pq3JV3dWS}c^|@bmK3>t_xSH4`!>?!{R&gNJ;uy!{{UbZ6ZQ{3wq_yf zegb#T|My(>3fVE8A$Lq%?!|*Hd)_B8W&LvYM_l%^WWaQS4T-WprjNVq!?aIe+Rqc? zvS+tXy6ky>#+3ixVSRV}o+5jz8HF^7))C9ZZT|uYaQ@i7PBAr^?lxKL+im{}NbL6e z6;qWdzSp-GzJ3^c4Jx?DqGfCCA2~nUt<OBux4{;lVcDMdnPc?;LSa3VEAWh;1p!{W zY|r~q&bQ~l;QGVDc0B(-01Ss{+0*}86ZBv@0Wy1Gd!|dk*lsVvq}^arZijua9rJiL z05NW#pHG7y(|#qjPwMPeu>D30F)P?tEOyG*jwvy}!{kt*z<ml}3<>w2@4w3c<G!1g h=J)luk%sbPmve5{l;U2awEe2BrUve(?8U{3e*=&R+TZ{H literal 0 HcmV?d00001 diff --git a/test/example.c b/test/example.c new file mode 100644 index 0000000..db7043b --- /dev/null +++ b/test/example.c @@ -0,0 +1,66 @@ +#include <stdio.h> +#include <string.h> +#include <CUnit/CUnit.h> +#include "CUnit/Basic.h" +//#include "../headers/structure.h" + +/* Pointer to the file used by the tests. */ +static FILE* temp_file = NULL; + +/* The suite initialization function. + * Opens the temporary file used by the tests. + * Returns zero on success, non-zero otherwise. + */ +int init_suiteTrue(void) +{ + return 0; +} + +/* The suite cleanup function. + * Closes the temporary file used by the tests. + * Returns zero on success, non-zero otherwise. + */ +int clean_suiteTrue(void){ + return 0; +} + +/* Simple test of fprintf(). + * Writes test data to the temporary file and checks + * whether the expected number of bytes were written. + */ +void testTrue(void){ + CU_ASSERT(1); +} + +/* The main() function for setting up and running the tests. + * Returns a CUE_SUCCESS on successful running, another + * CUnit error code on failure. + */ +int main() +{ + CU_pSuite pSuite = NULL; + + /* initialize the CUnit test registry */ + if (CUE_SUCCESS != CU_initialize_registry()) + return CU_get_error(); + + /* add a suite to the registry */ + pSuite = CU_add_suite("SuiteTrue", init_suiteTrue, clean_suiteTrue); + if (NULL == pSuite) { + CU_cleanup_registry(); + return CU_get_error(); + } + + /* add the tests to the suite */ + /* NOTE - ORDER IS IMPORTANT - MUST TEST fread() AFTER fprintf() */ + if (NULL == CU_add_test(pSuite, "test of true", testTrue)) { + CU_cleanup_registry(); + return CU_get_error(); + } + + /* Run all tests using the CUnit Basic interface */ + CU_basic_set_mode(CU_BRM_VERBOSE); + CU_basic_run_tests(); + CU_cleanup_registry(); + return CU_get_error(); +} -- GitLab From d430b7a039e89a5aff17bcf7bfcd0918553f5b67 Mon Sep 17 00:00:00 2001 From: Felicien FISCUS <felicien.fiscus@pc130-10.pedago.ensiie.fr> Date: Fri, 1 Apr 2022 17:46:02 +0200 Subject: [PATCH 052/163] [LotB][B.3] fixing header compilation error --- src/OurRandom.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/OurRandom.c b/src/OurRandom.c index 414f9d8..c0060df 100644 --- a/src/OurRandom.c +++ b/src/OurRandom.c @@ -1,4 +1,4 @@ -#include "OurRandom.h" +#include "../headers/OurRandom.h" uint32_t Lehmer32(unsigned int* nLehmer) { -- GitLab From 73d9aa8dad4c2913325e8bab484045d1c1427336 Mon Sep 17 00:00:00 2001 From: Felicien FISCUS <felicien.fiscus@pc130-10.pedago.ensiie.fr> Date: Fri, 1 Apr 2022 17:47:50 +0200 Subject: [PATCH 053/163] [LotB][B.3] fixing compilation error --- headers/structure.h | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/headers/structure.h b/headers/structure.h index e5170eb..707d357 100644 --- a/headers/structure.h +++ b/headers/structure.h @@ -9,7 +9,7 @@ #define HAND_SIZE 8 #define MAX_LEN 200 -#define BOARD_SIZE 2*HAND_SIZE - 1 +#define BOARD_SIZE (2 * 8 - 1) /*obliger de hardcoder le 8, sinon probleme d'ordre de la compilation*/ /*pratique*/ typedef enum bool @@ -48,7 +48,7 @@ struct card unsigned int fNbOccurences; char fEffectDesc[MAX_LEN]; int player; -} +}; /*Structure pile et list chainee utilisees dans la suite*/ @@ -58,8 +58,8 @@ struct card struct Node { struct card* fCard; - Node* fNext; -} + struct Node* fNext; +}; typedef struct Node* CList; @@ -126,7 +126,7 @@ CList add_list(CList lst, CList concat); * \return struct card* NULL si aucune carte de \a lst ne correspond à celle spécifié, la carte retiré sinon. * Attention, la responsabilité de désallouer la mémoire pris par la carte en question est transmise au caller */ -struct card* remove(CList* lst, struct card* crd); +struct card* remove_card(CList* lst, struct card* crd); /** * \brief la meme chose que \see remove sauf qu'au lieu de spécifié la carte, @@ -248,7 +248,7 @@ struct faction CList fHand; Stack fDeck; bool fHasMulligan; -} +}; typedef enum CellState { @@ -264,7 +264,7 @@ struct cell { struct card* fCard; CellState fState; -} +}; /** * \brief utilisee dans plateau.h @@ -273,6 +273,6 @@ struct board { struct cell fBoard[BOARD_SIZE * BOARD_SIZE]; struct faction fFactions[2]; -} +}; #endif /*STRUCTURE_H*/ \ No newline at end of file -- GitLab From bdefbca0c08a66a5797d8c2d52907139962e5b3d Mon Sep 17 00:00:00 2001 From: Felicien FISCUS <felicien.fiscus@pc130-10.pedago.ensiie.fr> Date: Fri, 1 Apr 2022 18:20:00 +0200 Subject: [PATCH 054/163] [LotB][B.3] implementation des fonctions de CList --- src/structure.c | 234 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 234 insertions(+) create mode 100644 src/structure.c diff --git a/src/structure.c b/src/structure.c new file mode 100644 index 0000000..2694df7 --- /dev/null +++ b/src/structure.c @@ -0,0 +1,234 @@ +#include "../headers/structure.h" +#include <stdlib.h> +#include <stdio.h> + + +/*************CList methods**********/ + +CList empty_CList() +{ + return NULL; +} + +bool is_empty(CList lst) +{ + return (lst == NULL) ? true : false; +} + +unsigned int size(CList lst) +{ + unsigned int res = 0; + if(is_empty(lst)) + { + struct Node* curr = lst; + while(curr) + { + res++; + curr = curr->fNext; + } + } + + return res; +} + + + +CList insert_where(CList lst, struct card* crd, int index_pos, struct Node* node_pos) +{ + + struct Node* curr = NULL; + struct Node* last = lst; + int index = 0; + + /*d'abord gérer le cas ou la liste est vide*/ + if(!last) + { + lst = (CList)malloc(sizeof(struct Node)); + lst->fCard = crd; + lst->fNext = NULL; + return lst; + } + curr = lst->fNext; + + while(curr && (index < index_pos || curr != node_pos)) + { + index++; + last = curr; + curr = curr->fNext; + } + + /*check si la position spécifié est valide*/ + if((index_pos == -1 && node_pos == NULL) || (!curr && index < index_pos)) + { + fprintf(stderr, "structure.c | insert_where : position invalide\n"); + return lst; + } + + struct Node* new_val = (CList)malloc(sizeof(struct Node)); + new_val->fCard = crd; + new_val->fNext = curr; + last->fNext = new_val; + + return lst; + +} + +CList add_card(CList lst, struct card* crd) +{ + return insert_where(lst, crd, 0, NULL); +} + +CList add_list(CList lst, CList concat) +{ + if(!lst) return concat; + + CList curr = lst; + /*on va à la fin de la list lst*/ + while(curr->fNext) + { + curr = curr->fNext; + } + + curr->fNext = concat; + + return lst; +} + + +struct card* remove_card(CList* lst, struct card* crd) +{ + if(!(*lst)) return lst; + /*si y'a que un élement*/ + if(!(*lst)->fNext) + { + if((*lst)->fCard == crd) + { + free(*lst); + *lst = NULL; + return crd; + } + } + + /*si c'est le premier élement*/ + if((*lst)->fCard == crd) + { + CList buff = (*lst)->fNext; + free(*lst); + *lst = buff; + return crd; + } + + CList curr = (*lst)->fNext; + CList last = *lst; + + while(curr && (curr->fCard != crd)) + { + last = curr; + curr = curr->fNext; + } + + if(!curr) + { + return NULL; + } + + last->fNext = curr->fNext; + free(curr); + + + return crd; + + +} + + +struct card* remove_where(CList* lst, int index_pos, struct Node* node_pos) +{ + if(index_pos == -1 && node_pos) + { + return remove_card(lst, node_pos->fCard); + } + + + struct Node* curr = NULL; + struct Node* last = lst; + int index = 0; + + /*d'abord gérer le cas ou la liste est vide*/ + if(!last) + { + return NULL; + } + /*si c'est le premier élement*/ + if(index_pos == 0) + { + CList buff = (*lst)->fNext; + free(*lst); + *lst = buff; + return crd; + } + + curr = lst->fNext; + + while(curr && index < index_pos) + { + index++; + last = curr; + curr = curr->fNext; + } + + /*check si la position spécifié est valide*/ + if((index_pos == -1 && node_pos == NULL) || (!curr && index < index_pos)) + { + fprintf(stderr, "structure.c | remove_where : position invalide\n"); + return NULL; + } + + struct card* res = curr->fCard; + + last->fNext = curr->fNext; + free(curr); + + return res; + + + +} + + +bool is_card_in(CList lst, struct card* crd) +{ + if(!lst) return false; + CList curr = lst; + while(curr) + { + if(curr->fCard == crd) + return true; + + curr = curr->fNext; + } + + return false; +} + +void free_CList(CList* lst) +{ + CList curr = *lst; + + while(curr) + { + CList buff = curr->fNext; + if(curr->fCard) + free(curr->fCard); + + free(curr); + curr = buff; + } + + *lst = NULL; +} + + + + +/****************************************************************************/ \ No newline at end of file -- GitLab From 612eef955984141728d460b68534378e1f21c0a6 Mon Sep 17 00:00:00 2001 From: Felicien FISCUS <felicien.fiscus@pc130-10.pedago.ensiie.fr> Date: Fri, 1 Apr 2022 18:20:47 +0200 Subject: [PATCH 055/163] [LotB][B.3] modifs commentaires --- headers/structure.h | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/headers/structure.h b/headers/structure.h index 707d357..3d51689 100644 --- a/headers/structure.h +++ b/headers/structure.h @@ -6,7 +6,7 @@ * \brief gere les structures de données (tableau, file, pile, ...) utilisées dans les fichiers plateau.h faction.h et carte.h * \author Felicien Fiscus */ - +#include "carte.h" #define HAND_SIZE 8 #define MAX_LEN 200 #define BOARD_SIZE (2 * 8 - 1) /*obliger de hardcoder le 8, sinon probleme d'ordre de la compilation*/ @@ -38,10 +38,12 @@ typedef enum CardType */ char* cardType_toString(CardType type); + + /** * \struct card * \brief definition du type abstrait dans carte.h -*/ +* struct card { CardType fCardType; @@ -49,7 +51,7 @@ struct card char fEffectDesc[MAX_LEN]; int player; }; - +*/ /*Structure pile et list chainee utilisees dans la suite*/ /** \struct Node @@ -89,7 +91,7 @@ unsigned int size(CList lst); * \brief insert une card a la CList spécifié, a la position spécifié, si aucune n'est spécifié, rien ne se passe * \param lst CList a modifié * \param crd la carte à ajouter - * \param index_pos la position en tant qu'index ou sera inserer la carte: la carte après insertion + * \param index_pos int >= -1 la position en tant qu'index ou sera inserer la carte: la carte après insertion * sera donc la \a index_pos ème node de la CList. * si vous voulez insérer en spécifiant la position avec une Node, il suffit de spécifier \a node_pos * et de mettre \a index_pos à -1. @@ -117,6 +119,14 @@ CList add_card(CList lst, struct card* crd); */ CList add_list(CList lst, CList concat); +/** + * \brief permet de savoir si la carte spécifié est dans la liste spécifié + * \param lst CList + * \param crd struct card* + * \return bool true si la carte est dedans, false sinon + */ +bool is_card_in(CList lst, struct card* crd); + /** @@ -132,7 +142,7 @@ struct card* remove_card(CList* lst, struct card* crd); * \brief la meme chose que \see remove sauf qu'au lieu de spécifié la carte, * on spécifie la position de la carte qu'on veut enlever * \param lst la CList à modifier, doit etre un pointeur valide - * \param index_pos la position en tant qu'index de la carte qui sera retiré. + * \param index_pos int >= -1 la position en tant qu'index de la carte qui sera retiré. * si vous voulez retirer un element en spécifiant la position avec une Node, il suffit de spécifier \a node_pos * et de mettre \a index_pos à -1. * \param node_pos la Node où la carte sera retiré. @@ -239,7 +249,7 @@ void free_stack(Stack* stck); * \struct card * \brief definition du type abstrait dans carte.h * -*/ +* struct faction { char fNom[MAX_LEN]; @@ -254,25 +264,25 @@ typedef enum CellState { Empty, FaceUp, FaceDown } CellState; - +*/ /** * \struct cell * \brief correspond a case/cellule du plateau de jeu * - */ + * struct cell { struct card* fCard; CellState fState; }; - +*/ /** * \brief utilisee dans plateau.h - */ + * struct board { struct cell fBoard[BOARD_SIZE * BOARD_SIZE]; struct faction fFactions[2]; }; - +*/ #endif /*STRUCTURE_H*/ \ No newline at end of file -- GitLab From 53158148b7ed886440ae80a2cf57c934610bda5c Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Fri, 1 Apr 2022 18:24:17 +0200 Subject: [PATCH 056/163] =?UTF-8?q?Tache=20B.1=20:=20modification=20du=20f?= =?UTF-8?q?ichier=20ganttproject,=20cr=C3=A9ation=20de=20fichiers=20vides?= =?UTF-8?q?=20dans=20les=20dossiers=20bin=20et=20obj=20pour=20que=20tout?= =?UTF-8?q?=20le=20monde=20ait=20ces=20dossiers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DiagrammeGantt.gan | 36 ++++++++++++++++++++++++------------ Makefile | 3 +-- bin/fichier | 0 obj/fichier | 0 4 files changed, 25 insertions(+), 14 deletions(-) create mode 100644 bin/fichier create mode 100644 obj/fichier diff --git a/DiagrammeGantt.gan b/DiagrammeGantt.gan index bffbdbd..e171697 100644 --- a/DiagrammeGantt.gan +++ b/DiagrammeGantt.gan @@ -1,11 +1,10 @@ -<?xml version="1.0" encoding="UTF-8"?><project name="Le projet de qualité supérieure" company="L'organisation de qualité supérieure" webLink="http://Leprojetdequalitésupériores" view-date="2022-03-13" view-index="0" gantt-divider-location="300" resource-divider-location="300" version="3.1.3103" locale="fr_FR"> - <description> - <![CDATA[Un jeu de carte fait en C de qualité supérieure, avec une équipe de qualité supérieure.]]> - </description> +<?xml version="1.0" encoding="UTF-8"?><project name="Le projet de qualité supérieure" company="L'organisation de qualité supérieure" webLink="http://Leprojetdequalitésupériores" view-date="2022-04-11" view-index="0" gantt-divider-location="297" resource-divider-location="300" version="3.2.3240" locale="fr_FR"> + <description><![CDATA[Un jeu de carte fait en C de qualité supérieure, avec une équipe de qualité supérieure.]]></description> <view zooming-state="default:0" id="gantt-chart"> <field id="tpd3" name="Nom" width="155" order="0"/> <field id="tpd4" name="Date de début" width="81" order="1"/> <field id="tpd5" name="Date de fin" width="60" order="2"/> + <option id="filter.completedTasks" value="false"/> </view> <view id="resource-table"> <field id="0" name="Nom" width="210" order="0"/> @@ -46,22 +45,27 @@ </task> <task id="0" name="A.1" color="#8cb6ce" meeting="false" start="2022-03-18" duration="2" complete="100" thirdDate="2022-03-23" thirdDate-constraint="0" expand="true"> <depend id="11" type="2" difference="0" hardness="Strong"/> + </task> + <task id="11" name="B.1" color="#8cb6ce" meeting="false" start="2022-03-22" duration="9" complete="0" thirdDate="2022-03-11" thirdDate-constraint="0" expand="true"> <depend id="12" type="2" difference="0" hardness="Strong"/> <depend id="13" type="2" difference="0" hardness="Strong"/> <depend id="14" type="2" difference="0" hardness="Strong"/> + </task> + <task id="12" name="B.2" color="#8cb6ce" meeting="false" start="2022-04-04" duration="15" complete="0" thirdDate="2022-03-11" thirdDate-constraint="0" expand="true"/> + <task id="13" name="B.3" color="#8cb6ce" meeting="false" start="2022-04-04" duration="15" complete="0" thirdDate="2022-03-11" thirdDate-constraint="0" expand="true"> <depend id="15" type="2" difference="0" hardness="Strong"/> <depend id="16" type="2" difference="0" hardness="Strong"/> + </task> + <task id="14" name="B.4" color="#8cb6ce" meeting="false" start="2022-04-04" duration="1" complete="0" thirdDate="2022-03-11" thirdDate-constraint="0" expand="true"> + <depend id="16" type="2" difference="0" hardness="Strong"/> + </task> + <task id="15" name="B.5" color="#8cb6ce" meeting="false" start="2022-04-25" duration="15" complete="0" thirdDate="2022-03-11" thirdDate-constraint="0" expand="true"> <depend id="17" type="2" difference="0" hardness="Strong"/> <depend id="18" type="2" difference="0" hardness="Strong"/> </task> - <task id="11" name="B.1" color="#8cb6ce" meeting="false" start="2022-03-22" duration="15" complete="0" thirdDate="2022-03-11" thirdDate-constraint="0" expand="true"/> - <task id="12" name="B.2" color="#8cb6ce" meeting="false" start="2022-03-22" duration="15" complete="0" thirdDate="2022-03-11" thirdDate-constraint="0" expand="true"/> - <task id="13" name="B.3" color="#8cb6ce" meeting="false" start="2022-03-22" duration="15" complete="0" thirdDate="2022-03-11" thirdDate-constraint="0" expand="true"/> - <task id="14" name="B.4" color="#8cb6ce" meeting="false" start="2022-03-22" duration="15" complete="0" thirdDate="2022-03-11" thirdDate-constraint="0" expand="true"/> - <task id="15" name="B.5" color="#8cb6ce" meeting="false" start="2022-03-22" duration="15" complete="0" thirdDate="2022-03-11" thirdDate-constraint="0" expand="true"/> - <task id="16" name="B.6" color="#8cb6ce" meeting="false" start="2022-03-22" duration="15" complete="0" thirdDate="2022-03-11" thirdDate-constraint="0" expand="true"/> - <task id="17" name="B.7" color="#8cb6ce" meeting="false" start="2022-03-22" duration="15" complete="0" thirdDate="2022-03-11" thirdDate-constraint="0" expand="true"/> - <task id="18" name="B.8" color="#8cb6ce" meeting="false" start="2022-03-22" duration="15" complete="0" thirdDate="2022-03-11" thirdDate-constraint="0" expand="true"/> + <task id="16" name="B.6" color="#8cb6ce" meeting="false" start="2022-04-25" duration="15" complete="0" thirdDate="2022-03-11" thirdDate-constraint="0" expand="true"/> + <task id="17" name="B.7" color="#8cb6ce" meeting="false" start="2022-05-16" duration="15" complete="0" thirdDate="2022-03-11" thirdDate-constraint="0" expand="true"/> + <task id="18" name="B.8" color="#8cb6ce" meeting="false" start="2022-05-16" duration="15" complete="0" thirdDate="2022-03-11" thirdDate-constraint="0" expand="true"/> </tasks> <resources> <resource id="0" name="Coreau Aurelien" function="Default:0" contacts="aurelien.coreau@ensiie.fr" phone=""/> @@ -71,9 +75,17 @@ </resources> <allocations> <allocation task-id="2" resource-id="0" function="Default:0" responsible="false" load="100.0"/> + <allocation task-id="11" resource-id="0" function="Default:0" responsible="false" load="100.0"/> + <allocation task-id="17" resource-id="0" function="Default:0" responsible="false" load="100.0"/> <allocation task-id="1" resource-id="1" function="Default:0" responsible="false" load="100.0"/> + <allocation task-id="14" resource-id="1" function="Default:0" responsible="false" load="100.0"/> + <allocation task-id="16" resource-id="1" function="Default:0" responsible="false" load="100.0"/> <allocation task-id="3" resource-id="2" function="Default:0" responsible="false" load="100.0"/> + <allocation task-id="15" resource-id="2" function="Default:0" responsible="false" load="100.0"/> + <allocation task-id="12" resource-id="2" function="Default:0" responsible="false" load="100.0"/> <allocation task-id="0" resource-id="3" function="Default:0" responsible="false" load="100.0"/> + <allocation task-id="13" resource-id="3" function="Default:0" responsible="false" load="100.0"/> + <allocation task-id="18" resource-id="3" function="Default:0" responsible="false" load="100.0"/> </allocations> <vacations/> <previous/> diff --git a/Makefile b/Makefile index 21528bf..ef0644c 100644 --- a/Makefile +++ b/Makefile @@ -12,7 +12,7 @@ TARGET = ./bin/testmain # Ensemble des fichiers objets qui vont être générés OBJS = ./obj/main.o ./obj/OurRandom.o ./obj/structure.o ./obj/carte.o ./obj/faction.o ./obj/plateau.o ./obj/interface.o - +OBJSTEST = ./obj/OurRandom.o ./obj/structure.o ./obj/carte.o ./obj/faction.o ./obj/plateau.o ./obj/interface.o # Commande permettant de réaliser toutes les compilations nécessaires en même temps pour la cible @@ -25,7 +25,6 @@ $(TARGET) : $(OBJS) $(CC) $(CFLAGS) -o $@ $(OBJS) - # Création des fichiers objets en fonction des dépendances, pour chaque source diff --git a/bin/fichier b/bin/fichier new file mode 100644 index 0000000..e69de29 diff --git a/obj/fichier b/obj/fichier new file mode 100644 index 0000000..e69de29 -- GitLab From dca23b0a8d0647c120a28f049080ba743c791e32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?f=C3=A9licien=20fiscus-gay?= <felicien.fiscus@ensiie.fr> Date: Sun, 3 Apr 2022 15:36:23 +0200 Subject: [PATCH 057/163] [LotB][B.3] abstraction des types Stack et CList --- headers/structure.h | 48 ++++++++++++++------------------------------- 1 file changed, 15 insertions(+), 33 deletions(-) diff --git a/headers/structure.h b/headers/structure.h index 3d51689..0f8ecb9 100644 --- a/headers/structure.h +++ b/headers/structure.h @@ -54,15 +54,6 @@ struct card */ /*Structure pile et list chainee utilisees dans la suite*/ -/** \struct Node -* \brief une structure de liste pour les cartes -*/ -struct Node -{ - struct card* fCard; - struct Node* fNext; -}; - typedef struct Node* CList; /** @@ -168,11 +159,7 @@ void free_CList(CList* lst); * * */ -typedef struct Stack -{ - struct card* fStack[MAX_LEN]; - struct card* fTop; -} Stack; +typedef struct Stack* Stack; /*stack methods: empty_stack, is_stack_empty, stack_size, pop, push, head, shuffle, reverse, free_stack*/ @@ -181,66 +168,61 @@ typedef struct Stack * \param none * \return pointeur vers la stack initialiser vide */ -Stack* empty_stack(); +Stack empty_stack(); /** * \param stck doit être une adresse valide * \return whether the stack is empty * */ -bool is_stack_empty(Stack* stck); +bool is_stack_empty(Stack stck); /** * \param stck valid Stack pointer * \return la taille de la Stack * */ -unsigned int stack_size(Stack* stck); +unsigned int stack_size(Stack stck); /** * \brief enleve l'element en haut de la pile * \param stck valid Stack pointer * \return l'element enlever, attention si l'élement est allouer dynamiquement, la responsabilité - * de desallouer la mémoire de cette élement est transmise au caller + * de desallouer la mémoire de cette élement est transmise au caller. + * si la pile est vide, NULL est renvoyé et un petit message d'erreur est afficher */ -struct card* pop(Stack* stck); +struct card* pop(Stack stck); /** * \brief ajoute une card en haut de la pile * \param stck Valid Stack pointer - * \param crd la carte à ajouter + * \param crd la carte à ajouter != NULL * \return rien */ -void push(Stack* stck, struct card* crd); +void push(Stack stck, struct card* crd); /** * \brief méthode d'acces à la tête de la pile * \param stck Valid Stack pointer * \return la tête de la pile */ -struct card* head(Stack* stck); +struct card* head(Stack stck); /** - * \brief utiliser pour mélanger la pile rapidement + * \brief utiliser pour mélanger la pile rapidement, + * utilise la structure interne de la pile via l'algorithme de Fisher-Yates + * cf: https://fr.wikipedia.org/wiki/Mélange_de_Fisher-Yates * \param stck Valid Stack pointer * \return rien */ -void shuffle_stack(Stack* stck); - -/** - * \brief inverse l'ordre des élements dans la pile - * \param stck Valid Stack pointer - * \return rien - * - */ -void reverse(Stack* stck); +void shuffle_stack(Stack stck); /** * \brief libere la mémoire allouer par la pile ainsi que celle des cartes s'il en reste * \param stck Valid Stack pointer * \return rien */ -void free_stack(Stack* stck); +void free_stack(Stack stck); /*************************************/ -- GitLab From 98d758be96086cf5c4338f2b6339aadc27a1b4f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?f=C3=A9licien=20fiscus-gay?= <felicien.fiscus@ensiie.fr> Date: Sun, 3 Apr 2022 15:37:22 +0200 Subject: [PATCH 058/163] [LotB][B.3] ajout des fonctions et structure pour Stack (et structure pour CList) --- src/structure.c | 118 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 116 insertions(+), 2 deletions(-) diff --git a/src/structure.c b/src/structure.c index 2694df7..34e578f 100644 --- a/src/structure.c +++ b/src/structure.c @@ -1,9 +1,17 @@ #include "../headers/structure.h" +#include "../headers/OurRandom.h" #include <stdlib.h> #include <stdio.h> -/*************CList methods**********/ +/*************CList methods and structure**********/ +struct Node +{ + struct card* fCard; + struct Node* fNext; +}; + +typedef struct Node* CList; CList empty_CList() { @@ -231,4 +239,110 @@ void free_CList(CList* lst) -/****************************************************************************/ \ No newline at end of file +/****************************************************************************/ + +/*******fonctions et structure pour Stack***********/ + + +struct Stack +{ + struct card* fStack[MAX_LEN]; + struct card* fTop; + unsigned int fSize; +}; + +typedef struct Stack* Stack; + + +Stack empty_stack() +{ + Stack res = (Stack)malloc(sizeof(struct Stack)); + for(int i = 0;i<MAX_LEN;++i) + { + res->fStack[i] = NULL; + } + + res->fTop = NULL; + res->fSize = 0; + + return res; +} + + +bool is_stack_empty(Stack stck) +{ + return stck->fSize == 0; +} + + +unsigned int stack_size(Stack stck) +{ + return stck->fSize; +} + +struct card* head(Stack stck) +{ + return stck->fTop; +} + + +struct card* pop(Stack stck) +{ + if(is_stack_empty(stck)) + { + fprintf(stderr, "structure.c | pop : empty stack\n"); + return NULL; + } + + struct card* hd = head(stck); + stck->fStack[(--stck->fSize)] = NULL; + stck->fTop = stck->fStack[stck->fSize - 1]; + + return hd; + +} + + +void push(Stack stck, struct card* crd) +{ + if(stck->fSize >= MAX_LEN) + { + fprintf(stderr, "structure.c | push : stack full, cannot push\n"); + return; + } + + stck->fTop = crd; + stck->fStack[(stck->fSize++)] = crd; +} + + +void shuffle_stack(Stack stck) +{ + if(is_empty_stack(stck)) return; + + unsigned int lehmer_seed = clock(); + + for(int i = stck->fSize - 1; i > 0; --i) + { + int j = Lehmer32(&lehmer_seed) % (i+1); + struct card* buff_i = stck->fStack[i]; + stck->fStack[i] = stck->fStack[j]; + stck->fStack[j] = buff_i; + } + +} + + +void free_stack(Stack stck) +{ + while(!is_empty_stack(stck)) + { + struct card* hd = pop(stck); + if(hd) + free(hd); + } + + free(stck); +} + +/**************************************/ \ No newline at end of file -- GitLab From 2818ea2f653883ec09db857330ccea9a24cf554b Mon Sep 17 00:00:00 2001 From: Felicien FISCUS <felicien.fiscus@pc130-14.pedago.ensiie.fr> Date: Mon, 4 Apr 2022 16:18:57 +0200 Subject: [PATCH 059/163] [LotB][B.3]ajout d'un oubli dans shuffle_stack --- src/structure.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/structure.c b/src/structure.c index 34e578f..50c7aff 100644 --- a/src/structure.c +++ b/src/structure.c @@ -330,6 +330,8 @@ void shuffle_stack(Stack stck) stck->fStack[j] = buff_i; } + stck->fTop = stck->fStack[stck->fSize - 1]; + } -- GitLab From 9c8b1110e6181b5c44b3d9c16aeb27b1cee7014c Mon Sep 17 00:00:00 2001 From: Felicien FISCUS <felicien.fiscus@pc130-14.pedago.ensiie.fr> Date: Mon, 4 Apr 2022 16:24:11 +0200 Subject: [PATCH 060/163] [LotB][B.3]fixing des erreurs de compilation --- src/structure.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/structure.c b/src/structure.c index 50c7aff..90820c5 100644 --- a/src/structure.c +++ b/src/structure.c @@ -105,7 +105,7 @@ CList add_list(CList lst, CList concat) struct card* remove_card(CList* lst, struct card* crd) { - if(!(*lst)) return lst; + if(!(*lst)) return NULL; /*si y'a que un élement*/ if(!(*lst)->fNext) { @@ -159,7 +159,7 @@ struct card* remove_where(CList* lst, int index_pos, struct Node* node_pos) struct Node* curr = NULL; - struct Node* last = lst; + struct Node* last = *lst; int index = 0; /*d'abord gérer le cas ou la liste est vide*/ @@ -171,12 +171,13 @@ struct card* remove_where(CList* lst, int index_pos, struct Node* node_pos) if(index_pos == 0) { CList buff = (*lst)->fNext; + struct card* crd = (*lst)->fCard; free(*lst); *lst = buff; return crd; } - curr = lst->fNext; + curr = (*lst)->fNext; while(curr && index < index_pos) { @@ -318,7 +319,7 @@ void push(Stack stck, struct card* crd) void shuffle_stack(Stack stck) { - if(is_empty_stack(stck)) return; + if(is_stack_empty(stck)) return; unsigned int lehmer_seed = clock(); @@ -337,7 +338,7 @@ void shuffle_stack(Stack stck) void free_stack(Stack stck) { - while(!is_empty_stack(stck)) + while(!is_stack_empty(stck)) { struct card* hd = pop(stck); if(hd) -- GitLab From 7ac87676a7d0db036981396526a7e6e2241a9c63 Mon Sep 17 00:00:00 2001 From: "martin.fond" <martin.fond@ensiie.fr> Date: Tue, 5 Apr 2022 12:01:42 +0200 Subject: [PATCH 061/163] [LotB][B.6] Modif faction.c (ajout d'un point virgule manquant et regorganisation de l'ordre des fonctions pour eviter les declaration implicites --- src/faction.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/faction.c b/src/faction.c index 9c89c9a..a4896f1 100644 --- a/src/faction.c +++ b/src/faction.c @@ -6,7 +6,7 @@ faction create_faction(){ faction new_faction; new_faction->fPtsDDRS = 0; new_faction->fNbRoundWon = 0; - new_faction->fHand = malloc(sizeof(Node)); + new_faction->fHand = malloc(sizeof(struct Node)); new_faction->fDeck = malloc(47*sizeof(card)); new_faction->fHas_Mulligan = false; return new_faction; @@ -23,12 +23,17 @@ bool has_mulligan(faction fac_to_test){ } +void shuffle_deck(faction fac) +{ + shuffle_stack(fac->fDeck); +} + void declare_mulligan(faction fac){ - if (has_mulligan(fac)){return} + if (has_mulligan(fac)){return;} empty_hand(fac); - shuffle_hand(fac); + shuffle_deck(fac); redraw(fac); fac->fHas_Mulligan = true; } @@ -42,11 +47,6 @@ void empty_hand(faction fac){ } } -void shuffle_deck(faction fac) -{ - shuffle_stack(fac->fDeck); -} - void redraw(faction fac) { int i; -- GitLab From 4fca5c38af95ff52066c48e2ba8d7310ce87be36 Mon Sep 17 00:00:00 2001 From: "martin.fond" <martin.fond@ensiie.fr> Date: Tue, 5 Apr 2022 12:12:47 +0200 Subject: [PATCH 062/163] [LotB][B.6] Modification de plateau.c (correction de certaines fautes) --- src/plateau.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/plateau.c b/src/plateau.c index 26dcf64..8f15100 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -7,12 +7,12 @@ board create_new_board() int i; for (i=0; i < BOARD_SIZE* BOARD_SIZE; i += 1) { - (board->fBoard[i])->fState = Empty; - (board->fBoard[i])->fCard = NULL; + (new_board->fBoard[i])->fState = Empty; + (new_board->fBoard[i])->fCard = NULL; } - board->fFaction[0] = create_faction(); - board->fFaction[1] = create_faction(); + new_board->fFaction[0] = create_faction(); + new_board->fFaction[1] = create_faction(); } @@ -59,9 +59,9 @@ void card_effect(board p, card c) card turn_over_card(board p) { - card current = (fBoard[0]->fCard); + card current = ((p->fBoard[0])->fCard); int index =0; - while (current = NULL && index < BOARD_SIZE) + while (current == NULL && index < BOARD_SIZE) { index += 1; current = fBoard[index]->fCard; -- GitLab From 068167b69acce213d811d94c6c8a99ff4ac98e96 Mon Sep 17 00:00:00 2001 From: Lucas Desrumeaux <lucas@carjager.com> Date: Tue, 5 Apr 2022 12:13:45 +0200 Subject: [PATCH 063/163] =?UTF-8?q?[B.5]=20R=C3=A9organisation=20des=20typ?= =?UTF-8?q?es=20dans=20les=20fichiers=20+=20getters=20et=20setters=20carte?= =?UTF-8?q?.c?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- headers/carte.h | 121 ++++++++++++++++++++++++++++++++++++++------ headers/plateau.h | 21 ++++++-- headers/structure.h | 87 ++----------------------------- src/carte.c | 27 +++++++++- src/faction.c | 12 +++++ src/plateau.c | 11 ++++ 6 files changed, 174 insertions(+), 105 deletions(-) diff --git a/headers/carte.h b/headers/carte.h index 916fbd5..399b4d7 100644 --- a/headers/carte.h +++ b/headers/carte.h @@ -1,27 +1,116 @@ +/** + * \file carte.h + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) & Martin Fond + * \brief + * @version 0.2 + * \date 2022-04-05 + * + * @copyright Copyright (c) 2022 + * + */ + #ifndef CARTE_H #define CARTE_H -/** -*\file carte.h -*\brief Interface de carte.c -*\author Martin Fond -* -*Interface de carte.c qui est en charge de tout ce qui concerne les cartes. -* -*/ +#include "structure.h" + +typedef enum CardType +{ + FISE, FISA, FC, EcologIIE, lIIEns, Soiree_sans_alcool, + Alcool, Cafe, The, Ecocup, Reprographie, Isolation_du_batiment, + Parcours_sobriete_numerique, Heures_supplementaires, Kahina_Bouchama, + Kevin_Goilard, Massinissa_Merabet, Vitera_Y, Jonas_Senizergues, + Fetia_Bannour, Catherine_Dubois, Anne_Laure_Ligozat, Guillaume_Burel, + Christophe_Mouilleron, Thomas_Lim, Julien_Forest, Dimitri_Watel, + Djibril_Aurelien_Dembele_Cabot, Eric_Lejeune, Lucienne_Pacave, + Katrin_Salhab, Laurent_Prevel, CardTypeCount +} CardType; -/* -Creation d'un type carte contenant toutes les informations relatives a une carte : - -Nom - -Id - -Nombre d'occurences dans un deck - -Description de l'effet -*/ /** *\brief Creation d'un type carte contenant toutes les informations relatives a une carte independament du reste du jeu. *\struct card */ - typedef struct card* card; +/*** Fonctions ***/ + +/** + * \brief donne la chaine de caracteres correspondant au CardType + * \param type + * \return la chaine de caracteres, doit etre libere par celui qui l'appelle + */ +char* cardType_toString(CardType type); + +/** + * \brief Get the card type object + * \param oneCardcarte dont on récupère l'information + * \return CardType + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-04-05 + */ +CardType get_card_type(card oneCard); + +/** + * \brief Get the card nbOccurences object + * \param oneCard carte dont on récupère l'information + * \return unsigned int + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-04-05 + */ +unsigned int get_card_nbOccurences(card oneCard); + +/** + * \brief Get the card effectDesc object + * \param oneCard carte dont on récupère l'information + * \return char* + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-04-05 + */ +char* get_card_effectDesc(card oneCard); + +/** + * \brief Get the card factionOwner object + * \param oneCard carte dont on récupère l'information + * \return unsigned int + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-04-05 + */ +unsigned int get_card_factionOwner(card oneCard); + +/** + * \brief Set the card type object + * \param oneCard carte à modifier + * \param oneType type de la carte + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-04-05 + */ +void set_card_type(card oneCard, CardType oneType); + +/** + * \brief Set the card nbOccurences object + * \param oneCard carte à modifier + * \param nbOccur nombre d'occurence de la carte + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-04-05 + */ +void set_card_nbOccurences(card oneCard, unsigned int nbOccur); + +/** + * \brief Set the card effectDesc object + * \param oneCard carte à modifier + * \param effectDesc description d'effet de la carte + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-04-05 + */ +void set_card_effectDesc(card oneCard, char* effectDesc); + +/** + * \brief Set the card factionOwner object + * \param oneCard carte à modifier + * \param factionOwner faction a qui appartient la carte + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-04-05 + */ +void set_card_factionOwner(card oneCard, unsigned int factionOwner); + #endif /* CARTE_H */ diff --git a/headers/plateau.h b/headers/plateau.h index bd0a136..79b5bc6 100644 --- a/headers/plateau.h +++ b/headers/plateau.h @@ -1,7 +1,3 @@ -#ifndef PLATEAU_H -#define PLATEAU_H - - /** *\file plateau.h *\brief Interface de plateau.c @@ -11,7 +7,8 @@ * */ - +#ifndef PLATEAU_H +#define PLATEAU_H #include "carte.h" #include "faction.h" @@ -21,6 +18,20 @@ #define WIN_NUMBER 2 +typedef enum CellState +{ + Empty, FaceUp, FaceDown +} CellState; + +/** + * \struct cell + * \brief correspond a case/cellule du plateau de jeu + */ +struct cell +{ + struct card* fCard; + CellState fState; +}; /** diff --git a/headers/structure.h b/headers/structure.h index 0f8ecb9..43e7810 100644 --- a/headers/structure.h +++ b/headers/structure.h @@ -1,11 +1,12 @@ -#ifndef STRUCTURE_H -#define STRUCTURE_H - /** * \file structure.h * \brief gere les structures de données (tableau, file, pile, ...) utilisées dans les fichiers plateau.h faction.h et carte.h * \author Felicien Fiscus */ + +#ifndef STRUCTURE_H +#define STRUCTURE_H + #include "carte.h" #define HAND_SIZE 8 #define MAX_LEN 200 @@ -17,41 +18,6 @@ typedef enum bool false, true } bool; - -typedef enum CardType -{ - FISE, FISA, FC, EcologIIE, lIIEns, Soiree_sans_alcool, - Alcool, Cafe, The, Ecocup, Reprographie, Isolation_du_batiment, - Parcours_sobriete_numerique, Heures_supplementaires, Kahina_Bouchama, - Kevin_Goilard, Massinissa_Merabet, Vitera_Y, Jonas_Senizergues, - Fetia_Bannour, Catherine_Dubois, Anne_Laure_Ligozat, Guillaume_Burel, - Christophe_Mouilleron, Thomas_Lim, Julien_Forest, Dimitri_Watel, - Djibril_Aurelien_Dembele_Cabot, Eric_Lejeune, Lucienne_Pacave, - Katrin_Salhab, Laurent_Prevel, CardTypeCount -} CardType; - - -/** - * \brief donne la chaine de caracteres correspondant au CardType - * \param type - * \return la chaine de caracteres, doit etre libere par celui qui l'appelle - */ -char* cardType_toString(CardType type); - - - -/** - * \struct card - * \brief definition du type abstrait dans carte.h -* -struct card -{ - CardType fCardType; - unsigned int fNbOccurences; - char fEffectDesc[MAX_LEN]; - int player; -}; -*/ /*Structure pile et list chainee utilisees dans la suite*/ typedef struct Node* CList; @@ -156,8 +122,6 @@ void free_CList(CList* lst); /** * \struct Stack * \brief Structure de pile pour gerer le jeu de cartes de chaque faction - * - * */ typedef struct Stack* Stack; @@ -224,47 +188,4 @@ void shuffle_stack(Stack stck); */ void free_stack(Stack stck); -/*************************************/ - - -/** - * \struct card - * \brief definition du type abstrait dans carte.h - * -* -struct faction -{ - char fNom[MAX_LEN]; - unsigned int fPtsDDRS; - unsigned int fNbRoundWon; - CList fHand; - Stack fDeck; - bool fHasMulligan; -}; - -typedef enum CellState -{ - Empty, FaceUp, FaceDown -} CellState; -*/ -/** - * \struct cell - * \brief correspond a case/cellule du plateau de jeu - * - * -struct cell -{ - struct card* fCard; - CellState fState; -}; -*/ -/** - * \brief utilisee dans plateau.h - * -struct board -{ - struct cell fBoard[BOARD_SIZE * BOARD_SIZE]; - struct faction fFactions[2]; -}; -*/ #endif /*STRUCTURE_H*/ \ No newline at end of file diff --git a/src/carte.c b/src/carte.c index 0c8bcaf..071434e 100644 --- a/src/carte.c +++ b/src/carte.c @@ -1 +1,26 @@ -#include "../headers/carte.h" \ No newline at end of file +/** + * \file carte.c + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \brief + * @version 0.1 + * \date 2022-04-05 + * + * @copyright Copyright (c) 2022 + * + */ + +#include "../headers/carte.h" + +/** + * \struct card + * \brief definition du type abstrait dans carte.h +*/ +struct card +{ + CardType type; + unsigned int nbOccurences; + char effectDesc[MAX_LEN]; + unsigned int faction; +}; + +typedef struct card* oneCard; \ No newline at end of file diff --git a/src/faction.c b/src/faction.c index 9c89c9a..98f7d79 100644 --- a/src/faction.c +++ b/src/faction.c @@ -1,6 +1,18 @@ #include "../headers/structure.h" #include "../headers/faction.h" +struct faction +{ + char fNom[MAX_LEN]; + unsigned int fPtsDDRS; + unsigned int fNbRoundWon; + CList fHand; + Stack fDeck; + bool fHasMulligan; +}; + +typedef struct faction* faction; + faction create_faction(){ faction new_faction; diff --git a/src/plateau.c b/src/plateau.c index 26dcf64..5ea7960 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -1,6 +1,17 @@ #include "../headers/plateau.h" +/** + * \brief utilisee dans plateau.h + */ +struct board +{ + struct cell fBoard[BOARD_SIZE * BOARD_SIZE]; + faction fFactions[2]; +}; + +typedef struct board* board; + board create_new_board() { board new_board; -- GitLab From 9439f2862db7a990ec29edcf6d46638b3197b571 Mon Sep 17 00:00:00 2001 From: "martin.fond" <martin.fond@ensiie.fr> Date: Tue, 5 Apr 2022 12:43:29 +0200 Subject: [PATCH 064/163] [LotB][B.6] Correction bugs dans les .c --- src/faction.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/faction.c b/src/faction.c index 2ae9ca8..c9fe6ef 100644 --- a/src/faction.c +++ b/src/faction.c @@ -18,9 +18,9 @@ faction create_faction(){ faction new_faction; new_faction->fPtsDDRS = 0; new_faction->fNbRoundWon = 0; - new_faction->fHand = malloc(sizeof(struct Node)); + new_faction->fHand = malloc(sizeof(CList)); new_faction->fDeck = malloc(47*sizeof(card)); - new_faction->fHas_Mulligan = false; + new_faction->fHasMulligan = false; return new_faction; } @@ -31,7 +31,7 @@ void delete_faction(faction fac_to_del){ } bool has_mulligan(faction fac_to_test){ - return fac_to_test->fHas_Mulligan; + return fac_to_test->fHasMulligan; } @@ -47,14 +47,14 @@ void declare_mulligan(faction fac){ empty_hand(fac); shuffle_deck(fac); redraw(fac); - fac->fHas_Mulligan = true; + fac->fHasMulligan = true; } void empty_hand(faction fac){ int i; for (i=0; i < HAND_SIZE; i += 1) { - push(fac->fDeck, fac->fHand->fCard); + push(fac->fDeck, (fac->fHand)->fCard); remove_where(fac->fHand->fCard, 0, NULL); } } -- GitLab From 2069f0967d7b959cb87e279d9be05c0a3feb6250 Mon Sep 17 00:00:00 2001 From: "martin.fond" <martin.fond@ensiie.fr> Date: Tue, 5 Apr 2022 12:46:50 +0200 Subject: [PATCH 065/163] [LotB][B.6] correction bugs --- src/plateau.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/plateau.c b/src/plateau.c index b0283b1..55c6258 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -18,19 +18,19 @@ board create_new_board() int i; for (i=0; i < BOARD_SIZE* BOARD_SIZE; i += 1) { - (new_board->fBoard[i])->fState = Empty; - (new_board->fBoard[i])->fCard = NULL; + (new_board->fBoard[i]).fState = Empty; + (new_board->fBoard[i]).fCard = NULL; } - new_board->fFaction[0] = create_faction(); - new_board->fFaction[1] = create_faction(); + new_board->fFactions[0] = create_faction(); + new_board->fFactions[1] = create_faction(); } void free_board(board p) { - delete_faction(p->fFaction[0]); - delete_faction(p->fFaction[1]); + delete_faction(p->fFactions[0]); + delete_faction(p->fFactions[1]); } int set_round(board p) @@ -39,10 +39,10 @@ int set_round(board p) for (i=0; i < BOARD_SIZE* BOARD_SIZE; i += 1) { /* Reinitialisation des cases du tableau */ - (p->fBoard[i])->fState = Empty; - (p->fBoard[i])->fCard = NULL; + (p->fBoard[i]).fState = Empty; + (p->fBoard[i]).fCard = NULL; } - if (p->fFaction[0] = WIN_NUMBER || p->fFaction[1] = WIN_NUMBER) + if (p->fFactions[0].fNbRoundWon == WIN_NUMBER || p->fFactions[1]->fNbRoundWon == WIN_NUMBER) { /* Si un joeur a gagne on renvoi false */ return false; @@ -53,13 +53,13 @@ int set_round(board p) faction* display_faction(board p) { - return p->fFaction; + return p->fFactions; } void put_card(board p, card c, int coord) { - (p->fBoard[coord])->fCard = c; - (p->fBoard[coord])->fState = FaceDown; + (p->fBoard[coord]).fCard = c; + (p->fBoard[coord]).fState = FaceDown; } @@ -70,12 +70,12 @@ void card_effect(board p, card c) card turn_over_card(board p) { - card current = ((p->fBoard[0])->fCard); + card current = ((p->fBoard[0]).fCard); int index =0; while (current == NULL && index < BOARD_SIZE) { index += 1; - current = fBoard[index]->fCard; + current = (p->fBoard[index]).fCard; } if (current != NULL) { -- GitLab From ade36b7c7dbe7697f4ed1a2b4c32a57179da50f5 Mon Sep 17 00:00:00 2001 From: Lucas Desrumeaux <lucas@carjager.com> Date: Tue, 5 Apr 2022 12:45:36 +0200 Subject: [PATCH 066/163] [B.5] Nettoyage des commentaires --- headers/carte.h | 20 ++++++++++--------- headers/faction.h | 33 ++++++++++++------------------ src/carte.c | 2 +- src/faction.c | 51 ++++++++++++++++++++++++++++------------------- 4 files changed, 56 insertions(+), 50 deletions(-) diff --git a/headers/carte.h b/headers/carte.h index 399b4d7..5c56f70 100644 --- a/headers/carte.h +++ b/headers/carte.h @@ -1,7 +1,7 @@ /** * \file carte.h * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) & Martin Fond - * \brief + * \brief header de carte.c, fonctions et types utilisés pour gérer les cartes * @version 0.2 * \date 2022-04-05 * @@ -32,14 +32,7 @@ typedef enum CardType */ typedef struct card* card; -/*** Fonctions ***/ - -/** - * \brief donne la chaine de caracteres correspondant au CardType - * \param type - * \return la chaine de caracteres, doit etre libere par celui qui l'appelle - */ -char* cardType_toString(CardType type); +/*** Getteurs & setters ***/ /** * \brief Get the card type object @@ -113,4 +106,13 @@ void set_card_effectDesc(card oneCard, char* effectDesc); */ void set_card_factionOwner(card oneCard, unsigned int factionOwner); +/*** Fonctions Autres ***/ + +/** + * \brief donne la chaine de caracteres correspondant au CardType + * \param type + * \return la chaine de caracteres, doit etre libere par celui qui l'appelle + */ +char* cardType_toString(CardType type); + #endif /* CARTE_H */ diff --git a/headers/faction.h b/headers/faction.h index 51f2abc..935e493 100644 --- a/headers/faction.h +++ b/headers/faction.h @@ -1,31 +1,29 @@ +/** + * \file faction.h + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) & Martin Fond + * \brief Header de faction.c, fonctions et type utilisés pour gérer les factions + * @version 0.1 + * \date 2022-04-05 + * + * @copyright Copyright (c) 2022 + * + */ + #ifndef FACTION_H #define FACTION_H -/** -*\file faction.h -*\brief Interface de faction.c -*\author Martin Fond -* -*Interface de faction.c qui est en charge de tout ce qui concerne les factions. -* -*/ - #include "structure.h" #include "OurRandom.h" /** *\brief Creation d'un type faction contenant toutes les informations relatives a un joueur -y compris sa pioche. +* y compris sa pioche. *\struct faction */ typedef struct faction* faction; -/* -@requires rien -@assigns rien -@ensures Retourne un faction initialisee -*/ + /** *\brief Cree une faction initialisee *\fn faction create_faction() @@ -34,11 +32,6 @@ typedef struct faction* faction; faction create_faction(); -/* -@requires faction est initialisee -@assigns faction -@ensures supprime la faction et libere la memoire -*/ /** *\brief Supprime une faction *\param param1 faction a supprimer diff --git a/src/carte.c b/src/carte.c index 071434e..1d53014 100644 --- a/src/carte.c +++ b/src/carte.c @@ -20,7 +20,7 @@ struct card CardType type; unsigned int nbOccurences; char effectDesc[MAX_LEN]; - unsigned int faction; + unsigned int factionOwner; }; typedef struct card* oneCard; \ No newline at end of file diff --git a/src/faction.c b/src/faction.c index 98f7d79..edca303 100644 --- a/src/faction.c +++ b/src/faction.c @@ -1,14 +1,25 @@ +/** + * \file faction.c + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) & Martin Fond + * \brief + * @version 0.1 + * \date 2022-04-05 + * + * @copyright Copyright (c) 2022 + * + */ + #include "../headers/structure.h" #include "../headers/faction.h" struct faction { - char fNom[MAX_LEN]; - unsigned int fPtsDDRS; - unsigned int fNbRoundWon; - CList fHand; - Stack fDeck; - bool fHasMulligan; + char nom[MAX_LEN]; + unsigned int ptsDDRS; + unsigned int nbRoundWon; + CList hand; + Stack deck; + bool hasMulligan; }; typedef struct faction* faction; @@ -16,22 +27,22 @@ typedef struct faction* faction; faction create_faction(){ faction new_faction; - new_faction->fPtsDDRS = 0; - new_faction->fNbRoundWon = 0; - new_faction->fHand = malloc(sizeof(Node)); - new_faction->fDeck = malloc(47*sizeof(card)); - new_faction->fHas_Mulligan = false; + new_faction->ptsDDRS = 0; + new_faction->nbRoundWon = 0; + new_faction->hand = malloc(sizeof(CList)); + new_faction->deck = malloc(47*sizeof(card)); + new_faction->hasMulligan = false; return new_faction; } void delete_faction(faction fac_to_del){ - free(fac_to_del->fHand); - free(fac_to_del->fDeck); + free(fac_to_del->hand); + free(fac_to_del->deck); free(fac_to_del); } bool has_mulligan(faction fac_to_test){ - return fac_to_test->fHas_Mulligan; + return fac_to_test->hasMulligan; } @@ -42,21 +53,21 @@ void declare_mulligan(faction fac){ empty_hand(fac); shuffle_hand(fac); redraw(fac); - fac->fHas_Mulligan = true; + fac->hasMulligan = true; } void empty_hand(faction fac){ int i; for (i=0; i < HAND_SIZE; i += 1) { - push(fac->fDeck, fac->fHand->fCard); - remove_where(fac->fHand->fCard, 0, NULL); + push(fac->deck, fac->hand->fCard); + remove_where(fac->hand->fCard, 0, NULL); } } void shuffle_deck(faction fac) { - shuffle_stack(fac->fDeck); + shuffle_stack(fac->deck); } void redraw(faction fac) @@ -64,13 +75,13 @@ void redraw(faction fac) int i; for (i=0; i < HAND_SIZE; i += 1) { - add_card(fac->fHand, pop(fac->fDeck)); + add_card(fac->hand, pop(fac->deck)); } } bool hand_is_empty(faction fac) { - if (fac->fHand == NULL) + if (fac->hand == NULL) { return true; } -- GitLab From 03bab00bb5c506473fb569bee550cfdb44f0ae46 Mon Sep 17 00:00:00 2001 From: Lucas Desrumeaux <lucas@carjager.com> Date: Tue, 5 Apr 2022 15:04:06 +0200 Subject: [PATCH 067/163] =?UTF-8?q?merge=20et=20conflit=20r=C3=A9solu=20da?= =?UTF-8?q?ns=20faction.c?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/faction.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/faction.c b/src/faction.c index edca303..f02f27b 100644 --- a/src/faction.c +++ b/src/faction.c @@ -2,10 +2,10 @@ * \file faction.c * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) & Martin Fond * \brief - * @version 0.1 + * \version 0.1 * \date 2022-04-05 * - * @copyright Copyright (c) 2022 + * \copyright Copyright (c) 2022 * */ -- GitLab From ecda9897dec88913f5abe58021f0f26df7adaa2b Mon Sep 17 00:00:00 2001 From: Lucas Desrumeaux <lucas@carjager.com> Date: Tue, 5 Apr 2022 15:41:34 +0200 Subject: [PATCH 068/163] [B.5] Getters and setters pour faction.h --- headers/carte.h | 4 +- headers/faction.h | 155 ++++++++++++++++++++++++++++++++++------------ headers/plateau.h | 15 ++--- 3 files changed, 126 insertions(+), 48 deletions(-) diff --git a/headers/carte.h b/headers/carte.h index 5c56f70..8376538 100644 --- a/headers/carte.h +++ b/headers/carte.h @@ -2,10 +2,10 @@ * \file carte.h * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) & Martin Fond * \brief header de carte.c, fonctions et types utilisés pour gérer les cartes - * @version 0.2 + * \version 0.2 * \date 2022-04-05 * - * @copyright Copyright (c) 2022 + * \copyright Copyright (c) 2022 * */ diff --git a/headers/faction.h b/headers/faction.h index 935e493..3f94bf4 100644 --- a/headers/faction.h +++ b/headers/faction.h @@ -1,14 +1,13 @@ /** * \file faction.h * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) & Martin Fond - * \brief Header de faction.c, fonctions et type utilisés pour gérer les factions - * @version 0.1 + * \brief + * \version 0.2 * \date 2022-04-05 * - * @copyright Copyright (c) 2022 + * \copyright Copyright (c) 2022 * */ - #ifndef FACTION_H #define FACTION_H @@ -16,20 +15,131 @@ #include "OurRandom.h" /** -*\brief Creation d'un type faction contenant toutes les informations relatives a un joueur +*\brief Creation d'un typse faction contenant toutes les informations relatives a un joueur * y compris sa pioche. *\struct faction */ typedef struct faction* faction; +/*** Getters & Setters ***/ + +/** + * \brief Get the faction nom object + * \param f une faction + * \return char* + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-04-05 + */ +char* get_faction_nom(faction f); + +/** + * \brief Get the faction ptsDDRS object + * \param f une faction + * \return unsigned int + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-04-05 + */ +unsigned int get_faction_ptsDDRS(faction f); + +/** + * \brief Get the faction nbRoundWon object + * \param f une faction + * \return unsigned int + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-04-05 + */ +unsigned int get_faction_nbRoundWon(faction f); + +/** + * \brief Get the faction hand object + * \param f une faction + * \return CList + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-04-05 + */ +CList get_faction_hand(faction f); + +/** + * \brief Get the faction deck object + * \param f une faction + * \return Stack + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-04-05 + */ +Stack get_faction_deck(faction f); + +/** + * \brief Get the faction hand object + * \param f une faction + * \return 1 = true + * \return 0 = false + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-04-05 + */ +bool get_faction_hasMulligan(faction f); + +/** + * \brief Set the faction nom object + * \param f une faction + * \param nom nom de la faction + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-04-05 + */ +void set_faction_nom(faction f, char* nom); + +/** + * \brief Set the faction ptsDDRS object + * \param f une faction + * \param pts points DDRS gagné par la faction + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-04-05 + */ +void set_faction_ptsDDRS(faction f, unsigned int pts); + +/** + * \brief Set the faction nbRoundWon object + * \param f une faction + * \param n nombre de round gagné par la faction + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-04-05 + */ +void set_faction_nbRoundWon(faction f, unsigned int n); + +/** + * \brief Set the faction hand object + * \param f une faction + * \param hand la main de la faction + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-04-05 + */ +void set_faction_hand(faction f, CList hand); + +/** + * \brief Set the faction deck object + * \param f une faction + * \param deck le paquet de carte de la faction + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-04-05 + */ +void set_faction_deck(faction f, Stack deck); + +/** + * \brief Set the faction hasMulligan object + * \param f une faction + * \param hasMull true if the faction has already mulligan, false if not + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-04-05 + */ +void set_faction_hasMulligan(faction f, bool hasMull); + +/*** Fonctions Autres ***/ /** *\brief Cree une faction initialisee *\fn faction create_faction() *\return Une faction initialisee */ - faction create_faction(); /** @@ -38,14 +148,8 @@ faction create_faction(); *\fn void delete_faction() *\return rien */ - void delete_faction(faction); -/* -@requires rien -@assigns rien -@ensures Retourne vrai si la faction a relancee sa main et repiochee -*/ /** *\brief Retourne vrai si la faction a relancee sa main et repiochee *\fn bool has_mulligan(faction) @@ -54,11 +158,6 @@ void delete_faction(faction); */ bool has_mulligan(faction); -/* -@requires rien -@assigns La faction -@ensures Remelange la main et la pioche de la faction, repioche 8 cartes -*/ /** *\brief Remelange la main et la pioche de la faction, repioche 8 cartes *\fn void declare_mulligan(faction) @@ -67,50 +166,28 @@ bool has_mulligan(faction); */ void declare_mulligan(faction); -/* -@requires rien -@assigns La faction -@ensures Vide la main dans la pioche -*/ - /** *\brief Vide la main de la faction dans sa pioche *\fn void empty_hand(faction) *\param param1 faction dont on vide la main *\return rien */ - void empty_hand(faction); - -/* -@requires rien -@assigns La faction -@ensures Melange la pioche -*/ - /** *\brief Melange la pioche d'une faction *\fn void shuffle_deck(faction) *\param param1 faction dont on melange la main *\return rien */ - void shuffle_deck(faction); -/* -@requires rien -@assigns La faction -@ensures Met 8 cartes de la pioche dans la main -*/ - /** *\brief Pioche 8 cartes *\fn redraw(faction) *\param param1 faction qui repioche *\return rien */ - void redraw(faction); /** diff --git a/headers/plateau.h b/headers/plateau.h index 79b5bc6..d19c018 100644 --- a/headers/plateau.h +++ b/headers/plateau.h @@ -1,12 +1,13 @@ /** - *\file plateau.h - *\brief Interface de plateau.c - *\author Aurélien Coreau - * - *Interface de plateau.c qui est en charge de tout ce qui concerne le plateau et le déroulement de la partie. - * + * \file plateau.h + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \brief + * \version 0.1 + * \date 2022-04-05 + * + * \copyright Copyright (c) 2022 + * */ - #ifndef PLATEAU_H #define PLATEAU_H -- GitLab From 9629379a9a45f371df22e472606ec3a38f6ce8d1 Mon Sep 17 00:00:00 2001 From: Lucas Desrumeaux <lucas@carjager.com> Date: Fri, 8 Apr 2022 16:06:10 +0200 Subject: [PATCH 069/163] =?UTF-8?q?[B.5]=20Getters=20and=20setters=20pour?= =?UTF-8?q?=20plateau.h=20+=20r=C3=A9organisations=20et=20correction?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- headers/plateau.h | 72 ++++++++++++++++++++++++++--------------------- src/main.c | 2 +- src/plateau.c | 34 +++++++++++----------- 3 files changed, 58 insertions(+), 50 deletions(-) diff --git a/headers/plateau.h b/headers/plateau.h index d19c018..797e981 100644 --- a/headers/plateau.h +++ b/headers/plateau.h @@ -1,8 +1,8 @@ /** * \file plateau.h - * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) & Aurélien Coreau * \brief - * \version 0.1 + * \version 0.2 * \date 2022-04-05 * * \copyright Copyright (c) 2022 @@ -15,10 +15,8 @@ #include "faction.h" #include "structure.h" - #define WIN_NUMBER 2 - typedef enum CellState { Empty, FaceUp, FaceDown @@ -28,23 +26,53 @@ typedef enum CellState * \struct cell * \brief correspond a case/cellule du plateau de jeu */ -struct cell +typedef struct cell { - struct card* fCard; + card fCard; CellState fState; -}; - +} cell; /** *\struct board *\brief type board abstrait * un objet de type board est un pointeur pointant vers une structure board ayant le support du jeu, ainsi que les détails des deux factions */ - typedef struct board* board; -#define WIN_NUMBE +/*** Getters & Setters ***/ + +/** + * \brief Get the board tabBoard object + * \param b plateau + * \return cell* array of cell + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-04-07 + */ +cell* get_board_tabBoard(board b); + +/** + * \brief Get the board factions object + * \param b plateau + * \return faction* array of factions playing + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-04-07 + */ +faction* get_board_factions(board b); + +//La fonction set pour l'atrribut tabBoard n'est pas nécessaire, elle ferait doublon avec certaines fonctions autres + +/** + * \brief Set a faction in the factions array of the board + * \param b plateau + * \param f faction + * \param numFaction l'indice de la faction (1ère ou 2ème, donc 0 ou 1) + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-04-08 + */ +void set_board_faction(board b, faction f, int numFaction); + +/*** Fonctions Autres ***/ /** *\fn board create_new_board() @@ -52,34 +80,23 @@ typedef struct board* board; *\brief Fonction de création d'un objet de type board, avec un support de jeu vide et les deux factions qui vont jouer *\return un nouvel objet de type board (avec les éléments des deux factions) */ - board create_new_board(); - - /** *\fn void free_board(board p) *\param p de type board *\brief Fonction permettant de libérer les cases mémoires qui ont été allouées aux éléments (support de jeu et les factions) pointés par p *\return rien */ - - void free_board(board p); - - /** - *\fn int set_round(board p) + *\fn int new_round(board p) *\param p de type board *\brief Fonction permettant de réinitialiser le support de jeu pointé par p (sans faire de modification sur les factions) si la partie n'est pas terminée *\return un booléen indiquant si le jeu est terminé ou non */ - - -int set_round(board p); - - +int new_round(board p); /** *\fn faction* display_faction(board p) @@ -87,12 +104,8 @@ int set_round(board p); *\brief Fonction permettant de renvoyer la liste des deux factions pointées par p *\return un pointeur vers deux éléments de type faction qui sont les deux factions étant en train de jouer */ - - faction* display_faction(board p); - - /** *\fn void put_card(board p, card c, int coord) *\param p de type board @@ -101,11 +114,8 @@ faction* display_faction(board p); *\brief Fonction permettant d'ajouter une carte c sur le plateau à la position coord, sur le support de jeu pointé par p *\return rien */ - void put_card(board p, card c, int coord); - - /** *\fn card turn_over_card(board p) *\param p de type board @@ -113,8 +123,6 @@ void put_card(board p, card c, int coord); * Si cette fonction ne trouve pas de carte à retourner, elle renvoit le pointeur NULL *\return la carte qui a été retournée ou le pointeur NULL */ - - card turn_over_card(board p); #endif /*PLATEAU_H*/ \ No newline at end of file diff --git a/src/main.c b/src/main.c index 62a62df..eef6c01 100644 --- a/src/main.c +++ b/src/main.c @@ -94,7 +94,7 @@ int main(/*int argc, char** argv*/) } /********************/ - }while(set_round(fBoard)); + }while(new_round(fBoard)); /*LE GAGNANT !! C'EEEST POUUUR GAGNEEEER !!! oui.*/ display_winner(fBoard); diff --git a/src/plateau.c b/src/plateau.c index 55c6258..9c2b2f7 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -6,8 +6,8 @@ */ struct board { - struct cell fBoard[BOARD_SIZE * BOARD_SIZE]; - faction fFactions[2]; + cell tabBoard[BOARD_SIZE * BOARD_SIZE]; + faction factions[2]; }; typedef struct board* board; @@ -18,31 +18,31 @@ board create_new_board() int i; for (i=0; i < BOARD_SIZE* BOARD_SIZE; i += 1) { - (new_board->fBoard[i]).fState = Empty; - (new_board->fBoard[i]).fCard = NULL; + (new_board->tabBoard[i]).fState = Empty; + (new_board->tabBoard[i]).fCard = NULL; } - new_board->fFactions[0] = create_faction(); - new_board->fFactions[1] = create_faction(); + new_board->factions[0] = create_faction(); + new_board->factions[1] = create_faction(); } void free_board(board p) { - delete_faction(p->fFactions[0]); - delete_faction(p->fFactions[1]); + delete_faction(p->factions[0]); + delete_faction(p->factions[1]); } -int set_round(board p) +int new_round(board p) { int i; for (i=0; i < BOARD_SIZE* BOARD_SIZE; i += 1) { /* Reinitialisation des cases du tableau */ - (p->fBoard[i]).fState = Empty; - (p->fBoard[i]).fCard = NULL; + (p->tabBoard[i]).fState = Empty; + (p->tabBoard[i]).fCard = NULL; } - if (p->fFactions[0].fNbRoundWon == WIN_NUMBER || p->fFactions[1]->fNbRoundWon == WIN_NUMBER) + if (p->factions[0].fNbRoundWon == WIN_NUMBER || p->factions[1]->fNbRoundWon == WIN_NUMBER) { /* Si un joeur a gagne on renvoi false */ return false; @@ -53,13 +53,13 @@ int set_round(board p) faction* display_faction(board p) { - return p->fFactions; + return p->factions; } void put_card(board p, card c, int coord) { - (p->fBoard[coord]).fCard = c; - (p->fBoard[coord]).fState = FaceDown; + (p->tabBoard[coord]).fCard = c; + (p->tabBoard[coord]).fState = FaceDown; } @@ -70,12 +70,12 @@ void card_effect(board p, card c) card turn_over_card(board p) { - card current = ((p->fBoard[0]).fCard); + card current = ((p->tabBoard[0]).fCard); int index =0; while (current == NULL && index < BOARD_SIZE) { index += 1; - current = (p->fBoard[index]).fCard; + current = (p->tabBoard[index]).fCard; } if (current != NULL) { -- GitLab From 486256a159eca4ff5b2368bb990abefd5e902d9d Mon Sep 17 00:00:00 2001 From: Felicien FISCUS <felicien.fiscus@pc127-10.pedago.ensiie.fr> Date: Tue, 12 Apr 2022 17:39:11 +0200 Subject: [PATCH 070/163] =?UTF-8?q?[LotB][B.8]=20ajout=20de=20l'impl=C3=A9?= =?UTF-8?q?mentation=20de=20toutes=20les=20fonctions=20sauf=20display=5Fca?= =?UTF-8?q?rd=5Feffects?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/interface.c | 151 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 151 insertions(+) create mode 100644 src/interface.c diff --git a/src/interface.c b/src/interface.c new file mode 100644 index 0000000..4a77c29 --- /dev/null +++ b/src/interface.c @@ -0,0 +1,151 @@ +#include "../headers/interface.h" +#include <stdio.h> +#include "../headers/structure.h" + +/* +le plateau sera affiché comme une grille de numéro ou de points, où chaque numéro représente +une carte et un point une case vide. Le numéro des cartes sera donné juste avant d'afficher +*/ +void display_board(board brd) +{ + printf("**********PLATEAU**********\n"); + for(int i = 0;i<CardTypeCount;++i) + { + printf("card nb: %i card meaning: %s\n", i, cardType_toString(i)); + } + + cell* tab = get_board_tabBoard(brd); + for(int y = 0;y<BOARD_SIZE;++y) + { + printf("\t"); + for(int x = 0;x<BOARD_SIZE;++x) + { + if(is_cell_empty(tab[i])) + { + printf(".\t"); + } + else + { + CardType crdType = get_card_type(tab[i].fCard); + printf("%i\t", crdType); + } + } + printf("\n"); + } + printf("***************************\n"); + fflush(stdout); +} + + +void display_hand(faction fac) +{ + printf("hand of %s:\n", get_faction_nom(fac)); + CList hand = get_faction_hand(fac); + printf("\t"); + while(!is_empty(hand)) + { + printf("%i\t", get_card_type(hand->fCard)); + hand = hand->fNext; + } + printf("\n"); + fflush(stdout); +} + + +bool want_to_redraw(faction fac) +{ + while(true) + { + char buff[256]; + printf("does the faction %s want to redraw ? (y/n): "); + scanf("%s", buff); + switch(buff[0]) + { + case 'y': + return true; + break; + case 'n': + return false; + break; + default: + printf("wrong input (y/n)\n"); + break; + } + } + + return false; +} + + +card* choose_card_to_place(faction fac) +{ + CList hand = get_faction_hand(fac); + unsigned int nbCards = size(hand); + while(true) + { + unsigned int crd = 0; + printf("Faction %s, please choose which card to place (1 through %i): ", get_faction_nom(fac), nbCards); + scanf("%i", &crd); + if(crd > nbCards || crd < 1) + { + printf("wrong input (needs to be between 1 and %i)\n", nbCards); + } + else + { + return &remove_where(hand, crd - 1, NULL); + } + } + + return NULL; +} + + +int where_to_place_card(faction fac, card crd) +{ + while(true) + { + unsigned int x = 0, y = 0; + printf("Faction %s, please choose where to place the card %i (format: x y): ", get_faction_nom(fac), get_card_type(crd)); + scanf("%i %i", &x, &y); + if(x > BOARD_SIZE || x < 1 + || y > BOARD_SIZE || y < 1) + { + printf("wrong input (coords need to be between 1 and %i)\n", BOARD_SIZE); + } + else + { + return (x - 1) + (y - 1) * BOARD_SIZE; + } + } + + return -1; +} + + +void display_winner(board brd) +{ + faction* facs = display_faction(brd); + printf("And the winner is...\n"); + + bool result = get_faction_nbRoundWon(facs[0]) > get_faction_nbRoundWon(facs[1]); + switch(result) + { + case true: + printf("the faction named %s , congratulation !!\n", get_faction_nom(facs[0])); + break; + case false: + printf("the faction named %s , congratulation !!\n", get_faction_nom(facs[1])); + break; + default: + break; + } + + fflush(stdout); +} + + + +void display_card_effects(card crd) +{ + +} \ No newline at end of file -- GitLab From 3984f6831dc01b9121e90d94b317c1312c665303 Mon Sep 17 00:00:00 2001 From: Lucas Desrumeaux <lucas@carjager.com> Date: Fri, 15 Apr 2022 14:40:45 +0200 Subject: [PATCH 071/163] [B.5Changement nom de variables dans cell et Clist --- headers/plateau.h | 4 +-- src/plateau.c | 16 ++++++------ src/structure.c | 66 +++++++++++++++++++++++------------------------ 3 files changed, 43 insertions(+), 43 deletions(-) diff --git a/headers/plateau.h b/headers/plateau.h index 797e981..f5f51fe 100644 --- a/headers/plateau.h +++ b/headers/plateau.h @@ -28,8 +28,8 @@ typedef enum CellState */ typedef struct cell { - card fCard; - CellState fState; + card cellCard; + CellState state; } cell; /** diff --git a/src/plateau.c b/src/plateau.c index 9c2b2f7..8da8c3d 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -18,8 +18,8 @@ board create_new_board() int i; for (i=0; i < BOARD_SIZE* BOARD_SIZE; i += 1) { - (new_board->tabBoard[i]).fState = Empty; - (new_board->tabBoard[i]).fCard = NULL; + (new_board->tabBoard[i]).state = Empty; + (new_board->tabBoard[i]).cellCard = NULL; } new_board->factions[0] = create_faction(); @@ -39,8 +39,8 @@ int new_round(board p) for (i=0; i < BOARD_SIZE* BOARD_SIZE; i += 1) { /* Reinitialisation des cases du tableau */ - (p->tabBoard[i]).fState = Empty; - (p->tabBoard[i]).fCard = NULL; + (p->tabBoard[i]).state = Empty; + (p->tabBoard[i]).cellCard = NULL; } if (p->factions[0].fNbRoundWon == WIN_NUMBER || p->factions[1]->fNbRoundWon == WIN_NUMBER) { @@ -58,8 +58,8 @@ faction* display_faction(board p) void put_card(board p, card c, int coord) { - (p->tabBoard[coord]).fCard = c; - (p->tabBoard[coord]).fState = FaceDown; + (p->tabBoard[coord]).cellCard = c; + (p->tabBoard[coord]).state = FaceDown; } @@ -70,12 +70,12 @@ void card_effect(board p, card c) card turn_over_card(board p) { - card current = ((p->tabBoard[0]).fCard); + card current = ((p->tabBoard[0]).cellCard); int index =0; while (current == NULL && index < BOARD_SIZE) { index += 1; - current = (p->tabBoard[index]).fCard; + current = (p->tabBoard[index]).cellCard; } if (current != NULL) { diff --git a/src/structure.c b/src/structure.c index 90820c5..d43b0b9 100644 --- a/src/structure.c +++ b/src/structure.c @@ -7,8 +7,8 @@ /*************CList methods and structure**********/ struct Node { - struct card* fCard; - struct Node* fNext; + struct card* nodeCard; + struct Node* nodeNext; }; typedef struct Node* CList; @@ -32,7 +32,7 @@ unsigned int size(CList lst) while(curr) { res++; - curr = curr->fNext; + curr = curr->nodeNext; } } @@ -52,17 +52,17 @@ CList insert_where(CList lst, struct card* crd, int index_pos, struct Node* node if(!last) { lst = (CList)malloc(sizeof(struct Node)); - lst->fCard = crd; - lst->fNext = NULL; + lst->nodeCard = crd; + lst->nodeNext = NULL; return lst; } - curr = lst->fNext; + curr = lst->nodeNext; while(curr && (index < index_pos || curr != node_pos)) { index++; last = curr; - curr = curr->fNext; + curr = curr->nodeNext; } /*check si la position spécifié est valide*/ @@ -73,9 +73,9 @@ CList insert_where(CList lst, struct card* crd, int index_pos, struct Node* node } struct Node* new_val = (CList)malloc(sizeof(struct Node)); - new_val->fCard = crd; - new_val->fNext = curr; - last->fNext = new_val; + new_val->nodeCard = crd; + new_val->nodeNext = curr; + last->nodeNext = new_val; return lst; @@ -92,12 +92,12 @@ CList add_list(CList lst, CList concat) CList curr = lst; /*on va à la fin de la list lst*/ - while(curr->fNext) + while(curr->nodeNext) { - curr = curr->fNext; + curr = curr->nodeNext; } - curr->fNext = concat; + curr->nodeNext = concat; return lst; } @@ -107,9 +107,9 @@ struct card* remove_card(CList* lst, struct card* crd) { if(!(*lst)) return NULL; /*si y'a que un élement*/ - if(!(*lst)->fNext) + if(!(*lst)->nodeNext) { - if((*lst)->fCard == crd) + if((*lst)->nodeCard == crd) { free(*lst); *lst = NULL; @@ -118,21 +118,21 @@ struct card* remove_card(CList* lst, struct card* crd) } /*si c'est le premier élement*/ - if((*lst)->fCard == crd) + if((*lst)->nodeCard == crd) { - CList buff = (*lst)->fNext; + CList buff = (*lst)->nodeNext; free(*lst); *lst = buff; return crd; } - CList curr = (*lst)->fNext; + CList curr = (*lst)->nodeNext; CList last = *lst; - while(curr && (curr->fCard != crd)) + while(curr && (curr->nodeCard != crd)) { last = curr; - curr = curr->fNext; + curr = curr->nodeNext; } if(!curr) @@ -140,7 +140,7 @@ struct card* remove_card(CList* lst, struct card* crd) return NULL; } - last->fNext = curr->fNext; + last->nodeNext = curr->nodeNext; free(curr); @@ -154,7 +154,7 @@ struct card* remove_where(CList* lst, int index_pos, struct Node* node_pos) { if(index_pos == -1 && node_pos) { - return remove_card(lst, node_pos->fCard); + return remove_card(lst, node_pos->nodeCard); } @@ -170,20 +170,20 @@ struct card* remove_where(CList* lst, int index_pos, struct Node* node_pos) /*si c'est le premier élement*/ if(index_pos == 0) { - CList buff = (*lst)->fNext; - struct card* crd = (*lst)->fCard; + CList buff = (*lst)->nodeNext; + struct card* crd = (*lst)->nodeCard; free(*lst); *lst = buff; return crd; } - curr = (*lst)->fNext; + curr = (*lst)->nodeNext; while(curr && index < index_pos) { index++; last = curr; - curr = curr->fNext; + curr = curr->nodeNext; } /*check si la position spécifié est valide*/ @@ -193,9 +193,9 @@ struct card* remove_where(CList* lst, int index_pos, struct Node* node_pos) return NULL; } - struct card* res = curr->fCard; + struct card* res = curr->nodeCard; - last->fNext = curr->fNext; + last->nodeNext = curr->nodeNext; free(curr); return res; @@ -211,10 +211,10 @@ bool is_card_in(CList lst, struct card* crd) CList curr = lst; while(curr) { - if(curr->fCard == crd) + if(curr->nodeCard == crd) return true; - curr = curr->fNext; + curr = curr->nodeNext; } return false; @@ -226,9 +226,9 @@ void free_CList(CList* lst) while(curr) { - CList buff = curr->fNext; - if(curr->fCard) - free(curr->fCard); + CList buff = curr->nodeNext; + if(curr->nodeCard) + free(curr->nodeCard); free(curr); curr = buff; -- GitLab From 220f1487fc2ce0a8e55a6cc620267969d6f096fd Mon Sep 17 00:00:00 2001 From: "martin.fond" <martin.fond@ensiie.fr> Date: Fri, 15 Apr 2022 14:44:46 +0200 Subject: [PATCH 072/163] =?UTF-8?q?[LotB][B.6]=20R=C3=A9solution=20de=20bu?= =?UTF-8?q?g=20et=20d=C3=A9but=20d'utilisation=20des=20getters=20et=20sett?= =?UTF-8?q?ers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- headers/carte.h | 13 +++++++++++++ headers/plateau.h | 1 + src/faction.c | 16 ++++++++-------- src/plateau.c | 8 ++++---- 4 files changed, 26 insertions(+), 12 deletions(-) diff --git a/headers/carte.h b/headers/carte.h index 8376538..bce2bf4 100644 --- a/headers/carte.h +++ b/headers/carte.h @@ -115,4 +115,17 @@ void set_card_factionOwner(card oneCard, unsigned int factionOwner); */ char* cardType_toString(CardType type); + +/** + *\fn card build_card(CardType mtype, unsigned int mnbOccurences, char* meffDesc, unsigned int mfactionOwner)) + *\param mtype de type CardType + *\param mnbOccurences de type unsigned int + *\param meffDesc de type char* + *\param mfactionOwner de type unsigned int + *\brief Fonction constructrice du type card initialisant tout les éléments en paramètres. + *\return la carte qui a été retournée ou le pointeur NULL + */ + +card build_card(CardType mtype, unsigned int mnbOccurences, char* meffDesc, unsigned int mfactionOwner); + #endif /* CARTE_H */ diff --git a/headers/plateau.h b/headers/plateau.h index 797e981..bee2592 100644 --- a/headers/plateau.h +++ b/headers/plateau.h @@ -125,4 +125,5 @@ void put_card(board p, card c, int coord); */ card turn_over_card(board p); + #endif /*PLATEAU_H*/ \ No newline at end of file diff --git a/src/faction.c b/src/faction.c index 7a03cd9..ff49a8d 100644 --- a/src/faction.c +++ b/src/faction.c @@ -26,12 +26,13 @@ typedef struct faction* faction; faction create_faction(){ - faction new_faction; - new_faction->ptsDDRS = 0; - new_faction->nbRoundWon = 0; - new_faction->hand = malloc(sizeof(CList)); - new_faction->deck = malloc(47*sizeof(card)); - new_faction->hasMulligan = false; + faction new_faction = { + .ptsDDRS = 0, + .nbRoundWon = 0, + .hand = malloc(sizeof(CList)), + .deck = malloc(47*sizeof(card)), + .hasMulligan = false + } return new_faction; } @@ -65,8 +66,7 @@ void empty_hand(faction fac){ int i; for (i=0; i < HAND_SIZE; i += 1) { - push(fac->deck, (fac->hand)->card); - remove_where(fac->hand->card, 0, NULL); + push(fac->deck, remove_where(&fac->hand, 0, NULL)); } } diff --git a/src/plateau.c b/src/plateau.c index 9c2b2f7..9c34643 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -1,12 +1,12 @@ #include "../headers/plateau.h" - +#include "../headers/faction.h" /** * \brief utilisee dans plateau.h */ struct board { - cell tabBoard[BOARD_SIZE * BOARD_SIZE]; + struct cell tabBoard[BOARD_SIZE * BOARD_SIZE]; faction factions[2]; }; @@ -24,7 +24,7 @@ board create_new_board() new_board->factions[0] = create_faction(); new_board->factions[1] = create_faction(); - + return new_board; } void free_board(board p) @@ -42,7 +42,7 @@ int new_round(board p) (p->tabBoard[i]).fState = Empty; (p->tabBoard[i]).fCard = NULL; } - if (p->factions[0].fNbRoundWon == WIN_NUMBER || p->factions[1]->fNbRoundWon == WIN_NUMBER) + if (get_faction_nbRoundWon(p->factions[0]) == WIN_NUMBER || get_faction_nbRoundWon(p->factions[1])== WIN_NUMBER) { /* Si un joeur a gagne on renvoi false */ return false; -- GitLab From 1382b54f31005739df163f553cd1d58ddfcbc1c4 Mon Sep 17 00:00:00 2001 From: Felicien FISCUS <felicien.fiscus@pc130-10.pedago.ensiie.fr> Date: Fri, 15 Apr 2022 14:52:50 +0200 Subject: [PATCH 073/163] [LotB][B.8] ajout de la derniere fonction et fixing des erreurs de compilation --- headers/interface.h | 2 +- src/interface.c | 38 +++++++++++++++++++++++++------------- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/headers/interface.h b/headers/interface.h index 002f27c..06c47d8 100644 --- a/headers/interface.h +++ b/headers/interface.h @@ -48,7 +48,7 @@ bool want_to_redraw(faction); * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) * \date 2022-03-18 */ -card* choose_card_to_place(faction); +card choose_card_to_place(faction); /** * \brief Fonction demande quelle position la faction \b param1 souhaite poser sa carte \b param2 diff --git a/src/interface.c b/src/interface.c index 4a77c29..d94ba7e 100644 --- a/src/interface.c +++ b/src/interface.c @@ -20,15 +20,25 @@ void display_board(board brd) printf("\t"); for(int x = 0;x<BOARD_SIZE;++x) { - if(is_cell_empty(tab[i])) + CellState state = get_cell_state(tab[x + y * BOARD_SIZE]); + switch(state) { - printf(".\t"); - } - else - { - CardType crdType = get_card_type(tab[i].fCard); - printf("%i\t", crdType); + case Empty: + printf("."); + break; + case FaceDown: + printf("X"); + break; + case FaceUp: + { + CardType type = get_card_type(tab[x + y * BOARD_SIZE].fCard); + printf("%i", type); + } + break; + default: + break; } + printf("\t"); } printf("\n"); } @@ -44,8 +54,8 @@ void display_hand(faction fac) printf("\t"); while(!is_empty(hand)) { - printf("%i\t", get_card_type(hand->fCard)); - hand = hand->fNext; + printf("%i\t", get_card_type(get_first(hand))); + hand = get_next(hand); } printf("\n"); fflush(stdout); @@ -57,7 +67,7 @@ bool want_to_redraw(faction fac) while(true) { char buff[256]; - printf("does the faction %s want to redraw ? (y/n): "); + printf("does the faction %s want to redraw ? (y/n): ", get_faction_nom(fac)); scanf("%s", buff); switch(buff[0]) { @@ -77,7 +87,7 @@ bool want_to_redraw(faction fac) } -card* choose_card_to_place(faction fac) +card choose_card_to_place(faction fac) { CList hand = get_faction_hand(fac); unsigned int nbCards = size(hand); @@ -92,7 +102,9 @@ card* choose_card_to_place(faction fac) } else { - return &remove_where(hand, crd - 1, NULL); + card ret_card = remove_where(&hand, crd - 1, NULL); + set_faction_hand(fac, hand); + return ret_card; } } @@ -147,5 +159,5 @@ void display_winner(board brd) void display_card_effects(card crd) { - + printf("effect: %s\n", get_card_effectDesc(crd)); } \ No newline at end of file -- GitLab From aa64d6de37da4e7a79e268d1bffc6d898dad670e Mon Sep 17 00:00:00 2001 From: Felicien FISCUS <felicien.fiscus@pc130-10.pedago.ensiie.fr> Date: Fri, 15 Apr 2022 14:55:06 +0200 Subject: [PATCH 074/163] [LotB][B.3] ajout des fonctions utilitaires pour CList get_first et get_next --- headers/structure.h | 39 +++++++++++++++++++++++++++------------ src/structure.c | 43 +++++++++++++++++++++++++++---------------- 2 files changed, 54 insertions(+), 28 deletions(-) diff --git a/headers/structure.h b/headers/structure.h index 43e7810..7ff3cbc 100644 --- a/headers/structure.h +++ b/headers/structure.h @@ -7,11 +7,12 @@ #ifndef STRUCTURE_H #define STRUCTURE_H -#include "carte.h" #define HAND_SIZE 8 #define MAX_LEN 200 #define BOARD_SIZE (2 * 8 - 1) /*obliger de hardcoder le 8, sinon probleme d'ordre de la compilation*/ +#include "carte.h" +typedef struct card* card; /*pratique*/ typedef enum bool { @@ -44,6 +45,20 @@ bool is_empty(CList lst); */ unsigned int size(CList lst); +/** +* \brief permet d'avoir accès au premier élément de la liste +* \param lst la CList +* \return le premier élément de la liste sans la changer, NULL si la liste est vide +*/ +card get_first(CList lst); + +/** +* \brief permet d'avoir accès au prochain noeud de la liste +* \param lst la CList +* \return le prochain noeud dans la liste, sans la changer, NULL si la liste est vide +*/ +CList get_next(CList lst); + /** * \brief insert une card a la CList spécifié, a la position spécifié, si aucune n'est spécifié, rien ne se passe * \param lst CList a modifié @@ -58,7 +73,7 @@ unsigned int size(CList lst); * \return CList la CList résultante avec l'élement insérer ou (si aucune position n'est spécifié ou si la position n'est pas valide) * la meme CList que passer en argument et affiche un message d'erreur dans stderr */ -CList insert_where(CList lst, struct card* crd, int index_pos, struct Node* node_pos); +CList insert_where(CList lst, card crd, int index_pos, struct Node* node_pos); /** * \brief permet d'ajouter une card à la CList, en tête de liste par copie de la card @@ -66,7 +81,7 @@ CList insert_where(CList lst, struct card* crd, int index_pos, struct Node* node * \param crd la card a ajouter * \return la CList avec l'ajout */ -CList add_card(CList lst, struct card* crd); +CList add_card(CList lst, card crd); /** * \brief permet d'ajouter une liste deja existante en queue de la CList 'lst', c'est une concaténation @@ -79,10 +94,10 @@ CList add_list(CList lst, CList concat); /** * \brief permet de savoir si la carte spécifié est dans la liste spécifié * \param lst CList - * \param crd struct card* + * \param crd card * \return bool true si la carte est dedans, false sinon */ -bool is_card_in(CList lst, struct card* crd); +bool is_card_in(CList lst, card crd); @@ -90,10 +105,10 @@ bool is_card_in(CList lst, struct card* crd); * \brief enlève un element de la liste spécifié qui correspond à la carte spécifié. * \param lst la CList à modifié , doit etre un pointeur valide * \param crd la carte à enlever - * \return struct card* NULL si aucune carte de \a lst ne correspond à celle spécifié, la carte retiré sinon. + * \return card NULL si aucune carte de \a lst ne correspond à celle spécifié, la carte retiré sinon. * Attention, la responsabilité de désallouer la mémoire pris par la carte en question est transmise au caller */ -struct card* remove_card(CList* lst, struct card* crd); +card remove_card(CList* lst, card crd); /** * \brief la meme chose que \see remove sauf qu'au lieu de spécifié la carte, @@ -105,10 +120,10 @@ struct card* remove_card(CList* lst, struct card* crd); * \param node_pos la Node où la carte sera retiré. * si vous voulez retirer en spécifiant la position avec un int, il suffit de spécifier \a index_pos * et de mettre \a node_pos à NULL - * \return struct card* NULL si la position spécifié est invalide, et la carte enlever sinon + * \return card NULL si la position spécifié est invalide, et la carte enlever sinon * Attention, la responsabilité de désallouer la mémoire pris par la carte en question est transmise au caller */ -struct card* remove_where(CList* lst, int index_pos, struct Node* node_pos); +card remove_where(CList* lst, int index_pos, struct Node* node_pos); /** * \brief libere la memoire allouée par la CList, s'il reste des cartes dans la liste, @@ -155,7 +170,7 @@ unsigned int stack_size(Stack stck); * de desallouer la mémoire de cette élement est transmise au caller. * si la pile est vide, NULL est renvoyé et un petit message d'erreur est afficher */ -struct card* pop(Stack stck); +card pop(Stack stck); /** * \brief ajoute une card en haut de la pile @@ -163,14 +178,14 @@ struct card* pop(Stack stck); * \param crd la carte à ajouter != NULL * \return rien */ -void push(Stack stck, struct card* crd); +void push(Stack stck, card crd); /** * \brief méthode d'acces à la tête de la pile * \param stck Valid Stack pointer * \return la tête de la pile */ -struct card* head(Stack stck); +card head(Stack stck); /** * \brief utiliser pour mélanger la pile rapidement, diff --git a/src/structure.c b/src/structure.c index 90820c5..0b10779 100644 --- a/src/structure.c +++ b/src/structure.c @@ -7,7 +7,7 @@ /*************CList methods and structure**********/ struct Node { - struct card* fCard; + card fCard; struct Node* fNext; }; @@ -40,8 +40,19 @@ unsigned int size(CList lst) } +card get_first(CList lst) +{ + return (is_empty(lst)) ? NULL : lst->fCard; +} + + +CList get_next(CList lst) +{ + return (is_empty(lst)) ? NULL : lst->fNext; +} + -CList insert_where(CList lst, struct card* crd, int index_pos, struct Node* node_pos) +CList insert_where(CList lst, card crd, int index_pos, struct Node* node_pos) { struct Node* curr = NULL; @@ -81,7 +92,7 @@ CList insert_where(CList lst, struct card* crd, int index_pos, struct Node* node } -CList add_card(CList lst, struct card* crd) +CList add_card(CList lst, card crd) { return insert_where(lst, crd, 0, NULL); } @@ -103,7 +114,7 @@ CList add_list(CList lst, CList concat) } -struct card* remove_card(CList* lst, struct card* crd) +card remove_card(CList* lst, card crd) { if(!(*lst)) return NULL; /*si y'a que un élement*/ @@ -150,7 +161,7 @@ struct card* remove_card(CList* lst, struct card* crd) } -struct card* remove_where(CList* lst, int index_pos, struct Node* node_pos) +card remove_where(CList* lst, int index_pos, struct Node* node_pos) { if(index_pos == -1 && node_pos) { @@ -171,7 +182,7 @@ struct card* remove_where(CList* lst, int index_pos, struct Node* node_pos) if(index_pos == 0) { CList buff = (*lst)->fNext; - struct card* crd = (*lst)->fCard; + card crd = (*lst)->fCard; free(*lst); *lst = buff; return crd; @@ -193,7 +204,7 @@ struct card* remove_where(CList* lst, int index_pos, struct Node* node_pos) return NULL; } - struct card* res = curr->fCard; + card res = curr->fCard; last->fNext = curr->fNext; free(curr); @@ -205,7 +216,7 @@ struct card* remove_where(CList* lst, int index_pos, struct Node* node_pos) } -bool is_card_in(CList lst, struct card* crd) +bool is_card_in(CList lst, card crd) { if(!lst) return false; CList curr = lst; @@ -247,8 +258,8 @@ void free_CList(CList* lst) struct Stack { - struct card* fStack[MAX_LEN]; - struct card* fTop; + card fStack[MAX_LEN]; + card fTop; unsigned int fSize; }; @@ -281,13 +292,13 @@ unsigned int stack_size(Stack stck) return stck->fSize; } -struct card* head(Stack stck) +card head(Stack stck) { return stck->fTop; } -struct card* pop(Stack stck) +card pop(Stack stck) { if(is_stack_empty(stck)) { @@ -295,7 +306,7 @@ struct card* pop(Stack stck) return NULL; } - struct card* hd = head(stck); + card hd = head(stck); stck->fStack[(--stck->fSize)] = NULL; stck->fTop = stck->fStack[stck->fSize - 1]; @@ -304,7 +315,7 @@ struct card* pop(Stack stck) } -void push(Stack stck, struct card* crd) +void push(Stack stck, card crd) { if(stck->fSize >= MAX_LEN) { @@ -326,7 +337,7 @@ void shuffle_stack(Stack stck) for(int i = stck->fSize - 1; i > 0; --i) { int j = Lehmer32(&lehmer_seed) % (i+1); - struct card* buff_i = stck->fStack[i]; + card buff_i = stck->fStack[i]; stck->fStack[i] = stck->fStack[j]; stck->fStack[j] = buff_i; } @@ -340,7 +351,7 @@ void free_stack(Stack stck) { while(!is_stack_empty(stck)) { - struct card* hd = pop(stck); + card hd = pop(stck); if(hd) free(hd); } -- GitLab From 6a5f2e3181b6b451b7724c8a67b5d62fb22ebd8b Mon Sep 17 00:00:00 2001 From: Felicien FISCUS <felicien.fiscus@pc130-10.pedago.ensiie.fr> Date: Fri, 15 Apr 2022 15:02:30 +0200 Subject: [PATCH 075/163] =?UTF-8?q?[LotB][B.8]modifications=20en=20cons?= =?UTF-8?q?=C3=A9quence=20d'une=20modification=20dans=20interface.h?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main.c b/src/main.c index eef6c01..6df0531 100644 --- a/src/main.c +++ b/src/main.c @@ -67,16 +67,16 @@ int main(/*int argc, char** argv*/) while(!hand_is_empty(fFirst_faction) && !hand_is_empty(fSecond_faction)) { /*pour la premiere faction*/ - card* card_to_place = choose_card_to_place(fFirst_faction); - int card_coords = where_to_place_card(fFirst_faction, *card_to_place); - put_card(fBoard, *card_to_place, card_coords); + card card_to_place = choose_card_to_place(fFirst_faction); + int card_coords = where_to_place_card(fFirst_faction, card_to_place); + put_card(fBoard, card_to_place, card_coords); display_board(fBoard); /*afficher le plateau à chaque mise à jour de celui-ci*/ /*pour la deuxieme faction*/ card_to_place = choose_card_to_place(fSecond_faction); - card_coords = where_to_place_card(fSecond_faction, *card_to_place); - put_card(fBoard, *card_to_place, card_coords); + card_coords = where_to_place_card(fSecond_faction, card_to_place); + put_card(fBoard, card_to_place, card_coords); display_board(fBoard); -- GitLab From c6ae0e8ec766907faa18a26264528bb9c290dd2b Mon Sep 17 00:00:00 2001 From: "martin.fond" <martin.fond@ensiie.fr> Date: Fri, 15 Apr 2022 15:04:04 +0200 Subject: [PATCH 076/163] [B.6] initialisation plateau --- headers/faction.h | 2 +- src/faction.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/headers/faction.h b/headers/faction.h index 3f94bf4..d644590 100644 --- a/headers/faction.h +++ b/headers/faction.h @@ -140,7 +140,7 @@ void set_faction_hasMulligan(faction f, bool hasMull); *\fn faction create_faction() *\return Une faction initialisee */ -faction create_faction(); +struct faction create_faction(); /** *\brief Supprime une faction diff --git a/src/faction.c b/src/faction.c index ff49a8d..3972529 100644 --- a/src/faction.c +++ b/src/faction.c @@ -25,14 +25,14 @@ struct faction typedef struct faction* faction; -faction create_faction(){ - faction new_faction = { +struct faction create_faction(){ + struct faction new_faction = { .ptsDDRS = 0, .nbRoundWon = 0, .hand = malloc(sizeof(CList)), .deck = malloc(47*sizeof(card)), .hasMulligan = false - } + }; return new_faction; } -- GitLab From 33b259c2e8b8831ef9a0cde1c638197215d1c5aa Mon Sep 17 00:00:00 2001 From: "martin.fond" <martin.fond@ensiie.fr> Date: Fri, 15 Apr 2022 15:24:32 +0200 Subject: [PATCH 077/163] =?UTF-8?q?[B.6]=20Initialisation=20dans=20les=20f?= =?UTF-8?q?onctions=20de=20cr=C3=A9ation=20de=20plateau=20et=20faction?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- headers/faction.h | 2 +- src/faction.c | 15 +++++++-------- src/plateau.c | 2 +- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/headers/faction.h b/headers/faction.h index d644590..3f94bf4 100644 --- a/headers/faction.h +++ b/headers/faction.h @@ -140,7 +140,7 @@ void set_faction_hasMulligan(faction f, bool hasMull); *\fn faction create_faction() *\return Une faction initialisee */ -struct faction create_faction(); +faction create_faction(); /** *\brief Supprime une faction diff --git a/src/faction.c b/src/faction.c index 3972529..500e889 100644 --- a/src/faction.c +++ b/src/faction.c @@ -25,14 +25,13 @@ struct faction typedef struct faction* faction; -struct faction create_faction(){ - struct faction new_faction = { - .ptsDDRS = 0, - .nbRoundWon = 0, - .hand = malloc(sizeof(CList)), - .deck = malloc(47*sizeof(card)), - .hasMulligan = false - }; +faction create_faction(){ + faction new_faction = malloc(sizeof(struct faction)); + new_faction->ptsDDRS = 0; + new_faction->nbRoundWon = 0; + new_faction->hand = malloc(sizeof(CList)); + new_faction->deck = malloc(47*sizeof(card)); + new_faction->hasMulligan = false; return new_faction; } diff --git a/src/plateau.c b/src/plateau.c index 3f85441..8c7d612 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -14,7 +14,7 @@ typedef struct board* board; board create_new_board() { - board new_board; + board new_board = malloc(sizeof(struct board)); int i; for (i=0; i < BOARD_SIZE* BOARD_SIZE; i += 1) { -- GitLab From 8f64ec82f8d77c7547617b728e6e41f30b6716ee Mon Sep 17 00:00:00 2001 From: Lucas Desrumeaux <lucas@carjager.com> Date: Fri, 15 Apr 2022 15:44:12 +0200 Subject: [PATCH 078/163] [B.5] Ajout des setters et getters des cellules du plateau --- headers/plateau.h | 48 ++++++++++++++++++++++++++++++++++++++++++++++- src/carte.c | 2 +- 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/headers/plateau.h b/headers/plateau.h index f5f51fe..2553128 100644 --- a/headers/plateau.h +++ b/headers/plateau.h @@ -42,6 +42,24 @@ typedef struct board* board; /*** Getters & Setters ***/ +/** + * \brief Get the cell card object + * \param oneCell cellule du plateau + * \return card la carte contenu dans la cellule, null si la cellule est vide + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-04-15 + */ +card get_cell_card(cell oneCell); + +/** + * \brief Get the cell state object + * \param oneCell cellule du plateau + * \return CellState état de la cellule + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-04-15 + */ +CellState get_cell_state(cell oneCell); + /** * \brief Get the board tabBoard object * \param b plateau @@ -51,6 +69,16 @@ typedef struct board* board; */ cell* get_board_tabBoard(board b); +/** + * \brief Get the board cell object + * \param b plateau + * \param coord coord de type int, la coordonnée 1D de l'emplacement de la cellule + * \return cell la cellule du plateau demandée à un place donnée + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-04-15 + */ +cell get_board_cell(board b, int coord); + /** * \brief Get the board factions object * \param b plateau @@ -72,6 +100,24 @@ faction* get_board_factions(board b); */ void set_board_faction(board b, faction f, int numFaction); +/** + * \brief Set the cell card object + * \param oneCell cellule (du plateau) à modifier + * \param oneCard carte a mettre dans la cellule + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-04-15 + */ +void set_cell_card(cell oneCell, card oneCard); + +/** + * \brief Set the cell state object + * \param oneCell cellule (du plateau) à modifier + * \param oneState statut de la cellule + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-04-15 + */ +void set_cell_state(cell oneCell, CellState oneState); + /*** Fonctions Autres ***/ /** @@ -110,7 +156,7 @@ faction* display_faction(board p); *\fn void put_card(board p, card c, int coord) *\param p de type board *\param c de type card - *\param coords de type int, la coordonnée 1D de l'emplacement de la carte + *\param coord de type int, la coordonnée 1D de l'emplacement de la carte *\brief Fonction permettant d'ajouter une carte c sur le plateau à la position coord, sur le support de jeu pointé par p *\return rien */ diff --git a/src/carte.c b/src/carte.c index 1d53014..c06128b 100644 --- a/src/carte.c +++ b/src/carte.c @@ -23,4 +23,4 @@ struct card unsigned int factionOwner; }; -typedef struct card* oneCard; \ No newline at end of file +typedef struct card* card; \ No newline at end of file -- GitLab From 162bf5a93f04b3b9c071a9a3fb2c842091c75f28 Mon Sep 17 00:00:00 2001 From: "martin.fond" <martin.fond@ensiie.fr> Date: Fri, 15 Apr 2022 15:48:05 +0200 Subject: [PATCH 079/163] [B.6] ajout d'une fonction build_card qui permet de creer une carte --- src/carte.c | 18 ++++++++++++++++-- src/plateau.c | 1 + 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/carte.c b/src/carte.c index 1d53014..fa193b1 100644 --- a/src/carte.c +++ b/src/carte.c @@ -8,7 +8,8 @@ * @copyright Copyright (c) 2022 * */ - +#include <stdlib.h> +#include <string.h> #include "../headers/carte.h" /** @@ -23,4 +24,17 @@ struct card unsigned int factionOwner; }; -typedef struct card* oneCard; \ No newline at end of file +typedef struct card* card; + +card build_card(CardType mtype, unsigned int mnbOccurences, char* meffDesc, unsigned int mfactionOwner) +{ + card new_card = malloc(sizeof(card)); + new_card->type = mtype; + new_card->nbOccurences = mnbOccurences; + strncpy(new_card->effectDesc, meffDesc, MAX_LEN); + new_card->factionOwner = mfactionOwner; + return new_card; +} + + + diff --git a/src/plateau.c b/src/plateau.c index 8c7d612..25acedc 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -31,6 +31,7 @@ void free_board(board p) { delete_faction(p->factions[0]); delete_faction(p->factions[1]); + free(p); } int new_round(board p) -- GitLab From e90ca0fd2cd90499acc8f94c25851ca265c5cccd Mon Sep 17 00:00:00 2001 From: "martin.fond" <martin.fond@ensiie.fr> Date: Fri, 15 Apr 2022 15:54:38 +0200 Subject: [PATCH 080/163] [B.6] merge --- headers/plateau.h | 48 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/headers/plateau.h b/headers/plateau.h index 439963b..e05c1d8 100644 --- a/headers/plateau.h +++ b/headers/plateau.h @@ -42,6 +42,24 @@ typedef struct board* board; /*** Getters & Setters ***/ +/** + * \brief Get the cell card object + * \param oneCell cellule du plateau + * \return card la carte contenu dans la cellule, null si la cellule est vide + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-04-15 + */ +card get_cell_card(cell oneCell); + +/** + * \brief Get the cell state object + * \param oneCell cellule du plateau + * \return CellState état de la cellule + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-04-15 + */ +CellState get_cell_state(cell oneCell); + /** * \brief Get the board tabBoard object * \param b plateau @@ -51,6 +69,16 @@ typedef struct board* board; */ cell* get_board_tabBoard(board b); +/** + * \brief Get the board cell object + * \param b plateau + * \param coord coord de type int, la coordonnée 1D de l'emplacement de la cellule + * \return cell la cellule du plateau demandée à un place donnée + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-04-15 + */ +cell get_board_cell(board b, int coord); + /** * \brief Get the board factions object * \param b plateau @@ -72,6 +100,24 @@ faction* get_board_factions(board b); */ void set_board_faction(board b, faction f, int numFaction); +/** + * \brief Set the cell card object + * \param oneCell cellule (du plateau) à modifier + * \param oneCard carte a mettre dans la cellule + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-04-15 + */ +void set_cell_card(cell oneCell, card oneCard); + +/** + * \brief Set the cell state object + * \param oneCell cellule (du plateau) à modifier + * \param oneState statut de la cellule + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-04-15 + */ +void set_cell_state(cell oneCell, CellState oneState); + /*** Fonctions Autres ***/ /** @@ -110,7 +156,7 @@ faction* display_faction(board p); *\fn void put_card(board p, card c, int coord) *\param p de type board *\param c de type card - *\param coords de type int, la coordonnée 1D de l'emplacement de la carte + *\param coord de type int, la coordonnée 1D de l'emplacement de la carte *\brief Fonction permettant d'ajouter une carte c sur le plateau à la position coord, sur le support de jeu pointé par p *\return rien */ -- GitLab From 19b967e99384ca1f1a263e72b4451e661dc1d6cc Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Fri, 15 Apr 2022 16:26:14 +0200 Subject: [PATCH 081/163] =?UTF-8?q?Tache=20B.7=20:=20cr=C3=A9ation=20de=20?= =?UTF-8?q?l'interface=20de=20chaque=20fonction=20d'effet=20de=20carte,=20?= =?UTF-8?q?et=20ajout=20des=20commentaires=20pour=20chaque=20fonction=20po?= =?UTF-8?q?ur=20plateau.c.=20Dans=20plateau.h=20:=20correction=20d'une=20f?= =?UTF-8?q?aute=20de=20fran=C3=A7ais?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- headers/plateau.h | 2 +- src/plateau.c | 517 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 518 insertions(+), 1 deletion(-) diff --git a/headers/plateau.h b/headers/plateau.h index 797e981..1724de5 100644 --- a/headers/plateau.h +++ b/headers/plateau.h @@ -60,7 +60,7 @@ cell* get_board_tabBoard(board b); */ faction* get_board_factions(board b); -//La fonction set pour l'atrribut tabBoard n'est pas nécessaire, elle ferait doublon avec certaines fonctions autres +//La fonction set pour l'attribut tabBoard n'est pas nécessaire, elle ferait doublon avec certaines fonctions autres /** * \brief Set a faction in the factions array of the board diff --git a/src/plateau.c b/src/plateau.c index 9c2b2f7..4417c72 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -86,3 +86,520 @@ card turn_over_card(board p) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +/*** LES EFFETS DES CARTES (32 cartes) ***/ + + +/** + *\fn board create_new_board() + *\param c de type card + *\brief Procédure qui active l'effet d'une carte c de type FISE : + * "La faction qui a posé cette carte gagne 1 point DDRS." + *\return rien + */ + + +void effect_card_FISE(card c){} + + +/** + *\fn board create_new_board() + *\param c de type card + *\brief Procédure qui active l'effet d'une carte c de type FISA : + * "La faction qui a posé cette carte gagne 2 points DDRS si le nombre de cartes retournées sur le plateau (y compris celle-ci) est pair, et 0 sinon." + *\return rien + */ + + +void effect_card_FISA(card c){} + + +/** + *\fn board create_new_board() + *\param c de type card + *\brief Procédure qui active l'effet d'une carte c de type FC : + * "La faction qui a posé cette carte gagne 4 points DDRS si au moins une autre carte FC est retournée sur le plateau et 0 sinon." + *\return rien + */ + + +void effect_card_FC(card c){} + + +/** + *\fn board create_new_board() + *\param c de type card + *\brief Procédure qui active l'effet d'une carte c de type EcologIIE : + * "La faction qui a posé cette carte gagne 1 point DDRS par carte FISE/FISA/FC retournée." + *\return rien + */ + + +void effect_card_ECOLOGIIE(card c){} + + +/** + *\fn board create_new_board() + *\param c de type card + *\brief Procédure qui active l'effet d'une carte c de type lIIEns : + * "Prenez toutes les cartes FISE/FISA/FC retournées, retirez les du plateau, mélangez les et + * reposez les face cachées une par une sur la gauche de la carte la plus en haut à gauche du plateau, dans cet ordre. + * Les prochaines cartes à être retournées sont ces cartes là ." + *\return rien + */ + + +void effect_card_LIIENS(card c){} + + +/** + *\fn board create_new_board() + *\param c de type card + *\brief Procédure qui active l'effet d'une carte c de type Soirée sans alcool : + * "Si au moins une carte alcool est retournée, supprimez toutes les cartes FISE/FISA/FC retournées du plateau. + * Supprimez ensuite la première et la dernière ligne du plateau. + * Sinon la faction qui a posé cette carte gagne 5 points DDRS." + *\return rien + */ + + +void effect_card_SOIREE_SANS_ALCOOL(card c){} + + +/** + *\fn board create_new_board() + *\param c de type card + *\brief Procédure qui active l'effet d'une carte c de type Alcool : + * "Supprimez du plateau toutes les cartes qui touchent cette carte-ci (mais laissez la carte Alcool sur le plateau)." + *\return rien + */ + + +void effect_card_ALCOOL(card c){} + + +/** + *\fn board create_new_board() + *\param c de type card + *\brief Procédure qui active l'effet d'une carte c de type Café : + * "Supprimez toutes les cartes Thé et Alcool retournées sur le plateau. + * Si une carte Ecocup est retournée sur le plateau, la faction qui a posé cette carte gagne 1 point DDRS. Sinon elle perd 1 point DDRS." + *\return rien + */ + + +void effect_card_CAFE(card c){} + + +/** + *\fn board create_new_board() + *\param c de type card + *\brief Procédure qui active l'effet d'une carte c de type Thé : + * "Supprimez toutes les cartes Café et Alcool retournées sur le plateau. + * Si une carte Ecocup est retournée sur le plateau, la faction qui a posé cette carte gagne 1 point DDRS. Sinon elle perd 1 point DDRS." + *\return rien + */ + + +void effect_card_THE(card c){} + + +/** + *\fn board create_new_board() + *\param c de type card + *\brief Procédure qui active l'effet d'une carte c de type Ecocup : + * "Cette carte est sans effet." + *\return rien + */ + + +void effect_card_ECOCUP(card c){} + + +/** + *\fn board create_new_board() + *\param c de type card + *\brief Procédure qui active l'effet d'une carte c de type Reprographie : + * "La faction adverse de celle qui a posé cette carte perd 1 points DDRS pour chaque paire de cartes retournées et identiques sur le plateau. + * (S'il y a 3 cartes identiques, cela fait 3 paires)." + *\return rien + */ + + +void effect_card_REPROGRAPHIE(card c){} + + +/** + *\fn board create_new_board() + *\param c de type card + *\brief Procédure qui active l'effet d'une carte c de type Isolation du bâtiment : + * "Chaque faction gagne 1 point DDRS par carte non retournée et non supprimée du plateau qu'elle a posée sur le plateau." + *\return rien + */ + + +void effect_card_ISOLATION_DU_BATIMENT(card c){} + + +/** + *\fn board create_new_board() + *\param c de type card + *\brief Procédure qui active l'effet d'une carte c de type Sobriété numérique : + * "Retournez toutes les cartes non retournées les plus à gauche et à droite de chaque ligne, sans appliquer leur effet." + *\return rien + */ + + +void effect_card_PARCOURS_SOBRIETE_NUMERIQUE(card c){} + + +/** + *\fn board create_new_board() + *\param c de type card + *\brief Procédure qui active l'effet d'une carte c de type Heures supplémentaires : + * "La faction adverse de celle qui a posé cette carte perd 3 points DDRS par carte Heures supplémentaires retournée sur le plateau (y compris celle-ci)." + *\return rien + */ + + +void effect_card_HEURES_SUPPLEMENTAIRES(card c){} + + +/** + *\fn board create_new_board() + *\param c de type card + *\brief Procédure qui active l'effet d'une carte c de type Kahina Bouchama : + * "Supprimez une carte non retournée du plateau choisie au hasard." + *\return rien + */ + + +void effect_card_KAHINA_BOUCHAMA(card c){} + + +/** + *\fn board create_new_board() + *\param c de type card + *\brief Procédure qui active l'effet d'une carte c de type Kevin Goilard : + * "Supprimez une ligne au hasard, la faction qui a posé cette carte gagne 2 points DDRS par carte supprimée ainsi." + *\return rien + */ + + +void effect_card_KEVIN_GOILARD(card c){} + + +/** + *\fn board create_new_board() + *\param c de type card + *\brief Procédure qui active l'effet d'une carte c de type Massinissa Merabet : + * "La faction qui a posé cette carte réactive l'effet de la dernière carte retournée avant Massinissa Merabet, + * en faisant comme si elle l'avait posée elle-même, même si ce n'est pas le cas." + *\return rien + */ + + +void effect_card_MASSINISSA_MERABET(card c){} + + +/** + *\fn board create_new_board() + *\param c de type card + *\brief Procédure qui active l'effet d'une carte c de type Vitera y : + * "La faction qui a le moins de points DDRS gagne 3 points DDRS." + *\return rien + */ + + +void effect_card_VITERA_Y(card c){} + + +/** + *\fn board create_new_board() + *\param c de type card + *\brief Procédure qui active l'effet d'une carte c de type Jonas Senizergues : + * "Supprimez toutes les cartes Heures supplémentaires retournées du plateau." + *\return rien + */ + + +void effect_card_JONAS_SENIZERGUES(card c){} + + +/** + *\fn board create_new_board() + *\param c de type card + *\brief Procédure qui active l'effet d'une carte c de type Fetia Bannour : + * "Si la carte Heures supplémentaires est retournée sur le plateau, + * supprimez toutes les cartes de la ligne et de la colonne où est posée cette carte (y compris celle-ci). + * Sinon la faction qui a posé cette carte gagne 1 point DDRS par carte Catherine Dubois, Anne-Laure Ligozat, Guillaume Burel, + * Christophe Mouilleron, Thomas Lim, Julien Forest et Dimitri Watel retournée sur le plateau." + *\return rien + */ + + +void effect_card_FETIA_BANNOUR(card c){} + + +/** + *\fn board create_new_board() + *\param c de type card + *\brief Procédure qui active l'effet d'une carte c de type Catherine Dubois : + * "Supprimez la première et la dernière cartes de la ligne et de la colonne où est posée cette carte." + *\return rien + */ + + +void effect_card_CATHERINE_DUBOIS(card c){} + + +/** + *\fn board create_new_board() + *\param c de type card + *\brief Procédure qui active l'effet d'une carte c de type Anne-Laure Ligozat : + * "Pour chaque carte EcologIIE, Ecocup, Isolation du bâtiment et parcours Sobriété numérique retournée, + * la faction qui a posé cette carte gagne 3 points DDRS et la dernière carte non retournée du plateau est supprimée. + * (L'effet continue même si Anne-Laure Ligozat ou une des 4 cartes précédemment mentionnées est supprimée)." + *\return rien + */ + + +void effect_card_ANNE_LAURE_LIGOZAT(card c){} + + +/** + *\fn board create_new_board() + *\param c de type card + *\brief Procédure qui active l'effet d'une carte c de type Guillaume Burel : + * "Si la faction adverse de celle qui a posé cette carte a plus de points DDRS, la seconde lui vole 3 points DDRS." + *\return rien + */ + + +void effect_card_GUILLAUME_BUREL(card c){} + + +/** + *\fn board create_new_board() + *\param c de type card + *\brief Procédure qui active l'effet d'une carte c de type Christophe Mouilleron : + * "Si la carte Heures supplémentaires est retournée sur le plateau, + * supprimez toutes les cartes retournées du plateau sauf les cartes Christophe Mouilleron et Heures supplémentaires." + *\return rien + */ + + +void effect_card_CHRISTOPHE_MOUILLERON(card c){} + + +/** + *\fn board create_new_board() + *\param c de type card + *\brief Procédure qui active l'effet d'une carte c de type Thomas Lim : + * "Si Julien Forest n'est par retourné sur le plateau, la faction qui a posé cette carte gagne 3 points DDRS par carte FISE retournée sur le plateau. + * Sinon la faction adverse perd 1 point DDRS par carte FISE retournée sur le plateau." + *\return rien + */ + + +void effect_card_THOMAS_LIM(card c){} + + +/** + *\fn board create_new_board() + *\param c de type card + *\brief Procédure qui active l'effet d'une carte c de type Julien Forest : + * "La faction qui a posé cette carte gagne 6 points DDRS par carte FISE retournée sur le plateau si au moins une carte Café est retournée sur le plateau." + *\return rien + */ + + +void effect_card_JULIEN_FOREST(card c){} + + +/** + *\fn board create_new_board() + *\param c de type card + *\brief Procédure qui active l'effet d'une carte c de type Dimitri Watel : + * "La faction qui a posé cette carte gagne 3 points DDRS par carte FISA ou FC retournée sur le plateau si au moins une carte Thé est retournée sur le plateau." + *\return rien + */ + + +void effect_card_DIMITRI_WATEL(card c){} + + +/** + *\fn board create_new_board() + *\param c de type card + *\brief Procédure qui active l'effet d'une carte c de type Djibril-Aurélien Dembele-Cabot : + * "S'il y a plus de 3 cartes retournées sur la ligne de cette carte, la faction qui a posé cette carte gagne 5 points DDRS." + *\return rien + */ + + +void effect_card_DJIBRIL_AURELIEN_DEMBELE_CABOT(card c){} + + +/** + *\fn board create_new_board() + *\param c de type card + *\brief Procédure qui active l'effet d'une carte c de type Éric Lejeune : + * "Prenez au hasard 5 cartes retournées du plateau (ou toutes les cartes retournées du plateau s'il y a moins de 5). + * Si une de ces cartes est une carte Catherine Dubois, Anne-Laure Ligozat, Guillaume Burel, Christophe Mouilleron, + * Thomas Lim, Julien Forest ou Dimitri Watel, mélangez les et placez les à gauche de la case la plus à gauche de la première ligne. + * Les prochaines cartes à être retournées sont ces cartes là . Sinon, supprimez ces cartes du plateau." + *\return rien + */ + + +void effect_card_ERIC_LEJEUNE(card c){} + + +/** + *\fn board create_new_board() + *\param c de type card + *\brief Procédure qui active l'effet d'une carte c de type Lucienne Pacave : + * "S'il y a une carte FISA retournée dans la même ligne ou la même colonne que cette carte, la faction qui a posé cette carte gagne 5 points DDRS." + *\return rien + */ + + +void effect_card_LUCIENNE_PACAVE(card c){} + + +/** + *\fn board create_new_board() + *\param c de type card + *\brief Procédure qui active l'effet d'une carte c de type Katrin Salhab : + * "Si les cartes Djibril-Aurélien Djembele-Cabeau, Eric Lejeune et Lucienne Pacavé sont retournées, + * la faction qui a posé cette carte gagne 10 points DDRS. + * Sinon, retournez toutes les cartes dans la même ligne de cette carte sans appliquer leurs effets." + *\return rien + */ + + +void effect_card_KATRIN_SALHAB(card c){} + + +/** + *\fn board create_new_board() + *\param c de type card + *\brief Procédure qui active l'effet d'une carte c de type Laurent Prével : + * "Si Laurent Prével est la dernière carte retournée du plateau, + * la faction qui a posé cette carte gagne la manche, quel que soit le nombre de points DDRS des deux factions." + *\return rien + */ + + +void effect_card_LAURENT_PREVEL(card c){} -- GitLab From f0f4c9a47e6ba2433adf2333f56f7331822ccd51 Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Fri, 15 Apr 2022 16:53:15 +0200 Subject: [PATCH 082/163] Tache B.7 : modification de commentaires des fonctions des effets --- src/plateau.c | 64 +++++++++++++++++++++++++-------------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/src/plateau.c b/src/plateau.c index e4e3c05..8d86a73 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -202,7 +202,7 @@ card turn_over_card(board p) /** - *\fn board create_new_board() + *\fn void effect_card_FISE(card c) *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type FISE : * "La faction qui a posé cette carte gagne 1 point DDRS." @@ -214,7 +214,7 @@ void effect_card_FISE(card c){} /** - *\fn board create_new_board() + *\fn void effect_card_FISA(card c) *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type FISA : * "La faction qui a posé cette carte gagne 2 points DDRS si le nombre de cartes retournées sur le plateau (y compris celle-ci) est pair, et 0 sinon." @@ -226,7 +226,7 @@ void effect_card_FISA(card c){} /** - *\fn board create_new_board() + *\fn void effect_card_FC(card c) *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type FC : * "La faction qui a posé cette carte gagne 4 points DDRS si au moins une autre carte FC est retournée sur le plateau et 0 sinon." @@ -238,7 +238,7 @@ void effect_card_FC(card c){} /** - *\fn board create_new_board() + *\fn void effect_card_ECOLOGIIE(card c) *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type EcologIIE : * "La faction qui a posé cette carte gagne 1 point DDRS par carte FISE/FISA/FC retournée." @@ -250,7 +250,7 @@ void effect_card_ECOLOGIIE(card c){} /** - *\fn board create_new_board() + *\fn void effect_card_LIIENS(card c) *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type lIIEns : * "Prenez toutes les cartes FISE/FISA/FC retournées, retirez les du plateau, mélangez les et @@ -264,7 +264,7 @@ void effect_card_LIIENS(card c){} /** - *\fn board create_new_board() + *\fn void effect_card_SOIREE_SANS_ALCOOL(card c) *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Soirée sans alcool : * "Si au moins une carte alcool est retournée, supprimez toutes les cartes FISE/FISA/FC retournées du plateau. @@ -278,7 +278,7 @@ void effect_card_SOIREE_SANS_ALCOOL(card c){} /** - *\fn board create_new_board() + *\fn void effect_card_ALCOOL(card c) *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Alcool : * "Supprimez du plateau toutes les cartes qui touchent cette carte-ci (mais laissez la carte Alcool sur le plateau)." @@ -290,7 +290,7 @@ void effect_card_ALCOOL(card c){} /** - *\fn board create_new_board() + *\fn void effect_card_CAFE(card c) *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Café : * "Supprimez toutes les cartes Thé et Alcool retournées sur le plateau. @@ -303,7 +303,7 @@ void effect_card_CAFE(card c){} /** - *\fn board create_new_board() + *\fn void effect_card_THE(card c) *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Thé : * "Supprimez toutes les cartes Café et Alcool retournées sur le plateau. @@ -316,7 +316,7 @@ void effect_card_THE(card c){} /** - *\fn board create_new_board() + *\fn void effect_card_ECOCUP(card c) *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Ecocup : * "Cette carte est sans effet." @@ -328,7 +328,7 @@ void effect_card_ECOCUP(card c){} /** - *\fn board create_new_board() + *\fn void effect_card_REPROGRAPHIE(card c) *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Reprographie : * "La faction adverse de celle qui a posé cette carte perd 1 points DDRS pour chaque paire de cartes retournées et identiques sur le plateau. @@ -341,7 +341,7 @@ void effect_card_REPROGRAPHIE(card c){} /** - *\fn board create_new_board() + *\fn void effect_card_ISOLATION_DU_BATIMENT(card c) *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Isolation du bâtiment : * "Chaque faction gagne 1 point DDRS par carte non retournée et non supprimée du plateau qu'elle a posée sur le plateau." @@ -353,7 +353,7 @@ void effect_card_ISOLATION_DU_BATIMENT(card c){} /** - *\fn board create_new_board() + *\fn void effect_card_PARCOURS_SOBRIETE_NUMERIQUE(card c) *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Sobriété numérique : * "Retournez toutes les cartes non retournées les plus à gauche et à droite de chaque ligne, sans appliquer leur effet." @@ -365,7 +365,7 @@ void effect_card_PARCOURS_SOBRIETE_NUMERIQUE(card c){} /** - *\fn board create_new_board() + *\fn void effect_card_HEURES_SUPPLEMENTAIRES(card c) *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Heures supplémentaires : * "La faction adverse de celle qui a posé cette carte perd 3 points DDRS par carte Heures supplémentaires retournée sur le plateau (y compris celle-ci)." @@ -377,7 +377,7 @@ void effect_card_HEURES_SUPPLEMENTAIRES(card c){} /** - *\fn board create_new_board() + *\fn void effect_card_KAHINA_BOUCHAMA(card c) *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Kahina Bouchama : * "Supprimez une carte non retournée du plateau choisie au hasard." @@ -389,7 +389,7 @@ void effect_card_KAHINA_BOUCHAMA(card c){} /** - *\fn board create_new_board() + *\fn void effect_card_KEVIN_GOILARD(card c) *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Kevin Goilard : * "Supprimez une ligne au hasard, la faction qui a posé cette carte gagne 2 points DDRS par carte supprimée ainsi." @@ -401,7 +401,7 @@ void effect_card_KEVIN_GOILARD(card c){} /** - *\fn board create_new_board() + *\fn void effect_card_MASSINISSA_MERABET(card c) *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Massinissa Merabet : * "La faction qui a posé cette carte réactive l'effet de la dernière carte retournée avant Massinissa Merabet, @@ -414,7 +414,7 @@ void effect_card_MASSINISSA_MERABET(card c){} /** - *\fn board create_new_board() + *\fn void effect_card_VITERA_Y(card c) *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Vitera y : * "La faction qui a le moins de points DDRS gagne 3 points DDRS." @@ -426,7 +426,7 @@ void effect_card_VITERA_Y(card c){} /** - *\fn board create_new_board() + *\fn void effect_card_JONAS_SENIZERGUES(card c) *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Jonas Senizergues : * "Supprimez toutes les cartes Heures supplémentaires retournées du plateau." @@ -438,7 +438,7 @@ void effect_card_JONAS_SENIZERGUES(card c){} /** - *\fn board create_new_board() + *\fn void effect_card_FETIA_BANNOUR(card c) *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Fetia Bannour : * "Si la carte Heures supplémentaires est retournée sur le plateau, @@ -453,7 +453,7 @@ void effect_card_FETIA_BANNOUR(card c){} /** - *\fn board create_new_board() + *\fn void effect_card_CATHERINE_DUBOIS(card c) *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Catherine Dubois : * "Supprimez la première et la dernière cartes de la ligne et de la colonne où est posée cette carte." @@ -465,7 +465,7 @@ void effect_card_CATHERINE_DUBOIS(card c){} /** - *\fn board create_new_board() + *\fn void effect_card_ANNE_LAURE_LIGOZAT(card c){} *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Anne-Laure Ligozat : * "Pour chaque carte EcologIIE, Ecocup, Isolation du bâtiment et parcours Sobriété numérique retournée, @@ -479,7 +479,7 @@ void effect_card_ANNE_LAURE_LIGOZAT(card c){} /** - *\fn board create_new_board() + *\fn void effect_card_GUILLAUME_BUREL(card c) *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Guillaume Burel : * "Si la faction adverse de celle qui a posé cette carte a plus de points DDRS, la seconde lui vole 3 points DDRS." @@ -491,7 +491,7 @@ void effect_card_GUILLAUME_BUREL(card c){} /** - *\fn board create_new_board() + *\fn void effect_card_CHRISTOPHE_MOUILLERON(card c) *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Christophe Mouilleron : * "Si la carte Heures supplémentaires est retournée sur le plateau, @@ -504,7 +504,7 @@ void effect_card_CHRISTOPHE_MOUILLERON(card c){} /** - *\fn board create_new_board() + *\fn void effect_card_THOMAS_LIM(card c) *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Thomas Lim : * "Si Julien Forest n'est par retourné sur le plateau, la faction qui a posé cette carte gagne 3 points DDRS par carte FISE retournée sur le plateau. @@ -517,7 +517,7 @@ void effect_card_THOMAS_LIM(card c){} /** - *\fn board create_new_board() + *\fn void effect_card_JULIEN_FOREST(card c) *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Julien Forest : * "La faction qui a posé cette carte gagne 6 points DDRS par carte FISE retournée sur le plateau si au moins une carte Café est retournée sur le plateau." @@ -529,7 +529,7 @@ void effect_card_JULIEN_FOREST(card c){} /** - *\fn board create_new_board() + *\fn void effect_card_DIMITRI_WATEL(card c) *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Dimitri Watel : * "La faction qui a posé cette carte gagne 3 points DDRS par carte FISA ou FC retournée sur le plateau si au moins une carte Thé est retournée sur le plateau." @@ -541,7 +541,7 @@ void effect_card_DIMITRI_WATEL(card c){} /** - *\fn board create_new_board() + *\fn void effect_card_DJIBRIL_AURELIEN_DEMBELE_CABOT(card c) *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Djibril-Aurélien Dembele-Cabot : * "S'il y a plus de 3 cartes retournées sur la ligne de cette carte, la faction qui a posé cette carte gagne 5 points DDRS." @@ -553,7 +553,7 @@ void effect_card_DJIBRIL_AURELIEN_DEMBELE_CABOT(card c){} /** - *\fn board create_new_board() + *\fn void effect_card_ERIC_LEJEUNE(card c) *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Éric Lejeune : * "Prenez au hasard 5 cartes retournées du plateau (ou toutes les cartes retournées du plateau s'il y a moins de 5). @@ -568,7 +568,7 @@ void effect_card_ERIC_LEJEUNE(card c){} /** - *\fn board create_new_board() + *\fn void effect_card_LUCIENNE_PACAVE(card c) *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Lucienne Pacave : * "S'il y a une carte FISA retournée dans la même ligne ou la même colonne que cette carte, la faction qui a posé cette carte gagne 5 points DDRS." @@ -580,7 +580,7 @@ void effect_card_LUCIENNE_PACAVE(card c){} /** - *\fn board create_new_board() + *\fn void effect_card_KATRIN_SALHAB(card c) *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Katrin Salhab : * "Si les cartes Djibril-Aurélien Djembele-Cabeau, Eric Lejeune et Lucienne Pacavé sont retournées, @@ -594,7 +594,7 @@ void effect_card_KATRIN_SALHAB(card c){} /** - *\fn board create_new_board() + *\fn void effect_card_LAURENT_PREVEL(card c) *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Laurent Prével : * "Si Laurent Prével est la dernière carte retournée du plateau, -- GitLab From 34107119caa0215331733704e4ad331ecb1d333e Mon Sep 17 00:00:00 2001 From: "martin.fond" <martin.fond@ensiie.fr> Date: Fri, 15 Apr 2022 17:33:00 +0200 Subject: [PATCH 083/163] [B.6] Debut implementation du constructeur initiale de decks et correction de bugs --- headers/carte.h | 2 + headers/faction.h | 15 ++- headers/plateau.h | 1 + src/carte.c | 5 - src/faction.c | 337 +++++++++++++++++++++++++++++++++++++++++++++- src/interface.c | 2 +- src/plateau.c | 32 ++++- 7 files changed, 383 insertions(+), 11 deletions(-) diff --git a/headers/carte.h b/headers/carte.h index bce2bf4..0434084 100644 --- a/headers/carte.h +++ b/headers/carte.h @@ -128,4 +128,6 @@ char* cardType_toString(CardType type); card build_card(CardType mtype, unsigned int mnbOccurences, char* meffDesc, unsigned int mfactionOwner); + + #endif /* CARTE_H */ diff --git a/headers/faction.h b/headers/faction.h index 3f94bf4..f2098ce 100644 --- a/headers/faction.h +++ b/headers/faction.h @@ -179,8 +179,7 @@ void empty_hand(faction); *\fn void shuffle_deck(faction) *\param param1 faction dont on melange la main *\return rien -*/ -void shuffle_deck(faction); +*/typedef struct card* card; /** *\brief Pioche 8 cartes @@ -199,4 +198,16 @@ void redraw(faction); */ bool hand_is_empty(faction); +/** +* \brief Fonction qui construit le deck initiale de la faction fac +* \fn hand_is_empty(faction) +* \param fac Faction a modifier +* \param facnb Numéro de la faction ( 0 ou 1) dans la partie +* \return true la main est vide +* \return false la main n'est pas vide + */ + +void build_Deck(faction fac, unsigned int facnb); + + #endif /* FACTION_H */ \ No newline at end of file diff --git a/headers/plateau.h b/headers/plateau.h index e05c1d8..b3c0746 100644 --- a/headers/plateau.h +++ b/headers/plateau.h @@ -140,6 +140,7 @@ void free_board(board p); *\fn int new_round(board p) *\param p de type board *\brief Fonction permettant de réinitialiser le support de jeu pointé par p (sans faire de modification sur les factions) si la partie n'est pas terminée + * et aumenter le nombre de victoires du gagnant *\return un booléen indiquant si le jeu est terminé ou non */ int new_round(board p); diff --git a/src/carte.c b/src/carte.c index edca9e4..aaf4125 100644 --- a/src/carte.c +++ b/src/carte.c @@ -24,7 +24,6 @@ struct card unsigned int factionOwner; }; -<<<<<<< HEAD typedef struct card* card; card build_card(CardType mtype, unsigned int mnbOccurences, char* meffDesc, unsigned int mfactionOwner) @@ -38,7 +37,3 @@ card build_card(CardType mtype, unsigned int mnbOccurences, char* meffDesc, unsi } - -======= -typedef struct card* card; ->>>>>>> 53c5100d93f02971dbf4698f258373a7c972fa5f diff --git a/src/faction.c b/src/faction.c index 500e889..9d7d615 100644 --- a/src/faction.c +++ b/src/faction.c @@ -30,7 +30,7 @@ faction create_faction(){ new_faction->ptsDDRS = 0; new_faction->nbRoundWon = 0; new_faction->hand = malloc(sizeof(CList)); - new_faction->deck = malloc(47*sizeof(card)); + new_faction->deck = malloc(sizeof(Stack)); new_faction->hasMulligan = false; return new_faction; } @@ -85,4 +85,337 @@ bool hand_is_empty(faction fac) return true; } return false; -} \ No newline at end of file +} + + +void Build_Deck(faction fac, unsigned int nbfac) +{ + int i; + for ( i = 0, i < CardTypeCount, i +=1) + { + + switch (i) + { + case FISE: + int index; + for (index = 0, index < 4, index += 1) + { + card new_card; + new_card = build_card(i, 4, "La faction qui a posé cette carte gagne 1 point DDRS.", nbfac); + push(fac.Deck, new_card); + } + break; + + case FISA: + int index; + for (index = 0, index < 4, index += 1) + { + card new_card; + new_card = build_card(i, 4, "La faction qui a posé cette carte gagne 2 points DDRS si le nombre de cartes retournées sur le plateau (y compris celle-ci) est pair, et 0 sinon.", nbfac); + push(fac.Deck, new_card); + } + break; + + case FC: + int index; + for (index = 0, index < 4, index += 1) + { + card new_card; + new_card = build_card(i, 4, "La faction qui a posé cette carte gagne 4 points DDRS si au moins une autre carte FC est retournée sur le plateau et 0 sinon", nbfac); + push(fac.Deck, new_card); + } + break; + + case EcologIIE: + int index; + for (index = 0, index < 2, index += 1) + { + card new_card; + new_card = build_card(i, 2, "La faction qui a posé cette carte gagne 1 point DDRS par carte FISE/FISA/FC retournée.", nbfac); + push(fac.Deck, new_card); + } + break; + + case lIIEns: + int index; + for (index = 0, index < 2, index += 1) + { + card new_card; + new_card = build_card(i, 2, "Prenez toutes les cartes FISE/FISA/FC retournées, retirez les du plateau, mélangez les et reposez les face cachées une par une sur la gauche de la carte la plus en haut à gauche du plateau, dans cet ordre. Les prochaines cartes à être retournées sont ces cartes là .", nbfac); + push(fac.Deck, new_card); + } + break; + + case Soiree_sans_alcool: + int index; + for (index = 0, index < 1, index += 1) + { + card new_card; + new_card = build_card(i, 1, "Si au moins une carte alcool est retournée, supprimez toutes les cartes FISE/FISA/FC retournées du plateau. Supprimez ensuite la première et la dernière ligne du plateau. Sinon la faction qui a posé cette carte gagne 5 points DDRS.", nbfac); + push(fac.Deck, new_card); + } + break; + + case Alcool: + int index; + for (index = 0, index < 1, index += 1) + { + card new_card; + new_card = build_card(i, 1, "Supprimez du plateau toutes les cartes qui touchent cette carte-ci (mais laissez la carte Alcool sur le plateau).", nbfac); + push(fac.Deck, new_card); + } + break; + + case Cafe: + int index; + for (index = 0, index < 3, index += 1) + { + card new_card; + new_card = build_card(i, 3, "Supprimez toutes les cartes Thé et Alcool retournées sur le plateau. Si une carte Ecocup est retournée sur le plateau, la faction qui a posé cette carte gagne 1 point DDRS. Sinon elle perd 1 point DDRS.", nbfac); + push(fac.Deck, new_card); + } + break; + + case The: + int index; + for (index = 0, index < 3, index += 1) + { + card new_card; + new_card = build_card(i, 3, "Supprimez toutes les cartes Café et Alcool retournées sur le plateau. Si une carte Ecocup est retournée sur le plateau, la faction qui a posé cette carte gagne 1 point DDRS. Sinon elle perd 1 point DDRS.", nbfac); + push(fac.Deck, new_card); + } + break; + + case Ecocup: + int index; + for (index = 0, index < 1, index += 1) + { + card new_card; + new_card = build_card(i, 1, "Cette carte est sans effet.", nbfac); + push(fac.Deck, new_card); + } + break; + + case Reprographie: + int index; + for (index = 0, index < 1, index += 1) + { + card new_card; + new_card = build_card(i, 1, "La faction adverse de celle qui a posé cette carte perd 1 points DDRS pour chaque paire de cartes retournées et identiques sur le plateau. (S'il y a 3 cartes identiques, cela fait 3 paires).", nbfac); + push(fac.Deck, new_card); + } + break; + + case Isolation_du_batiment: + int index; + for (index = 0, index < 1, index += 1) + { + card new_card; + new_card = build_card(i, 1, "Chaque faction gagne 1 point DDRS par carte non retournée et non supprimée du plateau qu'elle a posée sur le plateau.", nbfac); + push(fac.Deck, new_card); + } + break; + + case Parcours_sobriete_numerique: + int index; + for (index = 0, index < 1, index += 1) + { + card new_card; + new_card = build_card(i, 1, "Retournez toutes les cartes non retournées les plus à gauche et à droite de chaque ligne, sans appliquer leur effet.", nbfac); + push(fac.Deck, new_card); + } + break; + + + case Heures_Supplementaires: + int index; + for (index = 0, index < 1, index += 1) + { + card new_card; + new_card = build_card(i, 1, "La faction adverse de celle qui a posé cette carte perd 3 points DDRS par carte Heures supplémentaires retournée sur le plateau (y compris celle-ci).", nbfac); + push(fac.Deck, new_card); + } + break; + + + case Karine_Bouchama: + int index; + for (index = 0, index < 1, index += 1) + { + card new_card; + new_card = build_card(i, 1, "Supprimez une carte non retournée du plateau choisie au hasard.", nbfac); + push(fac.Deck, new_card); + } + break; + + + case Ecocup: + int index; + for (index = 0, index < 4, index += 1) + { + card new_card; + new_card = build_card(i, 1, "Cette carte est sans effet.", nbfac); + push(fac.Deck, new_card); + } + break; + + + case Ecocup: + int index; + for (index = 0, index < 4, index += 1) + { + card new_card; + new_card = build_card(i, 1, "Cette carte est sans effet.", nbfac); + push(fac.Deck, new_card); + } + break; + + + case Ecocup: + int index; + for (index = 0, index < 4, index += 1) + { + card new_card; + new_card = build_card(i, 1, "Cette carte est sans effet.", nbfac); + push(fac.Deck, new_card); + } + break; + + + case Ecocup: + int index; + for (index = 0, index < 4, index += 1) + { + card new_card; + new_card = build_card(i, 1, "Cette carte est sans effet.", nbfac); + push(fac.Deck, new_card); + } + break; + + + case Ecocup: + int index; + for (index = 0, index < 4, index += 1) + { + card new_card; + new_card = build_card(i, 1, "Cette carte est sans effet.", nbfac); + push(fac.Deck, new_card); + } + break; + + + case Ecocup: + int index; + for (index = 0, index < 4, index += 1) + { + card new_card; + new_card = build_card(i, 1, "Cette carte est sans effet.", nbfac); + push(fac.Deck, new_card); + } + break; + + + case Ecocup: + int index; + for (index = 0, index < 4, index += 1) + { + card new_card; + new_card = build_card(i, 1, "Cette carte est sans effet.", nbfac); + push(fac.Deck, new_card); + } + break; + + case Ecocup: + int index; + for (index = 0, index < 4, index += 1) + { + card new_card; + new_card = build_card(i, 1, "Cette carte est sans effet.", nbfac); + push(fac.Deck, new_card); + } + break; + + + case Ecocup: + int index; + for (index = 0, index < 4, index += 1) + { + card new_card; + new_card = build_card(i, 1, "Cette carte est sans effet.", nbfac); + push(fac.Deck, new_card); + } + break; + + + case Ecocup: + int index; + for (index = 0, index < 4, index += 1) + { + card new_card; + new_card = build_card(i, 1, "Cette carte est sans effet.", nbfac); + push(fac.Deck, new_card); + } + break; + + + case Ecocup: + int index; + for (index = 0, index < 4, index += 1) + { + card new_card; + new_card = build_card(i, 1, "Cette carte est sans effet.", nbfac); + push(fac.Deck, new_card); + } + break; + + case Ecocup: + int index; + for (index = 0, index < 4, index += 1) + { + card new_card; + new_card = build_card(i, 1, "Cette carte est sans effet.", nbfac); + push(fac.Deck, new_card); + } + break; + + + case Ecocup: + int index; + for (index = 0, index < 4, index += 1) + { + card new_card; + new_card = build_card(i, 1, "Cette carte est sans effet.", nbfac); + push(fac.Deck, new_card); + } + break; + + + case Ecocup: + int index; + for (index = 0, index < 4, index += 1) + { + card new_card; + new_card = build_card(i, 1, "Cette carte est sans effet.", nbfac); + push(fac.Deck, new_card); + } + break; + + + case Ecocup: + int index; + for (index = 0, index < 4, index += 1) + { + card new_card; + new_card = build_card(i, 1, "Cette carte est sans effet.", nbfac); + push(fac.Deck, new_card); + } + break; + } + + } + + + + return; +} + diff --git a/src/interface.c b/src/interface.c index d94ba7e..4d00f6b 100644 --- a/src/interface.c +++ b/src/interface.c @@ -31,7 +31,7 @@ void display_board(board brd) break; case FaceUp: { - CardType type = get_card_type(tab[x + y * BOARD_SIZE].fCard); + CardType type = get_card_type(tab[x + y * BOARD_SIZE].cellCard); printf("%i", type); } break; diff --git a/src/plateau.c b/src/plateau.c index 25acedc..29da90b 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -36,6 +36,36 @@ void free_board(board p) int new_round(board p) { + int ptsDDRS0 = get_faction_ptsDDRS(p->factions[0]); + int ptsDDRS1 = get_faction_ptsDDRS(p->factions[1]); + if ( ptsDDRS0 > ptsDDRS1) + { + set_faction_nbRoundWon(p->factions[0], get_faction_nbRoundWon(p->factions[0]) + 1); + } + if ( ptsDDRS1 > ptsDDRS0) + { + set_faction_nbRoundWon(p->factions[1], get_faction_nbRoundWon(p->factions[1]) + 1); + } + + if (ptsDDRS1 == ptsDDRS0) + { + int index = 0; + card current = ((p->tabBoard[0]).cellCard); + while ((p->tabBoard[0]).state == Empty && index < BOARD_SIZE) + { + index += 1; + current = (p->tabBoard[index]).cellCard; + } + if (get_card_factionOwner(current) == 0) + { + set_faction_nbRoundWon(p->factions[0], get_faction_nbRoundWon(p->factions[0]) + 1); + } + else + { + set_faction_nbRoundWon(p->factions[1], get_faction_nbRoundWon(p->factions[1]) + 1); + } + } + int i; for (i=0; i < BOARD_SIZE* BOARD_SIZE; i += 1) { @@ -73,7 +103,7 @@ card turn_over_card(board p) { card current = ((p->tabBoard[0]).cellCard); int index =0; - while (current == NULL && index < BOARD_SIZE) + while (((p->tabBoard[0]).state == Empty || (p->tabBoard[0]).state == FaceUp) && index < BOARD_SIZE) { index += 1; current = (p->tabBoard[index]).cellCard; -- GitLab From f0b8a1145b00434e18b008dce73d81ddd0b06970 Mon Sep 17 00:00:00 2001 From: Lucas Desrumeaux <lucas@carjager.com> Date: Fri, 15 Apr 2022 17:42:58 +0200 Subject: [PATCH 084/163] =?UTF-8?q?[B.5]=20Ajout=20des=20impl=C3=A9mentati?= =?UTF-8?q?ons=20des=20setters=20et=20getters=20de=20carte.c?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- headers/carte.h | 2 +- src/carte.c | 73 ++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 73 insertions(+), 2 deletions(-) diff --git a/headers/carte.h b/headers/carte.h index bce2bf4..9f00440 100644 --- a/headers/carte.h +++ b/headers/carte.h @@ -100,7 +100,7 @@ void set_card_effectDesc(card oneCard, char* effectDesc); /** * \brief Set the card factionOwner object * \param oneCard carte à modifier - * \param factionOwner faction a qui appartient la carte + * \param factionOwner faction a qui appartient la carte 0 ou 1 en fonction des deux factions du plateau, tableau factions du struct faction * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) * \date 2022-04-05 */ diff --git a/src/carte.c b/src/carte.c index c06128b..4575970 100644 --- a/src/carte.c +++ b/src/carte.c @@ -10,6 +10,7 @@ */ #include "../headers/carte.h" +#include <string.h> /** * \struct card @@ -23,4 +24,74 @@ struct card unsigned int factionOwner; }; -typedef struct card* card; \ No newline at end of file +typedef struct card* card; + +/*** Getters ***/ + +/** + * \brief Implémentation de la fonction get_card_type + * \see carte.h + */ +CardType get_card_type(card oneCard){ + return oneCard->type; +}; + +/** + * \brief Implémentation de la fonction get_card_nbOccurences + * \see carte.h + */ +unsigned int get_card_nbOccurences(card oneCard){ + return oneCard->nbOccurences; +}; + +/** + * \brief Implémentation de la fonction get_card_effectDesc + * \see carte.h + */ +char* get_card_effectDesc(card oneCard){ + return oneCard->effectDesc; +}; + +/** + * \brief Implémentation de la fonction get_card_factionOwner + * \see carte.h + */ +unsigned int get_card_factionOwner(card oneCard){ + return oneCard->factionOwner; +}; + +/*** Setters ***/ + +/** + * \brief Implémentation de la fonction set_card_type + * \see carte.h + */ +void set_card_type(card oneCard, CardType oneType){ + oneCard->type = oneType; +}; + +/** + * \brief Implémentation de la fonction set_card_nbOccurences + * \see carte.h + */ +void set_card_nbOccurences(card oneCard, unsigned int nbOccur){ + oneCard->nbOccurences = nbOccur; +}; + +/** + * \brief Implémentation de la fonction set_card_effectDesc + * \see carte.h + */ +void set_card_effectDesc(card oneCard, char* effectDesc){ + strncpy(oneCard->effectDesc, effectDesc, MAX_LEN); +}; + +/** + * \brief Implémentation de la fonction set_card_factionOwner + * \see carte.h + */ +void set_card_factionOwner(card oneCard, unsigned int factionOwner){ + oneCard->factionOwner = factionOwner; +}; + +/*** Fonction Autres ***/ \ No newline at end of file -- GitLab From bbb7fbc58637bc08463c3c4f4dd9e69697d9f9fb Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Fri, 15 Apr 2022 17:57:36 +0200 Subject: [PATCH 085/163] =?UTF-8?q?Tache=20B.7=20:=20Modification=20de=20c?= =?UTF-8?q?ommentaires,=20impl=C3=A9mentation=20de=20la=20proc=C3=A9dure?= =?UTF-8?q?=20card=5Feffect()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/carte.c | 4 - src/plateau.c | 369 +++++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 305 insertions(+), 68 deletions(-) diff --git a/src/carte.c b/src/carte.c index edca9e4..fa193b1 100644 --- a/src/carte.c +++ b/src/carte.c @@ -24,7 +24,6 @@ struct card unsigned int factionOwner; }; -<<<<<<< HEAD typedef struct card* card; card build_card(CardType mtype, unsigned int mnbOccurences, char* meffDesc, unsigned int mfactionOwner) @@ -39,6 +38,3 @@ card build_card(CardType mtype, unsigned int mnbOccurences, char* meffDesc, unsi -======= -typedef struct card* card; ->>>>>>> 53c5100d93f02971dbf4698f258373a7c972fa5f diff --git a/src/plateau.c b/src/plateau.c index 8d86a73..ea0cbfb 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -1,5 +1,7 @@ #include "../headers/plateau.h" #include "../headers/faction.h" +#include "../headers/carte.h" + /** * \brief utilisee dans plateau.h @@ -64,8 +66,216 @@ void put_card(board p, card c, int coord) } + + + +/** + *\fn void card_effect(board p, card c) + *\param p de type board + *\param c de type card + *\brief Procédure qui active l'effet d'une carte c sur le plateau p + *\return rien + */ + void card_effect(board p, card c) { + CardType type = get_card_type(c); + + switch(type) + { + case FISE : + effect_card_FISE(p, c); + break; + + + + case FISA : + effect_card_FISA(p, c); + break; + + + + case FC : + effect_card_FC(p, c); + break; + + + + case EcologIIE : + effect_card_ECOLOGIIE(p, c); + break; + + + + case lIIEns : + effect_card_LIIENS(p, c); + break; + + + + case Soiree_sans_alcool : + effect_card_SOIREE_SANS_ALCOOL(p,c); + break; + + + + case Alcool : + effect_card_ALCOOL(p,c); + break; + + + + case Cafe : + effect_card_CAFE(p, c); + break; + + + + case The : + effect_card_THE(p,c); + break; + + + + case Ecocup : + effect_card_ECOCUP(p,c); + break; + + + + case Reprographie : + effect_card_REPROGRAPHIE(p, c); + break; + + + + case Isolation_du_batiment : + effect_card_ISOLATION_DU_BATIMENT(p,c); + break; + + + + case Parcours_sobriete_numerique : + effect_card_PARCOURS_SOBRIETE_NUMERIQUE(p, c); + break; + + + + case Heures_supplementaires : + effect_card_HEURES_SUPPLEMENTAIRES(p, c); + break; + + + + case Kahina_Bouchama : + effect_card_KAHINA_BOUCHAMA(p, c); + break; + + + + case Kevin_Goilard : + effect_card_KEVIN_GOILARD(p, c); + break; + + + + case Massinissa_Merabet : + effect_card_MASSINISSA_MERABET(p, c); + break; + + + + case Vitera_Y : + effect_card_VITERA_Y(p,c); + break; + + + + case Jonas_Senizergues : + effect_card_JONAS_SENIZERGUES(p, c); + break; + + + + case Fetia_Bannour : + effect_card_FETIA_BANNOUR(p, c); + break; + + + + case Catherine_Dubois : + effect_card_CATHERINE_DUBOIS(p, c); + break; + + + + case Anne_Laure_Ligozat : + effect_card_ANNE_LAURE_LIGOZAT(p, c); + break; + + + + case Guillaume_Burel : + effect_card_GUILLAUME_BUREL(p, c); + break; + + + + case Christophe_Mouilleron : + effect_card_CHRISTOPHE_MOUILLERON(p, c); + break; + + + + case Thomas_Lim : + effect_card_THOMAS_LIM(p, c); + break; + + + + case Julien_Forest : + effect_card_JULIEN_FOREST(p, c); + break; + + + + case Dimitri_Watel : + effect_card_DIMITRI_WATEL(p, c); + break; + + + + case Djibril_Aurelien_Dembele_Cabot : + effect_card_DJIBRIL_AURELIEN_DEMBELE_CABOT(p, c); + break; + + + + case Eric_Lejeune : + effect_card_ERIC_LEJEUNE(p, c); + break; + + + + case Lucienne_Pacave : + effect_card_LUCIENNE_PACAVE(p, c); + break; + + + + case Katrin_Salhab : + effect_card_KATRIN_SALHAB(p, c); + break; + + + + case Laurent_Prevel : + effect_card_LAURENT_PREVEL(p, c); + break; + + + default; + } return; } @@ -202,7 +412,7 @@ card turn_over_card(board p) /** - *\fn void effect_card_FISE(card c) + *\fn void effect_card_FISE(board p, card c) *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type FISE : * "La faction qui a posé cette carte gagne 1 point DDRS." @@ -210,11 +420,12 @@ card turn_over_card(board p) */ -void effect_card_FISE(card c){} +void effect_card_FISE(board p, card c){} /** - *\fn void effect_card_FISA(card c) + *\fn void effect_card_FISA(board p, card c) + *\param p de type board *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type FISA : * "La faction qui a posé cette carte gagne 2 points DDRS si le nombre de cartes retournées sur le plateau (y compris celle-ci) est pair, et 0 sinon." @@ -222,11 +433,12 @@ void effect_card_FISE(card c){} */ -void effect_card_FISA(card c){} +void effect_card_FISA(board p, card c){} /** - *\fn void effect_card_FC(card c) + *\fn void effect_card_FC(board p, card c) + *\param p de type board *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type FC : * "La faction qui a posé cette carte gagne 4 points DDRS si au moins une autre carte FC est retournée sur le plateau et 0 sinon." @@ -234,11 +446,12 @@ void effect_card_FISA(card c){} */ -void effect_card_FC(card c){} +void effect_card_FC(board p, card c){} /** - *\fn void effect_card_ECOLOGIIE(card c) + *\fn void effect_card_ECOLOGIIE(board p, card c) + *\param p de type board *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type EcologIIE : * "La faction qui a posé cette carte gagne 1 point DDRS par carte FISE/FISA/FC retournée." @@ -246,11 +459,12 @@ void effect_card_FC(card c){} */ -void effect_card_ECOLOGIIE(card c){} +void effect_card_ECOLOGIIE(board p, card c){} /** - *\fn void effect_card_LIIENS(card c) + *\fn void effect_card_LIIENS(board p, card c) + *\param p de type board *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type lIIEns : * "Prenez toutes les cartes FISE/FISA/FC retournées, retirez les du plateau, mélangez les et @@ -260,11 +474,12 @@ void effect_card_ECOLOGIIE(card c){} */ -void effect_card_LIIENS(card c){} +void effect_card_LIIENS(board p, card c){} /** - *\fn void effect_card_SOIREE_SANS_ALCOOL(card c) + *\fn void effect_card_SOIREE_SANS_ALCOOL(board p, card c) + *\param p de type board *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Soirée sans alcool : * "Si au moins une carte alcool est retournée, supprimez toutes les cartes FISE/FISA/FC retournées du plateau. @@ -274,11 +489,12 @@ void effect_card_LIIENS(card c){} */ -void effect_card_SOIREE_SANS_ALCOOL(card c){} +void effect_card_SOIREE_SANS_ALCOOL(board p, card c){} /** - *\fn void effect_card_ALCOOL(card c) + *\fn void effect_card_ALCOOL(board p, card c) + *\param p de type board *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Alcool : * "Supprimez du plateau toutes les cartes qui touchent cette carte-ci (mais laissez la carte Alcool sur le plateau)." @@ -286,11 +502,12 @@ void effect_card_SOIREE_SANS_ALCOOL(card c){} */ -void effect_card_ALCOOL(card c){} +void effect_card_ALCOOL(board p, card c){} /** - *\fn void effect_card_CAFE(card c) + *\fn void effect_card_CAFE(board p, card c) + *\param p de type board *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Café : * "Supprimez toutes les cartes Thé et Alcool retournées sur le plateau. @@ -299,11 +516,12 @@ void effect_card_ALCOOL(card c){} */ -void effect_card_CAFE(card c){} +void effect_card_CAFE(board p, card c){} /** - *\fn void effect_card_THE(card c) + *\fn void effect_card_THE(board p, card c) + *\param p de type board *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Thé : * "Supprimez toutes les cartes Café et Alcool retournées sur le plateau. @@ -312,11 +530,12 @@ void effect_card_CAFE(card c){} */ -void effect_card_THE(card c){} +void effect_card_THE(board p, card c){} /** - *\fn void effect_card_ECOCUP(card c) + *\fn void effect_card_ECOCUP(board p, card c) + *\param p de type board *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Ecocup : * "Cette carte est sans effet." @@ -324,11 +543,12 @@ void effect_card_THE(card c){} */ -void effect_card_ECOCUP(card c){} +void effect_card_ECOCUP(board p, card c){} /** - *\fn void effect_card_REPROGRAPHIE(card c) + *\fn void effect_card_REPROGRAPHIE(board p, card c) + *\param p de type board *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Reprographie : * "La faction adverse de celle qui a posé cette carte perd 1 points DDRS pour chaque paire de cartes retournées et identiques sur le plateau. @@ -337,11 +557,12 @@ void effect_card_ECOCUP(card c){} */ -void effect_card_REPROGRAPHIE(card c){} +void effect_card_REPROGRAPHIE(board p, card c){} /** - *\fn void effect_card_ISOLATION_DU_BATIMENT(card c) + *\fn void effect_card_ISOLATION_DU_BATIMENT(board p, card c) + *\param p de type board *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Isolation du bâtiment : * "Chaque faction gagne 1 point DDRS par carte non retournée et non supprimée du plateau qu'elle a posée sur le plateau." @@ -349,11 +570,12 @@ void effect_card_REPROGRAPHIE(card c){} */ -void effect_card_ISOLATION_DU_BATIMENT(card c){} +void effect_card_ISOLATION_DU_BATIMENT(board p, card c){} /** - *\fn void effect_card_PARCOURS_SOBRIETE_NUMERIQUE(card c) + *\fn void effect_card_PARCOURS_SOBRIETE_NUMERIQUE(board p, card c) + *\param p de type board *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Sobriété numérique : * "Retournez toutes les cartes non retournées les plus à gauche et à droite de chaque ligne, sans appliquer leur effet." @@ -361,11 +583,12 @@ void effect_card_ISOLATION_DU_BATIMENT(card c){} */ -void effect_card_PARCOURS_SOBRIETE_NUMERIQUE(card c){} +void effect_card_PARCOURS_SOBRIETE_NUMERIQUE(board p, card c){} /** - *\fn void effect_card_HEURES_SUPPLEMENTAIRES(card c) + *\fn void effect_card_HEURES_SUPPLEMENTAIRES(board p, card c) + *\param p de type board *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Heures supplémentaires : * "La faction adverse de celle qui a posé cette carte perd 3 points DDRS par carte Heures supplémentaires retournée sur le plateau (y compris celle-ci)." @@ -373,11 +596,12 @@ void effect_card_PARCOURS_SOBRIETE_NUMERIQUE(card c){} */ -void effect_card_HEURES_SUPPLEMENTAIRES(card c){} +void effect_card_HEURES_SUPPLEMENTAIRES(board p, card c){} /** - *\fn void effect_card_KAHINA_BOUCHAMA(card c) + *\fn void effect_card_KAHINA_BOUCHAMA(board p, card c) + *\param p de type board *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Kahina Bouchama : * "Supprimez une carte non retournée du plateau choisie au hasard." @@ -385,11 +609,12 @@ void effect_card_HEURES_SUPPLEMENTAIRES(card c){} */ -void effect_card_KAHINA_BOUCHAMA(card c){} +void effect_card_KAHINA_BOUCHAMA(board p, card c){} /** - *\fn void effect_card_KEVIN_GOILARD(card c) + *\fn void effect_card_KEVIN_GOILARD(board p, card c) + *\param p de type board *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Kevin Goilard : * "Supprimez une ligne au hasard, la faction qui a posé cette carte gagne 2 points DDRS par carte supprimée ainsi." @@ -397,11 +622,12 @@ void effect_card_KAHINA_BOUCHAMA(card c){} */ -void effect_card_KEVIN_GOILARD(card c){} +void effect_card_KEVIN_GOILARD(board p, card c){} /** - *\fn void effect_card_MASSINISSA_MERABET(card c) + *\fn void effect_card_MASSINISSA_MERABET(board p, card c) + *\param p de type board *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Massinissa Merabet : * "La faction qui a posé cette carte réactive l'effet de la dernière carte retournée avant Massinissa Merabet, @@ -410,11 +636,12 @@ void effect_card_KEVIN_GOILARD(card c){} */ -void effect_card_MASSINISSA_MERABET(card c){} +void effect_card_MASSINISSA_MERABET(board p, card c){} /** - *\fn void effect_card_VITERA_Y(card c) + *\fn void effect_card_VITERA_Y(board p, card c) + *\param p de type board *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Vitera y : * "La faction qui a le moins de points DDRS gagne 3 points DDRS." @@ -422,11 +649,12 @@ void effect_card_MASSINISSA_MERABET(card c){} */ -void effect_card_VITERA_Y(card c){} +void effect_card_VITERA_Y(board p, card c){} /** - *\fn void effect_card_JONAS_SENIZERGUES(card c) + *\fn void effect_card_JONAS_SENIZERGUES(board p, card c) + *\param p de type board *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Jonas Senizergues : * "Supprimez toutes les cartes Heures supplémentaires retournées du plateau." @@ -434,11 +662,12 @@ void effect_card_VITERA_Y(card c){} */ -void effect_card_JONAS_SENIZERGUES(card c){} +void effect_card_JONAS_SENIZERGUES(board p, card c){} /** - *\fn void effect_card_FETIA_BANNOUR(card c) + *\fn void effect_card_FETIA_BANNOUR(board p, card c) + *\param p de type board *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Fetia Bannour : * "Si la carte Heures supplémentaires est retournée sur le plateau, @@ -449,11 +678,12 @@ void effect_card_JONAS_SENIZERGUES(card c){} */ -void effect_card_FETIA_BANNOUR(card c){} +void effect_card_FETIA_BANNOUR(board p, card c){} /** - *\fn void effect_card_CATHERINE_DUBOIS(card c) + *\fn void effect_card_CATHERINE_DUBOIS(board p, card c) + *\param p de type board *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Catherine Dubois : * "Supprimez la première et la dernière cartes de la ligne et de la colonne où est posée cette carte." @@ -461,11 +691,12 @@ void effect_card_FETIA_BANNOUR(card c){} */ -void effect_card_CATHERINE_DUBOIS(card c){} +void effect_card_CATHERINE_DUBOIS(board p, card c){} /** - *\fn void effect_card_ANNE_LAURE_LIGOZAT(card c){} + *\fn void effect_card_ANNE_LAURE_LIGOZAT(board p, card c) + *\param p de type board *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Anne-Laure Ligozat : * "Pour chaque carte EcologIIE, Ecocup, Isolation du bâtiment et parcours Sobriété numérique retournée, @@ -475,11 +706,12 @@ void effect_card_CATHERINE_DUBOIS(card c){} */ -void effect_card_ANNE_LAURE_LIGOZAT(card c){} +void effect_card_ANNE_LAURE_LIGOZAT(board p, card c){} /** - *\fn void effect_card_GUILLAUME_BUREL(card c) + *\fn void effect_card_GUILLAUME_BUREL(board p, card c) + *\param p de type board *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Guillaume Burel : * "Si la faction adverse de celle qui a posé cette carte a plus de points DDRS, la seconde lui vole 3 points DDRS." @@ -487,11 +719,12 @@ void effect_card_ANNE_LAURE_LIGOZAT(card c){} */ -void effect_card_GUILLAUME_BUREL(card c){} +void effect_card_GUILLAUME_BUREL(board p, card c){} /** - *\fn void effect_card_CHRISTOPHE_MOUILLERON(card c) + *\fn void effect_card_CHRISTOPHE_MOUILLERON(board p, card c) + *\param p de type board *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Christophe Mouilleron : * "Si la carte Heures supplémentaires est retournée sur le plateau, @@ -500,11 +733,12 @@ void effect_card_GUILLAUME_BUREL(card c){} */ -void effect_card_CHRISTOPHE_MOUILLERON(card c){} +void effect_card_CHRISTOPHE_MOUILLERON(board p, card c){} /** - *\fn void effect_card_THOMAS_LIM(card c) + *\fn void effect_card_THOMAS_LIM(board p, card c) + *\param p de type board *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Thomas Lim : * "Si Julien Forest n'est par retourné sur le plateau, la faction qui a posé cette carte gagne 3 points DDRS par carte FISE retournée sur le plateau. @@ -513,11 +747,12 @@ void effect_card_CHRISTOPHE_MOUILLERON(card c){} */ -void effect_card_THOMAS_LIM(card c){} +void effect_card_THOMAS_LIM(board p, card c){} /** - *\fn void effect_card_JULIEN_FOREST(card c) + *\fn void effect_card_JULIEN_FOREST(board p, card c) + *\param p de type board *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Julien Forest : * "La faction qui a posé cette carte gagne 6 points DDRS par carte FISE retournée sur le plateau si au moins une carte Café est retournée sur le plateau." @@ -525,11 +760,12 @@ void effect_card_THOMAS_LIM(card c){} */ -void effect_card_JULIEN_FOREST(card c){} +void effect_card_JULIEN_FOREST(board p, card c){} /** - *\fn void effect_card_DIMITRI_WATEL(card c) + *\fn void effect_card_DIMITRI_WATEL(board p, card c) + *\param p de type board *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Dimitri Watel : * "La faction qui a posé cette carte gagne 3 points DDRS par carte FISA ou FC retournée sur le plateau si au moins une carte Thé est retournée sur le plateau." @@ -537,11 +773,12 @@ void effect_card_JULIEN_FOREST(card c){} */ -void effect_card_DIMITRI_WATEL(card c){} +void effect_card_DIMITRI_WATEL(board p, card c){} /** - *\fn void effect_card_DJIBRIL_AURELIEN_DEMBELE_CABOT(card c) + *\fn void effect_card_DJIBRIL_AURELIEN_DEMBELE_CABOT(board p, card c) + *\param p de type board *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Djibril-Aurélien Dembele-Cabot : * "S'il y a plus de 3 cartes retournées sur la ligne de cette carte, la faction qui a posé cette carte gagne 5 points DDRS." @@ -549,11 +786,12 @@ void effect_card_DIMITRI_WATEL(card c){} */ -void effect_card_DJIBRIL_AURELIEN_DEMBELE_CABOT(card c){} +void effect_card_DJIBRIL_AURELIEN_DEMBELE_CABOT(board p, card c){} /** - *\fn void effect_card_ERIC_LEJEUNE(card c) + *\fn void effect_card_ERIC_LEJEUNE(board p, card c) + *\param p de type board *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Éric Lejeune : * "Prenez au hasard 5 cartes retournées du plateau (ou toutes les cartes retournées du plateau s'il y a moins de 5). @@ -564,11 +802,12 @@ void effect_card_DJIBRIL_AURELIEN_DEMBELE_CABOT(card c){} */ -void effect_card_ERIC_LEJEUNE(card c){} +void effect_card_ERIC_LEJEUNE(board p, card c){} /** - *\fn void effect_card_LUCIENNE_PACAVE(card c) + *\fn void effect_card_LUCIENNE_PACAVE(board p, card c) + *\param p de type board *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Lucienne Pacave : * "S'il y a une carte FISA retournée dans la même ligne ou la même colonne que cette carte, la faction qui a posé cette carte gagne 5 points DDRS." @@ -576,11 +815,12 @@ void effect_card_ERIC_LEJEUNE(card c){} */ -void effect_card_LUCIENNE_PACAVE(card c){} +void effect_card_LUCIENNE_PACAVE(board p, card c){} /** - *\fn void effect_card_KATRIN_SALHAB(card c) + *\fn void effect_card_KATRIN_SALHAB(board p, card c) + *\param p de type board *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Katrin Salhab : * "Si les cartes Djibril-Aurélien Djembele-Cabeau, Eric Lejeune et Lucienne Pacavé sont retournées, @@ -590,11 +830,12 @@ void effect_card_LUCIENNE_PACAVE(card c){} */ -void effect_card_KATRIN_SALHAB(card c){} +void effect_card_KATRIN_SALHAB(board p, card c){} /** - *\fn void effect_card_LAURENT_PREVEL(card c) + *\fn void effect_card_LAURENT_PREVEL(board p, card c) + *\param p de type board *\param c de type card *\brief Procédure qui active l'effet d'une carte c de type Laurent Prével : * "Si Laurent Prével est la dernière carte retournée du plateau, @@ -603,4 +844,4 @@ void effect_card_KATRIN_SALHAB(card c){} */ -void effect_card_LAURENT_PREVEL(card c){} +void effect_card_LAURENT_PREVEL(board p, card c){} -- GitLab From 4e23c8ed792d11cb2b8edad708b260035dd1a328 Mon Sep 17 00:00:00 2001 From: Lucas Desrumeaux <lucas@carjager.com> Date: Fri, 15 Apr 2022 18:29:00 +0200 Subject: [PATCH 086/163] =?UTF-8?q?[B.6]=20Impl=C3=A9mentation=20de=20cart?= =?UTF-8?q?Type=5FtoString=20dans=20carte.c?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- headers/carte.h | 62 ++++++++++++++++++++++++++++++++++++++----------- src/carte.c | 14 ++++++++++- 2 files changed, 61 insertions(+), 15 deletions(-) diff --git a/headers/carte.h b/headers/carte.h index 7f69aba..68e1b37 100644 --- a/headers/carte.h +++ b/headers/carte.h @@ -12,19 +12,53 @@ #ifndef CARTE_H #define CARTE_H +#define FOREACH_CARDTYPE(CARDTYPE) \ + CARDTYPE(FISE) \ + CARDTYPE(FISA) \ + CARDTYPE(FC) \ + CARDTYPE(EcologIIE) \ + CARDTYPE(lIIEns) \ + CARDTYPE(Soiree_sans_alcool) \ + CARDTYPE(Alcool) \ + CARDTYPE(Cafe) \ + CARDTYPE(The) \ + CARDTYPE(Ecocup) \ + CARDTYPE(Reprographie) \ + CARDTYPE(Isolation_du_batiment) \ + CARDTYPE(Parcours_sobriete_numerique) \ + CARDTYPE(Heures_supplementaires) \ + CARDTYPE(Kahina_Bouchama) \ + CARDTYPE(Kevin_Goilard) \ + CARDTYPE(Massinissa_Merabet) \ + CARDTYPE(Vitera_Y) \ + CARDTYPE(Jonas_Senizergues) \ + CARDTYPE(Fetia_Bannour) \ + CARDTYPE(Catherine_Dubois) \ + CARDTYPE(Anne_Laure_Ligozat) \ + CARDTYPE(Guillaume_Burel) \ + CARDTYPE(Christophe_Mouilleron) \ + CARDTYPE(Thomas_Lim) \ + CARDTYPE(Julien_Forest) \ + CARDTYPE(Dimitri_Watel) \ + CARDTYPE(Djibril_Aurelien_Dembele_Cabot) \ + CARDTYPE(Eric_Lejeune) \ + CARDTYPE(Lucienne_Pacave) \ + CARDTYPE(Katrin_Salhab) \ + CARDTYPE(Laurent_Prevel) \ + CARDTYPE(CardTypeCount) \ + +#define GENERATE_ENUM(ENUM) ENUM, +#define GENERATE_STRING(STRING) #STRING, + #include "structure.h" -typedef enum CardType -{ - FISE, FISA, FC, EcologIIE, lIIEns, Soiree_sans_alcool, - Alcool, Cafe, The, Ecocup, Reprographie, Isolation_du_batiment, - Parcours_sobriete_numerique, Heures_supplementaires, Kahina_Bouchama, - Kevin_Goilard, Massinissa_Merabet, Vitera_Y, Jonas_Senizergues, - Fetia_Bannour, Catherine_Dubois, Anne_Laure_Ligozat, Guillaume_Burel, - Christophe_Mouilleron, Thomas_Lim, Julien_Forest, Dimitri_Watel, - Djibril_Aurelien_Dembele_Cabot, Eric_Lejeune, Lucienne_Pacave, - Katrin_Salhab, Laurent_Prevel, CardTypeCount -} CardType; +typedef enum { + FOREACH_CARDTYPE(GENERATE_ENUM) +}CardType; + +static const char *CARDTYPE_STRING[] = { + FOREACH_CARDTYPE(GENERATE_STRING) +}; /** *\brief Creation d'un type carte contenant toutes les informations relatives a une carte independament du reste du jeu. @@ -37,7 +71,7 @@ typedef struct card* card; /** * \brief Get the card type object * \param oneCardcarte dont on récupère l'information - * \return CardType + * \return CardType le type de la Carte qui un enum CardType * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) * \date 2022-04-05 */ @@ -73,7 +107,7 @@ unsigned int get_card_factionOwner(card oneCard); /** * \brief Set the card type object * \param oneCard carte à modifier - * \param oneType type de la carte + * \param oneType type de la carte défnit par enum CardType * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) * \date 2022-04-05 */ @@ -113,7 +147,7 @@ void set_card_factionOwner(card oneCard, unsigned int factionOwner); * \param type * \return la chaine de caracteres, doit etre libere par celui qui l'appelle */ -char* cardType_toString(CardType type); +const char* cardType_toString(CardType type); /** diff --git a/src/carte.c b/src/carte.c index b8d8ba1..fed899b 100644 --- a/src/carte.c +++ b/src/carte.c @@ -97,6 +97,18 @@ void set_card_factionOwner(card oneCard, unsigned int factionOwner){ /*** Fonction Autres ***/ +/** + * \brief Implémentation de la fonction cardType_toString + * \see carte.h + */ +const char* cardType_toString(CardType type){ + return CARDTYPE_STRING[type]; +}; + +/** + * \brief Implémentation de la fonction build_card + * \see carte.h + */ card build_card(CardType mtype, unsigned int mnbOccurences, char* meffDesc, unsigned int mfactionOwner) { card new_card = malloc(sizeof(card)); @@ -105,6 +117,6 @@ card build_card(CardType mtype, unsigned int mnbOccurences, char* meffDesc, unsi strncpy(new_card->effectDesc, meffDesc, MAX_LEN); new_card->factionOwner = mfactionOwner; return new_card; -} +}; -- GitLab From 7c3df4e93eb7e24108b9f82a4b79821324a7e89f Mon Sep 17 00:00:00 2001 From: Lucas Desrumeaux <lucas@carjager.com> Date: Tue, 19 Apr 2022 12:23:24 +0200 Subject: [PATCH 087/163] =?UTF-8?q?[B.5]=20Ajout=20des=20impl=C3=A9mentati?= =?UTF-8?q?ons=20des=20setters=20et=20getters=20de=20faction.c?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- headers/carte.h | 1 - src/faction.c | 100 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 100 insertions(+), 1 deletion(-) diff --git a/headers/carte.h b/headers/carte.h index 68e1b37..4855d5f 100644 --- a/headers/carte.h +++ b/headers/carte.h @@ -159,7 +159,6 @@ const char* cardType_toString(CardType type); *\brief Fonction constructrice du type card initialisant tout les éléments en paramètres. *\return la carte qui a été retournée ou le pointeur NULL */ - card build_card(CardType mtype, unsigned int mnbOccurences, char* meffDesc, unsigned int mfactionOwner); diff --git a/src/faction.c b/src/faction.c index 9d7d615..558831e 100644 --- a/src/faction.c +++ b/src/faction.c @@ -9,6 +9,7 @@ * */ +#include <string.h> #include "../headers/structure.h" #include "../headers/faction.h" @@ -24,6 +25,105 @@ struct faction typedef struct faction* faction; +/*** Getters & Setters ***/ + +/** + * \brief Implémentation de la fonction get_faction_nom + * \see faction.h + */ +char* get_faction_nom(faction f){ + return f->nom; +}; + +/** + * \brief Implémentation de la fonction get_faction_ptsDDRS + * \see faction.h + */ +unsigned int get_faction_ptsDDRS(faction f){ + return f->ptsDDRS; +}; + +/** + * \brief Implémentation de la fonction get_faction_nbRoundWon + * \see faction.h + */ +unsigned int get_faction_nbRoundWon(faction f){ + return f->nbRoundWon; +}; + +/** + * \brief Implémentation de la fonction get_faction_hand + * \see faction.h + */ +CList get_faction_hand(faction f){ + return f->hand; +}; + +/** + * \brief Implémentation de la fonction get_faction_deck + * \see faction.h + */ +Stack get_faction_deck(faction f){ + return f->deck; +}; + +/** + * \brief Implémentation de la fonction get_faction_hasMulligan + * \see faction.h + */ +bool get_faction_hasMulligan(faction f){ + return f->hasMulligan; +}; + +/** + * \brief Implémentation de la fonction set_faction_nom + * \see faction.h + */ +void set_faction_nom(faction f, char* nom){ + strncpy(f->nom, nom, MAX_LEN); +}; + +/** + * \brief Implémentation de la fonction set_faction_ptsDDRS + * \see faction.h + */ +void set_faction_ptsDDRS(faction f, unsigned int pts){ + f->ptsDDRS = pts; +}; + +/** + * \brief Implémentation de la fonction set_faction_nbRoundWon + * \see faction.h + */ +void set_faction_nbRoundWon(faction f, unsigned int n){ + f->nbRoundWon = n; +}; + +/** + * \brief Implémentation de la fonction set_faction_hand + * \see faction.h + */ +void set_faction_hand(faction f, CList hand){ + f->hand = hand; +}; + +/** + * \brief Implémentation de la fonction set_faction_deck + * \see faction.h + */ +void set_faction_deck(faction f, Stack deck){ + f->deck = deck; +}; + +/** + * \brief Implémentation de la fonction set_faction_hasMulligan + * \see faction.h + */ +void set_faction_hasMulligan(faction f, bool hasMull){ + f->hasMulligan = hasMull; +}; + +/*** Fonction Autres ***/ faction create_faction(){ faction new_faction = malloc(sizeof(struct faction)); -- GitLab From 6d9e83143c78499fb945f297be1a0e67cdab7b2a Mon Sep 17 00:00:00 2001 From: Lucas Desrumeaux <lucas@carjager.com> Date: Tue, 19 Apr 2022 12:33:59 +0200 Subject: [PATCH 088/163] =?UTF-8?q?[B.5]=20Ajout=20des=20impl=C3=A9mentati?= =?UTF-8?q?ons=20des=20setters=20et=20getters=20de=20plateau.h?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- headers/plateau.h | 1 - src/plateau.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 1 deletion(-) diff --git a/headers/plateau.h b/headers/plateau.h index 63f8676..201c429 100644 --- a/headers/plateau.h +++ b/headers/plateau.h @@ -39,7 +39,6 @@ typedef struct cell */ typedef struct board* board; - /*** Getters & Setters ***/ /** diff --git a/src/plateau.c b/src/plateau.c index 93d56b8..d27a3fa 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -14,6 +14,74 @@ struct board typedef struct board* board; +/*** Getters & Setters ***/ + +/** + * \brief Implémentation de la fonction get_cell_card + * \see plateau.h + */ +card get_cell_card(cell oneCell){ + return oneCell.cellCard; +}; + +/** + * \brief Implémentation de la fonction get_cell_state + * \see plateau.h + */ +CellState get_cell_state(cell oneCell){ + return oneCell.state; +}; + +/** + * \brief Implémentation de la fonction get_board_tabBoard + * \see plateau.h + */ +cell* get_board_tabBoard(board b){ + return b->tabBoard; +}; + +/** + * \brief Implémentation de la fonction get_board_cell + * \see plateau.h + */ +cell get_board_cell(board b, int coord){ + b->tabBoard[coord]; +}; + +/** + * \brief Implémentation de la fonction get_board_factions + * \see plateau.h + */ +faction* get_board_factions(board b){ + return b->factions; +}; + +/** + * \brief Implémentation de la fonction set_board_faction + * \see plateau.h + */ +void set_board_faction(board b, faction f, int numFaction){ + b->factions[numFaction] = f; +}; + +/** + * \brief Implémentation de la fonction set_cell_card + * \see plateau.h + */ +void set_cell_card(cell oneCell, card oneCard){ + oneCell.cellCard = oneCard; +}; + +/** + * \brief Implémentation de la fonction set_cell_state + * \see plateau.h + */ +void set_cell_state(cell oneCell, CellState oneState){ + oneCell.state = oneState; +}; + +/*** Fonctions Autres ***/ + board create_new_board() { board new_board = malloc(sizeof(struct board)); -- GitLab From f61ce2fb15b184cf742aeb10999295b058c13c37 Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Wed, 20 Apr 2022 19:16:48 +0200 Subject: [PATCH 089/163] =?UTF-8?q?Tache=20B7=20:=20Ajout=20d'un=20param?= =?UTF-8?q?=C3=A8tre=20suppl=C3=A9mentaire=20de=20type=20int,=20coord,=20p?= =?UTF-8?q?our=20les=20fonctions=20impl=C3=A9mentant=20les=20effets=20des?= =?UTF-8?q?=20cartes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plateau.c | 298 ++++++++++++++++++++++++++++---------------------- 1 file changed, 166 insertions(+), 132 deletions(-) diff --git a/src/plateau.c b/src/plateau.c index d27a3fa..016387f 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -168,207 +168,208 @@ void put_card(board p, card c, int coord) /** - *\fn void card_effect(board p, card c) + *\fn void card_effect(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c sur le plateau p + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, sur le plateau p *\return rien */ -void card_effect(board p, card c) +void card_effect(board p, card c, int coord) { CardType type = get_card_type(c); switch(type) { case FISE : - effect_card_FISE(p, c); + effect_card_FISE(p, c, coord); break; case FISA : - effect_card_FISA(p, c); + effect_card_FISA(p, c, coord); break; case FC : - effect_card_FC(p, c); + effect_card_FC(p, c, coord); break; case EcologIIE : - effect_card_ECOLOGIIE(p, c); + effect_card_ECOLOGIIE(p, c, coord); break; case lIIEns : - effect_card_LIIENS(p, c); + effect_card_LIIENS(p, c, coord); break; case Soiree_sans_alcool : - effect_card_SOIREE_SANS_ALCOOL(p,c); + effect_card_SOIREE_SANS_ALCOOL(p, c, coord); break; case Alcool : - effect_card_ALCOOL(p,c); + effect_card_ALCOOL(p, c, coord); break; case Cafe : - effect_card_CAFE(p, c); + effect_card_CAFE(p, c, coord); break; case The : - effect_card_THE(p,c); + effect_card_THE(p, c, coord); break; case Ecocup : - effect_card_ECOCUP(p,c); + effect_card_ECOCUP(p, c, coord); break; case Reprographie : - effect_card_REPROGRAPHIE(p, c); + effect_card_REPROGRAPHIE(p, c, coord); break; case Isolation_du_batiment : - effect_card_ISOLATION_DU_BATIMENT(p,c); + effect_card_ISOLATION_DU_BATIMENT(p, c), coord; break; case Parcours_sobriete_numerique : - effect_card_PARCOURS_SOBRIETE_NUMERIQUE(p, c); + effect_card_PARCOURS_SOBRIETE_NUMERIQUE(p, c, coord); break; case Heures_supplementaires : - effect_card_HEURES_SUPPLEMENTAIRES(p, c); + effect_card_HEURES_SUPPLEMENTAIRES(p, c, coord); break; case Kahina_Bouchama : - effect_card_KAHINA_BOUCHAMA(p, c); + effect_card_KAHINA_BOUCHAMA(p, c, coord); break; case Kevin_Goilard : - effect_card_KEVIN_GOILARD(p, c); + effect_card_KEVIN_GOILARD(p, c, coord); break; case Massinissa_Merabet : - effect_card_MASSINISSA_MERABET(p, c); + effect_card_MASSINISSA_MERABET(p, c, coord); break; case Vitera_Y : - effect_card_VITERA_Y(p,c); + effect_card_VITERA_Y(p, c, coord); break; case Jonas_Senizergues : - effect_card_JONAS_SENIZERGUES(p, c); + effect_card_JONAS_SENIZERGUES(p, c, coord); break; case Fetia_Bannour : - effect_card_FETIA_BANNOUR(p, c); + effect_card_FETIA_BANNOUR(p, c, coord); break; case Catherine_Dubois : - effect_card_CATHERINE_DUBOIS(p, c); + effect_card_CATHERINE_DUBOIS(p, c, coord); break; case Anne_Laure_Ligozat : - effect_card_ANNE_LAURE_LIGOZAT(p, c); + effect_card_ANNE_LAURE_LIGOZAT(p, c, coord); break; case Guillaume_Burel : - effect_card_GUILLAUME_BUREL(p, c); + effect_card_GUILLAUME_BUREL(p, c, coord); break; case Christophe_Mouilleron : - effect_card_CHRISTOPHE_MOUILLERON(p, c); + effect_card_CHRISTOPHE_MOUILLERON(p, c, coord); break; case Thomas_Lim : - effect_card_THOMAS_LIM(p, c); + effect_card_THOMAS_LIM(p, c, coord); break; case Julien_Forest : - effect_card_JULIEN_FOREST(p, c); + effect_card_JULIEN_FOREST(p, c, coord); break; case Dimitri_Watel : - effect_card_DIMITRI_WATEL(p, c); + effect_card_DIMITRI_WATEL(p, c, coord); break; case Djibril_Aurelien_Dembele_Cabot : - effect_card_DJIBRIL_AURELIEN_DEMBELE_CABOT(p, c); + effect_card_DJIBRIL_AURELIEN_DEMBELE_CABOT(p, c, coord); break; case Eric_Lejeune : - effect_card_ERIC_LEJEUNE(p, c); + effect_card_ERIC_LEJEUNE(p, c, coord); break; case Lucienne_Pacave : - effect_card_LUCIENNE_PACAVE(p, c); + effect_card_LUCIENNE_PACAVE(p, c, coord); break; case Katrin_Salhab : - effect_card_KATRIN_SALHAB(p, c); + effect_card_KATRIN_SALHAB(p, c, coord); break; case Laurent_Prevel : - effect_card_LAURENT_PREVEL(p, c); + effect_card_LAURENT_PREVEL(p, c, coord); break; @@ -381,7 +382,7 @@ card turn_over_card(board p) { card current = ((p->tabBoard[0]).cellCard); int index =0; - while (((p->tabBoard[0]).state == Empty || (p->tabBoard[0]).state == FaceUp) && index < BOARD_SIZE) + while (((p->tabBoard[0]).state == Empty || (p->tabBoard[0]).state == FaceUp) && index < BOARD_SIZE) // normal 0 tout le temps ??? { index += 1; current = (p->tabBoard[index]).cellCard; @@ -510,61 +511,67 @@ card turn_over_card(board p) /** - *\fn void effect_card_FISE(board p, card c) + *\fn void effect_card_FISE(board p, card c, int coord) + *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c de type FISE : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type FISE : * "La faction qui a posé cette carte gagne 1 point DDRS." *\return rien */ -void effect_card_FISE(board p, card c){} +void effect_card_FISE(board p, card c, int coord){} /** - *\fn void effect_card_FISA(board p, card c) + *\fn void effect_card_FISA(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c de type FISA : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type FISA : * "La faction qui a posé cette carte gagne 2 points DDRS si le nombre de cartes retournées sur le plateau (y compris celle-ci) est pair, et 0 sinon." *\return rien */ -void effect_card_FISA(board p, card c){} +void effect_card_FISA(board p, card c, int coord){} /** - *\fn void effect_card_FC(board p, card c) + *\fn void effect_card_FC(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c de type FC : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type FC : * "La faction qui a posé cette carte gagne 4 points DDRS si au moins une autre carte FC est retournée sur le plateau et 0 sinon." *\return rien */ -void effect_card_FC(board p, card c){} +void effect_card_FC(board p, card c, int coord){} /** - *\fn void effect_card_ECOLOGIIE(board p, card c) + *\fn void effect_card_ECOLOGIIE(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c de type EcologIIE : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type EcologIIE : * "La faction qui a posé cette carte gagne 1 point DDRS par carte FISE/FISA/FC retournée." *\return rien */ -void effect_card_ECOLOGIIE(board p, card c){} +void effect_card_ECOLOGIIE(board p, card c, int coord){} /** - *\fn void effect_card_LIIENS(board p, card c) + *\fn void effect_card_LIIENS(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c de type lIIEns : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type lIIEns : * "Prenez toutes les cartes FISE/FISA/FC retournées, retirez les du plateau, mélangez les et * reposez les face cachées une par une sur la gauche de la carte la plus en haut à gauche du plateau, dans cet ordre. * Les prochaines cartes à être retournées sont ces cartes là ." @@ -572,14 +579,15 @@ void effect_card_ECOLOGIIE(board p, card c){} */ -void effect_card_LIIENS(board p, card c){} +void effect_card_LIIENS(board p, card c, int coord){} /** - *\fn void effect_card_SOIREE_SANS_ALCOOL(board p, card c) + *\fn void effect_card_SOIREE_SANS_ALCOOL(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c de type Soirée sans alcool : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Soirée sans alcool : * "Si au moins une carte alcool est retournée, supprimez toutes les cartes FISE/FISA/FC retournées du plateau. * Supprimez ensuite la première et la dernière ligne du plateau. * Sinon la faction qui a posé cette carte gagne 5 points DDRS." @@ -587,187 +595,201 @@ void effect_card_LIIENS(board p, card c){} */ -void effect_card_SOIREE_SANS_ALCOOL(board p, card c){} +void effect_card_SOIREE_SANS_ALCOOL(board p, card c, int coord){} /** - *\fn void effect_card_ALCOOL(board p, card c) + *\fn void effect_card_ALCOOL(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c de type Alcool : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Alcool : * "Supprimez du plateau toutes les cartes qui touchent cette carte-ci (mais laissez la carte Alcool sur le plateau)." *\return rien */ -void effect_card_ALCOOL(board p, card c){} +void effect_card_ALCOOL(board p, card c, int coord){} /** - *\fn void effect_card_CAFE(board p, card c) + *\fn void effect_card_CAFE(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c de type Café : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Café : * "Supprimez toutes les cartes Thé et Alcool retournées sur le plateau. * Si une carte Ecocup est retournée sur le plateau, la faction qui a posé cette carte gagne 1 point DDRS. Sinon elle perd 1 point DDRS." *\return rien */ -void effect_card_CAFE(board p, card c){} +void effect_card_CAFE(board p, card c, int coord){} /** - *\fn void effect_card_THE(board p, card c) + *\fn void effect_card_THE(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c de type Thé : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Thé : * "Supprimez toutes les cartes Café et Alcool retournées sur le plateau. * Si une carte Ecocup est retournée sur le plateau, la faction qui a posé cette carte gagne 1 point DDRS. Sinon elle perd 1 point DDRS." *\return rien */ -void effect_card_THE(board p, card c){} +void effect_card_THE(board p, card c, int coord){} /** - *\fn void effect_card_ECOCUP(board p, card c) + *\fn void effect_card_ECOCUP(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c de type Ecocup : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Ecocup : * "Cette carte est sans effet." *\return rien */ -void effect_card_ECOCUP(board p, card c){} +void effect_card_ECOCUP(board p, card c, int coord){} /** - *\fn void effect_card_REPROGRAPHIE(board p, card c) + *\fn void effect_card_REPROGRAPHIE(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c de type Reprographie : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Reprographie : * "La faction adverse de celle qui a posé cette carte perd 1 points DDRS pour chaque paire de cartes retournées et identiques sur le plateau. * (S'il y a 3 cartes identiques, cela fait 3 paires)." *\return rien */ -void effect_card_REPROGRAPHIE(board p, card c){} +void effect_card_REPROGRAPHIE(board p, card c, int coord){} /** - *\fn void effect_card_ISOLATION_DU_BATIMENT(board p, card c) + *\fn void effect_card_ISOLATION_DU_BATIMENT(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c de type Isolation du bâtiment : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Isolation du bâtiment : * "Chaque faction gagne 1 point DDRS par carte non retournée et non supprimée du plateau qu'elle a posée sur le plateau." *\return rien */ -void effect_card_ISOLATION_DU_BATIMENT(board p, card c){} +void effect_card_ISOLATION_DU_BATIMENT(board p, card c, int coord){} /** - *\fn void effect_card_PARCOURS_SOBRIETE_NUMERIQUE(board p, card c) + *\fn void effect_card_PARCOURS_SOBRIETE_NUMERIQUE(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c de type Sobriété numérique : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Sobriété numérique : * "Retournez toutes les cartes non retournées les plus à gauche et à droite de chaque ligne, sans appliquer leur effet." *\return rien */ -void effect_card_PARCOURS_SOBRIETE_NUMERIQUE(board p, card c){} +void effect_card_PARCOURS_SOBRIETE_NUMERIQUE(board p, card c, int coord){} /** - *\fn void effect_card_HEURES_SUPPLEMENTAIRES(board p, card c) + *\fn void effect_card_HEURES_SUPPLEMENTAIRES(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c de type Heures supplémentaires : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Heures supplémentaires : * "La faction adverse de celle qui a posé cette carte perd 3 points DDRS par carte Heures supplémentaires retournée sur le plateau (y compris celle-ci)." *\return rien */ -void effect_card_HEURES_SUPPLEMENTAIRES(board p, card c){} +void effect_card_HEURES_SUPPLEMENTAIRES(board p, card c, int coord){} /** - *\fn void effect_card_KAHINA_BOUCHAMA(board p, card c) + *\fn void effect_card_KAHINA_BOUCHAMA(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c de type Kahina Bouchama : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Kahina Bouchama : * "Supprimez une carte non retournée du plateau choisie au hasard." *\return rien */ -void effect_card_KAHINA_BOUCHAMA(board p, card c){} +void effect_card_KAHINA_BOUCHAMA(board p, card c, int coord){} /** - *\fn void effect_card_KEVIN_GOILARD(board p, card c) + *\fn void effect_card_KEVIN_GOILARD(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c de type Kevin Goilard : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Kevin Goilard : * "Supprimez une ligne au hasard, la faction qui a posé cette carte gagne 2 points DDRS par carte supprimée ainsi." *\return rien */ -void effect_card_KEVIN_GOILARD(board p, card c){} +void effect_card_KEVIN_GOILARD(board p, card c, int coord){} /** - *\fn void effect_card_MASSINISSA_MERABET(board p, card c) + *\fn void effect_card_MASSINISSA_MERABET(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c de type Massinissa Merabet : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Massinissa Merabet : * "La faction qui a posé cette carte réactive l'effet de la dernière carte retournée avant Massinissa Merabet, * en faisant comme si elle l'avait posée elle-même, même si ce n'est pas le cas." *\return rien */ -void effect_card_MASSINISSA_MERABET(board p, card c){} +void effect_card_MASSINISSA_MERABET(board p, card c, int coord){} /** - *\fn void effect_card_VITERA_Y(board p, card c) + *\fn void effect_card_VITERA_Y(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c de type Vitera y : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Vitera y : * "La faction qui a le moins de points DDRS gagne 3 points DDRS." *\return rien */ -void effect_card_VITERA_Y(board p, card c){} +void effect_card_VITERA_Y(board p, card c, int coord){} /** - *\fn void effect_card_JONAS_SENIZERGUES(board p, card c) + *\fn void effect_card_JONAS_SENIZERGUES(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c de type Jonas Senizergues : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Jonas Senizergues : * "Supprimez toutes les cartes Heures supplémentaires retournées du plateau." *\return rien */ -void effect_card_JONAS_SENIZERGUES(board p, card c){} +void effect_card_JONAS_SENIZERGUES(board p, card c, int coord){} /** - *\fn void effect_card_FETIA_BANNOUR(board p, card c) + *\fn void effect_card_FETIA_BANNOUR(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c de type Fetia Bannour : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Fetia Bannour : * "Si la carte Heures supplémentaires est retournée sur le plateau, * supprimez toutes les cartes de la ligne et de la colonne où est posée cette carte (y compris celle-ci). * Sinon la faction qui a posé cette carte gagne 1 point DDRS par carte Catherine Dubois, Anne-Laure Ligozat, Guillaume Burel, @@ -776,27 +798,29 @@ void effect_card_JONAS_SENIZERGUES(board p, card c){} */ -void effect_card_FETIA_BANNOUR(board p, card c){} +void effect_card_FETIA_BANNOUR(board p, card c, int coord){} /** - *\fn void effect_card_CATHERINE_DUBOIS(board p, card c) + *\fn void effect_card_CATHERINE_DUBOIS(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c de type Catherine Dubois : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Catherine Dubois : * "Supprimez la première et la dernière cartes de la ligne et de la colonne où est posée cette carte." *\return rien */ -void effect_card_CATHERINE_DUBOIS(board p, card c){} +void effect_card_CATHERINE_DUBOIS(board p, card c, int coord){} /** - *\fn void effect_card_ANNE_LAURE_LIGOZAT(board p, card c) + *\fn void effect_card_ANNE_LAURE_LIGOZAT(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c de type Anne-Laure Ligozat : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Anne-Laure Ligozat : * "Pour chaque carte EcologIIE, Ecocup, Isolation du bâtiment et parcours Sobriété numérique retournée, * la faction qui a posé cette carte gagne 3 points DDRS et la dernière carte non retournée du plateau est supprimée. * (L'effet continue même si Anne-Laure Ligozat ou une des 4 cartes précédemment mentionnées est supprimée)." @@ -804,94 +828,101 @@ void effect_card_CATHERINE_DUBOIS(board p, card c){} */ -void effect_card_ANNE_LAURE_LIGOZAT(board p, card c){} +void effect_card_ANNE_LAURE_LIGOZAT(board p, card c, int coord){} /** - *\fn void effect_card_GUILLAUME_BUREL(board p, card c) + *\fn void effect_card_GUILLAUME_BUREL(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c de type Guillaume Burel : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Guillaume Burel : * "Si la faction adverse de celle qui a posé cette carte a plus de points DDRS, la seconde lui vole 3 points DDRS." *\return rien */ -void effect_card_GUILLAUME_BUREL(board p, card c){} +void effect_card_GUILLAUME_BUREL(board p, card c, int coord){} /** - *\fn void effect_card_CHRISTOPHE_MOUILLERON(board p, card c) + *\fn void effect_card_CHRISTOPHE_MOUILLERON(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c de type Christophe Mouilleron : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Christophe Mouilleron : * "Si la carte Heures supplémentaires est retournée sur le plateau, * supprimez toutes les cartes retournées du plateau sauf les cartes Christophe Mouilleron et Heures supplémentaires." *\return rien */ -void effect_card_CHRISTOPHE_MOUILLERON(board p, card c){} +void effect_card_CHRISTOPHE_MOUILLERON(board p, card c, int coord){} /** - *\fn void effect_card_THOMAS_LIM(board p, card c) + *\fn void effect_card_THOMAS_LIM(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c de type Thomas Lim : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Thomas Lim : * "Si Julien Forest n'est par retourné sur le plateau, la faction qui a posé cette carte gagne 3 points DDRS par carte FISE retournée sur le plateau. * Sinon la faction adverse perd 1 point DDRS par carte FISE retournée sur le plateau." *\return rien */ -void effect_card_THOMAS_LIM(board p, card c){} +void effect_card_THOMAS_LIM(board p, card c, int coord){} /** - *\fn void effect_card_JULIEN_FOREST(board p, card c) + *\fn void effect_card_JULIEN_FOREST(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c de type Julien Forest : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Julien Forest : * "La faction qui a posé cette carte gagne 6 points DDRS par carte FISE retournée sur le plateau si au moins une carte Café est retournée sur le plateau." *\return rien */ -void effect_card_JULIEN_FOREST(board p, card c){} +void effect_card_JULIEN_FOREST(board p, card c, int coord){} /** - *\fn void effect_card_DIMITRI_WATEL(board p, card c) + *\fn void effect_card_DIMITRI_WATEL(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c de type Dimitri Watel : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Dimitri Watel : * "La faction qui a posé cette carte gagne 3 points DDRS par carte FISA ou FC retournée sur le plateau si au moins une carte Thé est retournée sur le plateau." *\return rien */ -void effect_card_DIMITRI_WATEL(board p, card c){} +void effect_card_DIMITRI_WATEL(board p, card c, int coord){} /** - *\fn void effect_card_DJIBRIL_AURELIEN_DEMBELE_CABOT(board p, card c) + *\fn void effect_card_DJIBRIL_AURELIEN_DEMBELE_CABOT(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c de type Djibril-Aurélien Dembele-Cabot : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Djibril-Aurélien Dembele-Cabot : * "S'il y a plus de 3 cartes retournées sur la ligne de cette carte, la faction qui a posé cette carte gagne 5 points DDRS." *\return rien */ -void effect_card_DJIBRIL_AURELIEN_DEMBELE_CABOT(board p, card c){} +void effect_card_DJIBRIL_AURELIEN_DEMBELE_CABOT(board p, card c, int coord){} /** - *\fn void effect_card_ERIC_LEJEUNE(board p, card c) + *\fn void effect_card_ERIC_LEJEUNE(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c de type Éric Lejeune : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Éric Lejeune : * "Prenez au hasard 5 cartes retournées du plateau (ou toutes les cartes retournées du plateau s'il y a moins de 5). * Si une de ces cartes est une carte Catherine Dubois, Anne-Laure Ligozat, Guillaume Burel, Christophe Mouilleron, * Thomas Lim, Julien Forest ou Dimitri Watel, mélangez les et placez les à gauche de la case la plus à gauche de la première ligne. @@ -900,27 +931,29 @@ void effect_card_DJIBRIL_AURELIEN_DEMBELE_CABOT(board p, card c){} */ -void effect_card_ERIC_LEJEUNE(board p, card c){} +void effect_card_ERIC_LEJEUNE(board p, card c, int coord){} /** - *\fn void effect_card_LUCIENNE_PACAVE(board p, card c) + *\fn void effect_card_LUCIENNE_PACAVE(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c de type Lucienne Pacave : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Lucienne Pacave : * "S'il y a une carte FISA retournée dans la même ligne ou la même colonne que cette carte, la faction qui a posé cette carte gagne 5 points DDRS." *\return rien */ -void effect_card_LUCIENNE_PACAVE(board p, card c){} +void effect_card_LUCIENNE_PACAVE(board p, card c, int coord){} /** - *\fn void effect_card_KATRIN_SALHAB(board p, card c) + *\fn void effect_card_KATRIN_SALHAB(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c de type Katrin Salhab : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Katrin Salhab : * "Si les cartes Djibril-Aurélien Djembele-Cabeau, Eric Lejeune et Lucienne Pacavé sont retournées, * la faction qui a posé cette carte gagne 10 points DDRS. * Sinon, retournez toutes les cartes dans la même ligne de cette carte sans appliquer leurs effets." @@ -928,18 +961,19 @@ void effect_card_LUCIENNE_PACAVE(board p, card c){} */ -void effect_card_KATRIN_SALHAB(board p, card c){} +void effect_card_KATRIN_SALHAB(board p, card c, int coord){} /** - *\fn void effect_card_LAURENT_PREVEL(board p, card c) + *\fn void effect_card_LAURENT_PREVEL(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c de type Laurent Prével : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Laurent Prével : * "Si Laurent Prével est la dernière carte retournée du plateau, * la faction qui a posé cette carte gagne la manche, quel que soit le nombre de points DDRS des deux factions." *\return rien */ -void effect_card_LAURENT_PREVEL(board p, card c){} +void effect_card_LAURENT_PREVEL(board p, card c, int coord){} -- GitLab From ae9dc6c18f37032e09f9168840a77f6693e78d0e Mon Sep 17 00:00:00 2001 From: Martin Fond <martin.fond@ensiie.fr> Date: Fri, 22 Apr 2022 00:02:58 +0200 Subject: [PATCH 090/163] B.6 Completion de Build_Deck dans faction.c et ajout de l'index comme argument dans l'appel de card effect dans turn_over_card --- src/faction.c | 204 ++++++++++++++++++++++++++++---------------------- src/plateau.c | 10 ++- 2 files changed, 120 insertions(+), 94 deletions(-) diff --git a/src/faction.c b/src/faction.c index 558831e..40c9b38 100644 --- a/src/faction.c +++ b/src/faction.c @@ -191,325 +191,347 @@ bool hand_is_empty(faction fac) void Build_Deck(faction fac, unsigned int nbfac) { int i; - for ( i = 0, i < CardTypeCount, i +=1) + for ( i = 0; i < CardTypeCount; i +=1 ) { switch (i) { case FISE: int index; - for (index = 0, index < 4, index += 1) + for (index = 0; index < 4; index += 1) { card new_card; new_card = build_card(i, 4, "La faction qui a posé cette carte gagne 1 point DDRS.", nbfac); - push(fac.Deck, new_card); + push(fac->deck, new_card); } break; case FISA: int index; - for (index = 0, index < 4, index += 1) + for (index = 0; index < 4; index += 1) { card new_card; new_card = build_card(i, 4, "La faction qui a posé cette carte gagne 2 points DDRS si le nombre de cartes retournées sur le plateau (y compris celle-ci) est pair, et 0 sinon.", nbfac); - push(fac.Deck, new_card); + push(fac->deck, new_card); } break; case FC: int index; - for (index = 0, index < 4, index += 1) + for (index = 0; index < 4; index += 1) { card new_card; new_card = build_card(i, 4, "La faction qui a posé cette carte gagne 4 points DDRS si au moins une autre carte FC est retournée sur le plateau et 0 sinon", nbfac); - push(fac.Deck, new_card); + push(fac->deck, new_card); } break; case EcologIIE: int index; - for (index = 0, index < 2, index += 1) + for (index = 0; index < 2; index += 1) { card new_card; new_card = build_card(i, 2, "La faction qui a posé cette carte gagne 1 point DDRS par carte FISE/FISA/FC retournée.", nbfac); - push(fac.Deck, new_card); + push(fac->deck, new_card); } break; case lIIEns: int index; - for (index = 0, index < 2, index += 1) + for (index = 0; index < 2; index += 1) { card new_card; new_card = build_card(i, 2, "Prenez toutes les cartes FISE/FISA/FC retournées, retirez les du plateau, mélangez les et reposez les face cachées une par une sur la gauche de la carte la plus en haut à gauche du plateau, dans cet ordre. Les prochaines cartes à être retournées sont ces cartes là .", nbfac); - push(fac.Deck, new_card); + push(fac->deck, new_card); } break; case Soiree_sans_alcool: int index; - for (index = 0, index < 1, index += 1) + for (index = 0; index < 1; index += 1) { card new_card; new_card = build_card(i, 1, "Si au moins une carte alcool est retournée, supprimez toutes les cartes FISE/FISA/FC retournées du plateau. Supprimez ensuite la première et la dernière ligne du plateau. Sinon la faction qui a posé cette carte gagne 5 points DDRS.", nbfac); - push(fac.Deck, new_card); + push(fac->deck, new_card); } break; case Alcool: int index; - for (index = 0, index < 1, index += 1) + for (index = 0; index < 1; index += 1) { card new_card; new_card = build_card(i, 1, "Supprimez du plateau toutes les cartes qui touchent cette carte-ci (mais laissez la carte Alcool sur le plateau).", nbfac); - push(fac.Deck, new_card); + push(fac->deck, new_card); } break; case Cafe: int index; - for (index = 0, index < 3, index += 1) + for (index = 0; index < 3; index += 1) { card new_card; new_card = build_card(i, 3, "Supprimez toutes les cartes Thé et Alcool retournées sur le plateau. Si une carte Ecocup est retournée sur le plateau, la faction qui a posé cette carte gagne 1 point DDRS. Sinon elle perd 1 point DDRS.", nbfac); - push(fac.Deck, new_card); + push(fac->deck, new_card); } break; case The: int index; - for (index = 0, index < 3, index += 1) + for (index = 0; index < 3; index += 1) { card new_card; new_card = build_card(i, 3, "Supprimez toutes les cartes Café et Alcool retournées sur le plateau. Si une carte Ecocup est retournée sur le plateau, la faction qui a posé cette carte gagne 1 point DDRS. Sinon elle perd 1 point DDRS.", nbfac); - push(fac.Deck, new_card); + push(fac->deck, new_card); } break; case Ecocup: int index; - for (index = 0, index < 1, index += 1) + for (index = 0; index < 1; index += 1) { card new_card; new_card = build_card(i, 1, "Cette carte est sans effet.", nbfac); - push(fac.Deck, new_card); + push(fac->deck, new_card); } break; case Reprographie: int index; - for (index = 0, index < 1, index += 1) + for (index = 0; index < 1; index += 1) { card new_card; new_card = build_card(i, 1, "La faction adverse de celle qui a posé cette carte perd 1 points DDRS pour chaque paire de cartes retournées et identiques sur le plateau. (S'il y a 3 cartes identiques, cela fait 3 paires).", nbfac); - push(fac.Deck, new_card); + push(fac->deck, new_card); } break; case Isolation_du_batiment: int index; - for (index = 0, index < 1, index += 1) + for (index = 0; index < 1; index += 1) { card new_card; new_card = build_card(i, 1, "Chaque faction gagne 1 point DDRS par carte non retournée et non supprimée du plateau qu'elle a posée sur le plateau.", nbfac); - push(fac.Deck, new_card); + push(fac->deck, new_card); } break; case Parcours_sobriete_numerique: int index; - for (index = 0, index < 1, index += 1) + for (index = 0; index < 1; index += 1) { card new_card; new_card = build_card(i, 1, "Retournez toutes les cartes non retournées les plus à gauche et à droite de chaque ligne, sans appliquer leur effet.", nbfac); - push(fac.Deck, new_card); + push(fac->deck, new_card); } break; - case Heures_Supplementaires: + case Heures_supplementaires: int index; - for (index = 0, index < 1, index += 1) + for (index = 0; index < 1; index += 1) { card new_card; new_card = build_card(i, 1, "La faction adverse de celle qui a posé cette carte perd 3 points DDRS par carte Heures supplémentaires retournée sur le plateau (y compris celle-ci).", nbfac); - push(fac.Deck, new_card); + push(fac->deck, new_card); } break; - case Karine_Bouchama: + case Kahina_Bouchama: int index; - for (index = 0, index < 1, index += 1) + for (index = 0; index < 1; index += 1) { card new_card; new_card = build_card(i, 1, "Supprimez une carte non retournée du plateau choisie au hasard.", nbfac); - push(fac.Deck, new_card); + push(fac->deck, new_card); } break; - case Ecocup: + case Kevin_Goilard: int index; - for (index = 0, index < 4, index += 1) + for (index = 0; index < 1; index += 1) { card new_card; - new_card = build_card(i, 1, "Cette carte est sans effet.", nbfac); - push(fac.Deck, new_card); + new_card = build_card(i, 1, "Supprimez une ligne au hasard, la faction qui a posé cette carte gagne 2 points DDRS par carte supprimée ainsi.", nbfac); + push(fac->deck, new_card); } break; - case Ecocup: + case Massinissa_Merabet: int index; - for (index = 0, index < 4, index += 1) + for (index = 0; index < 1; index += 1) { card new_card; - new_card = build_card(i, 1, "Cette carte est sans effet.", nbfac); - push(fac.Deck, new_card); + new_card = build_card(i, 1, " La faction qui a posé cette carte réactive l'effet de la dernière carte retournée avant Massinissa Merabet, en faisant comme elle l'avait posée elle-même, même si ce n'est pas le cas.", nbfac); + push(fac->deck, new_card); } break; - case Ecocup: + case Vitera_Y: int index; - for (index = 0, index < 4, index += 1) + for (index = 0; index < 1; index += 1) { card new_card; - new_card = build_card(i, 1, "Cette carte est sans effet.", nbfac); - push(fac.Deck, new_card); + new_card = build_card(i, 1, " La faction qui a le moins de points DDRS gagne 3 points DDRS.", nbfac); + push(fac->deck, new_card); } break; - case Ecocup: + case Jonas_Senizergues: int index; - for (index = 0, index < 4, index += 1) + for (index = 0; index < 1; index += 1) { card new_card; new_card = build_card(i, 1, "Cette carte est sans effet.", nbfac); - push(fac.Deck, new_card); + push(fac->deck, new_card); } break; - case Ecocup: + case Fetia_Bannour: int index; - for (index = 0, index < 4, index += 1) + for (index = 0; index < 1; index += 1) { card new_card; new_card = build_card(i, 1, "Cette carte est sans effet.", nbfac); - push(fac.Deck, new_card); + push(fac->deck, new_card); } break; - case Ecocup: + case Catherine_Dubois: int index; - for (index = 0, index < 4, index += 1) + for (index = 0; index < 1; index += 1) { card new_card; - new_card = build_card(i, 1, "Cette carte est sans effet.", nbfac); - push(fac.Deck, new_card); + new_card = build_card(i, 1, "Supprimez la première et la dernière cartes de la ligne et de la colonne où est posée cette carte.", nbfac); + push(fac->deck, new_card); } break; - case Ecocup: + case Anne_Laure_Ligozat: int index; - for (index = 0, index < 4, index += 1) + for (index = 0; index < 1; index += 1) { card new_card; - new_card = build_card(i, 1, "Cette carte est sans effet.", nbfac); - push(fac.Deck, new_card); + new_card = build_card(i, 1, " Pour chaque carte EcologIIE, Ecocup, Isolation du bâtiment et parcours Sobriété numérique retournée, la faction qui a posé cette carte gagne 3 points DDRS et la dernière carte non retournée du plateau est supprimée. (L'effet continue même si Anne-Laure Ligozat ou une des 4 cartes précédemment mentionnées est supprimée).", nbfac); + push(fac->deck, new_card); } break; - case Ecocup: + case Guillaume_Burel: int index; - for (index = 0, index < 4, index += 1) + for (index = 0; index < 1; index += 1) { card new_card; - new_card = build_card(i, 1, "Cette carte est sans effet.", nbfac); - push(fac.Deck, new_card); + new_card = build_card(i, 1, "Si la faction adverse de celle qui a posé cette carte a plus de points DDRS, la seconde lui vole 3 points DDRS.", nbfac); + push(fac->deck, new_card); } break; - case Ecocup: + case Christophe_Mouilleron: int index; - for (index = 0, index < 4, index += 1) + for (index = 0; index < 1; index += 1) { card new_card; - new_card = build_card(i, 1, "Cette carte est sans effet.", nbfac); - push(fac.Deck, new_card); + new_card = build_card(i, 1, "Si la carte Heures supplémentaires est retournée sur le plateau, supprimez toutes les cartes retournées du plateau sauf les cartes Christophe Mouilleron et Heures supplémentaires.", nbfac); + push(fac->deck, new_card); } break; - case Ecocup: + case Thomas_Lim: int index; - for (index = 0, index < 4, index += 1) + for (index = 0; index < 1; index += 1) { card new_card; - new_card = build_card(i, 1, "Cette carte est sans effet.", nbfac); - push(fac.Deck, new_card); + new_card = build_card(i, 1, " Si Julien Forest n'est par retourné sur le plateau, la faction qui a posé cette carte gagne 3 points DDRS par carte FISE retournée sur le plateau. Sinon la faction adverse perd 1 point DDRS par carte FISE retournée sur le plateau.", nbfac); + push(fac->deck, new_card); } break; - case Ecocup: + case Julien_Forest: int index; - for (index = 0, index < 4, index += 1) + for (index = 0; index < 1; index += 1) { card new_card; - new_card = build_card(i, 1, "Cette carte est sans effet.", nbfac); - push(fac.Deck, new_card); + new_card = build_card(i, 1, "La faction qui a posé cette carte gagne 6 points DDRS par carte FISE retournée sur le plateau si au moins une carte Café est retournée sur le plateau.", nbfac); + push(fac->deck, new_card); } break; - case Ecocup: + case Dimitri_Watel: int index; - for (index = 0, index < 4, index += 1) + for (index = 0; index < 1; index += 1) { card new_card; - new_card = build_card(i, 1, "Cette carte est sans effet.", nbfac); - push(fac.Deck, new_card); + new_card = build_card(i, 1, "La faction qui a posé cette carte gagne 3 points DDRS par carte FISA ou FC retournée sur le plateau si au moins une carte Thé est retournée sur le plateau.", nbfac); + push(fac->deck, new_card); } break; - case Ecocup: + case Djibril_Aurelien_Dembele_Cabot: int index; - for (index = 0, index < 4, index += 1) + for (index = 0; index < 1; index += 1) { card new_card; - new_card = build_card(i, 1, "Cette carte est sans effet.", nbfac); - push(fac.Deck, new_card); + new_card = build_card(i, 1, "S'il y a plus de 3 cartes retournées sur la ligne de cette carte, la faction qui a posé cette carte gagne 5 points DDRS.", nbfac); + push(fac->deck, new_card); } break; - case Ecocup: + case Eric_Lejeune: int index; - for (index = 0, index < 4, index += 1) + for (index = 0; index < 1; index += 1) { card new_card; - new_card = build_card(i, 1, "Cette carte est sans effet.", nbfac); - push(fac.Deck, new_card); + new_card = build_card(i, 1, "Prenez au hasard 5 cartes retournées du plateau (ou toutes les cartes retournées du plateau s'il y a moins de 5). Si une de ces cartes est une carte Catherine Dubois, Anne-Laure Ligozat, Guillaume Burel, Christophe Mouilleron, Thomas Lim, Julien Forest ou Dimitri Watel, mélangez les et placez les à gauche de la case la plus à gauche de la première ligne. Les prochaines cartes à être retournées sont ces cartes là . Sinon, supprimez ces cartes du plateau.", nbfac); + push(fac->deck, new_card); } break; - case Ecocup: + case Lucienne_Pacave: int index; - for (index = 0, index < 4, index += 1) + for (index = 0; index < 1; index += 1) { card new_card; - new_card = build_card(i, 1, "Cette carte est sans effet.", nbfac); - push(fac.Deck, new_card); + new_card = build_card(i, 1, "S'il y a une carte FISA retournée dans la même ligne ou la même colonne que cette carte, la faction qui a posé cette carte gagne 5 points DDRS.", nbfac); + push(fac->deck, new_card); } break; + + case Katrin_Salhab: + int index; + for (index = 0; index < 1; index += 1) + { + card new_card; + new_card = build_card(i, 1, "Si les cartes Djibril-Aurélien Djembele-Cabeau, Eric Lejeune et Lucienne Pacavé sont retournées, la faction qui a posé cette carte gagne 10 points DDRS. Sinon, retournez toutes les cartes dans la même ligne de cette carte sans appliquer leurs effets.", nbfac); + push(fac->deck, new_card); + } + break; + + case Laurent_Prevel: + int index; + for (index = 0; index < 1; index += 1) + { + card new_card; + new_card = build_card(i, 1, "Si Laurent Prével est la dernière carte retournée du plateau, la faction qui a posé cette carte gagne la manche, quel que soit le nombre de points DDRS des deux factions.", nbfac); + push(fac->deck, new_card); + } + break; + + } } diff --git a/src/plateau.c b/src/plateau.c index 016387f..599fa59 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -249,7 +249,7 @@ void card_effect(board p, card c, int coord) case Isolation_du_batiment : - effect_card_ISOLATION_DU_BATIMENT(p, c), coord; + effect_card_ISOLATION_DU_BATIMENT(p, c, coord); break; @@ -382,14 +382,18 @@ card turn_over_card(board p) { card current = ((p->tabBoard[0]).cellCard); int index =0; - while (((p->tabBoard[0]).state == Empty || (p->tabBoard[0]).state == FaceUp) && index < BOARD_SIZE) // normal 0 tout le temps ??? + while ( ((p->tabBoard[0]).state == Empty || (p->tabBoard[0]).state == FaceUp) && index < BOARD_SIZE) /* S'arrête quand on tombe sur une carte FaceDown*/ { index += 1; current = (p->tabBoard[index]).cellCard; } + if (index == BOARD_SIZE) + { + return NULL; + } if (current != NULL) { - card_effect(p, current); + card_effect(p, current, index); } return current; } -- GitLab From 49cae5bdf920914eabbb390b32c10fb3f425c9e7 Mon Sep 17 00:00:00 2001 From: Martin Fond <martin.fond@ensiie.fr> Date: Sat, 23 Apr 2022 22:16:25 +0200 Subject: [PATCH 091/163] B.6 Completion de build deck B.6 Completion de build deck B.6 Completion de build deck B.6 Completion de build deck B.6 Completion de build deck B.6 Completion de build deck --- src/faction.c | 34 +--------------------------------- 1 file changed, 1 insertion(+), 33 deletions(-) diff --git a/src/faction.c b/src/faction.c index 40c9b38..a3238df 100644 --- a/src/faction.c +++ b/src/faction.c @@ -193,11 +193,10 @@ void Build_Deck(faction fac, unsigned int nbfac) int i; for ( i = 0; i < CardTypeCount; i +=1 ) { - + int index; switch (i) { case FISE: - int index; for (index = 0; index < 4; index += 1) { card new_card; @@ -207,7 +206,6 @@ void Build_Deck(faction fac, unsigned int nbfac) break; case FISA: - int index; for (index = 0; index < 4; index += 1) { card new_card; @@ -217,7 +215,6 @@ void Build_Deck(faction fac, unsigned int nbfac) break; case FC: - int index; for (index = 0; index < 4; index += 1) { card new_card; @@ -227,7 +224,6 @@ void Build_Deck(faction fac, unsigned int nbfac) break; case EcologIIE: - int index; for (index = 0; index < 2; index += 1) { card new_card; @@ -237,7 +233,6 @@ void Build_Deck(faction fac, unsigned int nbfac) break; case lIIEns: - int index; for (index = 0; index < 2; index += 1) { card new_card; @@ -247,7 +242,6 @@ void Build_Deck(faction fac, unsigned int nbfac) break; case Soiree_sans_alcool: - int index; for (index = 0; index < 1; index += 1) { card new_card; @@ -257,7 +251,6 @@ void Build_Deck(faction fac, unsigned int nbfac) break; case Alcool: - int index; for (index = 0; index < 1; index += 1) { card new_card; @@ -267,7 +260,6 @@ void Build_Deck(faction fac, unsigned int nbfac) break; case Cafe: - int index; for (index = 0; index < 3; index += 1) { card new_card; @@ -277,7 +269,6 @@ void Build_Deck(faction fac, unsigned int nbfac) break; case The: - int index; for (index = 0; index < 3; index += 1) { card new_card; @@ -287,7 +278,6 @@ void Build_Deck(faction fac, unsigned int nbfac) break; case Ecocup: - int index; for (index = 0; index < 1; index += 1) { card new_card; @@ -297,7 +287,6 @@ void Build_Deck(faction fac, unsigned int nbfac) break; case Reprographie: - int index; for (index = 0; index < 1; index += 1) { card new_card; @@ -307,7 +296,6 @@ void Build_Deck(faction fac, unsigned int nbfac) break; case Isolation_du_batiment: - int index; for (index = 0; index < 1; index += 1) { card new_card; @@ -317,7 +305,6 @@ void Build_Deck(faction fac, unsigned int nbfac) break; case Parcours_sobriete_numerique: - int index; for (index = 0; index < 1; index += 1) { card new_card; @@ -328,7 +315,6 @@ void Build_Deck(faction fac, unsigned int nbfac) case Heures_supplementaires: - int index; for (index = 0; index < 1; index += 1) { card new_card; @@ -339,7 +325,6 @@ void Build_Deck(faction fac, unsigned int nbfac) case Kahina_Bouchama: - int index; for (index = 0; index < 1; index += 1) { card new_card; @@ -350,7 +335,6 @@ void Build_Deck(faction fac, unsigned int nbfac) case Kevin_Goilard: - int index; for (index = 0; index < 1; index += 1) { card new_card; @@ -361,7 +345,6 @@ void Build_Deck(faction fac, unsigned int nbfac) case Massinissa_Merabet: - int index; for (index = 0; index < 1; index += 1) { card new_card; @@ -372,7 +355,6 @@ void Build_Deck(faction fac, unsigned int nbfac) case Vitera_Y: - int index; for (index = 0; index < 1; index += 1) { card new_card; @@ -383,7 +365,6 @@ void Build_Deck(faction fac, unsigned int nbfac) case Jonas_Senizergues: - int index; for (index = 0; index < 1; index += 1) { card new_card; @@ -394,7 +375,6 @@ void Build_Deck(faction fac, unsigned int nbfac) case Fetia_Bannour: - int index; for (index = 0; index < 1; index += 1) { card new_card; @@ -405,7 +385,6 @@ void Build_Deck(faction fac, unsigned int nbfac) case Catherine_Dubois: - int index; for (index = 0; index < 1; index += 1) { card new_card; @@ -416,7 +395,6 @@ void Build_Deck(faction fac, unsigned int nbfac) case Anne_Laure_Ligozat: - int index; for (index = 0; index < 1; index += 1) { card new_card; @@ -426,7 +404,6 @@ void Build_Deck(faction fac, unsigned int nbfac) break; case Guillaume_Burel: - int index; for (index = 0; index < 1; index += 1) { card new_card; @@ -437,7 +414,6 @@ void Build_Deck(faction fac, unsigned int nbfac) case Christophe_Mouilleron: - int index; for (index = 0; index < 1; index += 1) { card new_card; @@ -448,7 +424,6 @@ void Build_Deck(faction fac, unsigned int nbfac) case Thomas_Lim: - int index; for (index = 0; index < 1; index += 1) { card new_card; @@ -459,7 +434,6 @@ void Build_Deck(faction fac, unsigned int nbfac) case Julien_Forest: - int index; for (index = 0; index < 1; index += 1) { card new_card; @@ -469,7 +443,6 @@ void Build_Deck(faction fac, unsigned int nbfac) break; case Dimitri_Watel: - int index; for (index = 0; index < 1; index += 1) { card new_card; @@ -480,7 +453,6 @@ void Build_Deck(faction fac, unsigned int nbfac) case Djibril_Aurelien_Dembele_Cabot: - int index; for (index = 0; index < 1; index += 1) { card new_card; @@ -491,7 +463,6 @@ void Build_Deck(faction fac, unsigned int nbfac) case Eric_Lejeune: - int index; for (index = 0; index < 1; index += 1) { card new_card; @@ -502,7 +473,6 @@ void Build_Deck(faction fac, unsigned int nbfac) case Lucienne_Pacave: - int index; for (index = 0; index < 1; index += 1) { card new_card; @@ -512,7 +482,6 @@ void Build_Deck(faction fac, unsigned int nbfac) break; case Katrin_Salhab: - int index; for (index = 0; index < 1; index += 1) { card new_card; @@ -522,7 +491,6 @@ void Build_Deck(faction fac, unsigned int nbfac) break; case Laurent_Prevel: - int index; for (index = 0; index < 1; index += 1) { card new_card; -- GitLab From 168d093200253386d61e879003649da7911c3497 Mon Sep 17 00:00:00 2001 From: Martin Fond <martin.fond@ensiie.fr> Date: Sun, 24 Apr 2022 19:37:41 +0200 Subject: [PATCH 092/163] B.6 Completion de la liberation du plateau --- src/faction.c | 6 ++++-- src/plateau.c | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/faction.c b/src/faction.c index a3238df..c0b94ff 100644 --- a/src/faction.c +++ b/src/faction.c @@ -136,8 +136,8 @@ faction create_faction(){ } void delete_faction(faction fac_to_del){ - free(fac_to_del->hand); - free(fac_to_del->deck); + free_CList(&fac_to_del->hand); + free_stack(fac_to_del->deck); free(fac_to_del); } @@ -499,6 +499,8 @@ void Build_Deck(faction fac, unsigned int nbfac) } break; + default : break; + } diff --git a/src/plateau.c b/src/plateau.c index 599fa59..76c4a4b 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -9,7 +9,7 @@ struct board { struct cell tabBoard[BOARD_SIZE * BOARD_SIZE]; - faction factions[2]; + faction factions[2]; /* Première faction : 0; Seconde faction : 1 */ }; typedef struct board* board; @@ -373,7 +373,7 @@ void card_effect(board p, card c, int coord) break; - default; + default : break; } return; } -- GitLab From 0168a45de34d2daafde1d9bc68efb752d3dbc888 Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Sun, 24 Apr 2022 19:39:04 +0200 Subject: [PATCH 093/163] =?UTF-8?q?Tache=20B.7=20:=20impl=C3=A9mentations?= =?UTF-8?q?=20de=20la=20fonction=20enemy=5Ffaction,=20des=20premi=C3=A8res?= =?UTF-8?q?=20fonctions=20permettant=20d'activer=20une=20carte=20(de=20typ?= =?UTF-8?q?e=20FISE,=20FISA,=20FC,=20EcologIIE,=20et=20lIIEns);=20ajout=20?= =?UTF-8?q?et=20modifications=20des=20fichiers=20inclus=20dans=20plateau.c?= =?UTF-8?q?=20et=20plateau.h?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- headers/plateau.h | 7 +- src/plateau.c | 374 ++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 346 insertions(+), 35 deletions(-) diff --git a/headers/plateau.h b/headers/plateau.h index 201c429..19b885e 100644 --- a/headers/plateau.h +++ b/headers/plateau.h @@ -11,9 +11,10 @@ #ifndef PLATEAU_H #define PLATEAU_H -#include "carte.h" -#include "faction.h" -#include "structure.h" +#include "../headers/plateau.h" +#include "../headers/faction.h" +#include "../headers/carte.h" +#include "../headers/structure.h" #define WIN_NUMBER 2 diff --git a/src/plateau.c b/src/plateau.c index 599fa59..4a7f386 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -1,6 +1,7 @@ #include "../headers/plateau.h" #include "../headers/faction.h" #include "../headers/carte.h" +#include "../headers/structure.h" /** @@ -513,6 +514,27 @@ card turn_over_card(board p) /*** LES EFFETS DES CARTES (32 cartes) ***/ +/** + *\fn faction enemy_faction(board p, int num_faction_owner) + *\param p de type board + *\param num_faction_owner de type int + *\brief Fonction renvoyant la faction ennemie de la faction ayant pour numéro num_faction_owner (0 ou 1) + Si num_faction_owner == 0, alors la faction ayant ce numéro est la faction p->factions[num_faction_owner] + et sa faction ennemie est la faction p->factions[1-num_faction_owner] + Si num_faction_owner == 1, alors la faction ayant ce numéro est la faction p->factions[num_faction_owner] + et sa faction ennemie est la faction p->factions[1-num_faction_owner] + *\return la faction ennemie de la faction ayant pour numéro num_faction_owner + */ + + +faction enemy_faction(board p, int num_faction_owner) +{ + return (p->factions[1-num_faction_owner]); +} + + + + /** *\fn void effect_card_FISE(board p, card c, int coord) @@ -525,7 +547,17 @@ card turn_over_card(board p) */ -void effect_card_FISE(board p, card c, int coord){} +void effect_card_FISE(board p, card c, int coord) +{ + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); + + set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs+1); +} + + + /** @@ -539,7 +571,30 @@ void effect_card_FISE(board p, card c, int coord){} */ -void effect_card_FISA(board p, card c, int coord){} +void effect_card_FISA(board p, card c, int coord) +{ + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); + + + int count_card = 0; // count_card compte le nombre de cartes retournées sur le plateau + for (int i = 0; i <= coord; i++) + { + if ((p->tabBoard[i]).state == FaceUp) + { + count_card ++; + } + } + if (!(count_card % 2)) // dans ce cas, il y a un nombre pair de cartes retournées sur le plateau + { + set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + 2); + + } +} + + + /** @@ -553,7 +608,38 @@ void effect_card_FISA(board p, card c, int coord){} */ -void effect_card_FC(board p, card c, int coord){} +void effect_card_FC(board p, card c, int coord) +{ + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); + + + int i = 0; + int count_FC = 0; // count_FC compte le nombre de cartes de type FC retournées sur le plateau + CardType t1 = get_card_type(c); // t1 : type de la carte c dont on active l'effet + Cardtype t2; // t2 : type de la carte courrante retournée de la boucle while + while (i < coord && !count_FC) + { + if ((p->tabBoard[i]).state == FaceUp) + { + t2 = get_card_type((p->tabBoard[i]).cellCard); + if (t1 == t2) + { + count_FC ++; + } + } + i++; + } + + if (count_FC) // si count_FC != 0 alors count_FC == true + { + set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + 4); + } +} + + + /** @@ -567,7 +653,35 @@ void effect_card_FC(board p, card c, int coord){} */ -void effect_card_ECOLOGIIE(board p, card c, int coord){} +void effect_card_ECOLOGIIE(board p, card c, int coord) +{ + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); + + + int count_card = 0; // count_card compte le nombre de cartes retournées de type FISE, FISA ou FC sur le plateau + Cardtype t; // t : type de la carte courrante retournée de la boucle for + for (int i = 0; i < coord; i++) + { + if ((p->tabBoard[i]).state == FaceUp) + { + t = get_card_type((p->tabBoard[i]).cellCard); + if (t == FISE || t == FISA || t == FC ) + { + count_card ++; + } + } + } + + if (count_card) // si count_card != 0 alors count_card == true + { + set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + count_card); + } +} + + + /** @@ -583,7 +697,41 @@ void effect_card_ECOLOGIIE(board p, card c, int coord){} */ -void effect_card_LIIENS(board p, card c, int coord){} +void effect_card_LIIENS(board p, card c, int coord) +{ + Stack card_FISE_FISA_FC = empty_stack(); // card_FISE_FISA_FC représente le paquet de cartes de type FISE, FISA, ou FC qui étaient retournées sur le plateau, et qu'on a retirées du plateau + + + Cardtype t; // t : type de la carte courrante retournée de la boucle for + + for (int i = 0; i < coord; i++) // Tout d'abord, on retire les cartes de type FISE, FISA, ou FC retournées, et on les ajoute dans card_FISE_FISA_FC + { + if ((p->tabBoard[i]).state == FaceUp) + { + card current_card = (p->tabBoard[i]).cellCard; + t = get_card_type(current_card); + + if (t == FISE || t == FISA || t == FC ) + { + push(card_FISE_FISA_FC, current_card); + (p->tabBoard[i]).state = Empty; + } + } + } + + shuffle_stack(card_FISE_FISA_FC); // Ensuite, on mélange card_FISE_FISA_FC + int i = 0; + + while ( !(is_stack_empty(card_FISE_FISA_FC)) ) // Enfin, on place les cartes de card_FISE_FISA_FC tout en haut à gauche du plateau, dans le même ordre que l'ordre des cartes que l'on retire de card_FISE_FISA_FC + { + (p->tabBoard[i]).state = FaceDown; + (p->tabBoard[i]).cellCard = pop(card_FISE_FISA_FC); + i++; + } +} + + + /** @@ -599,7 +747,13 @@ void effect_card_LIIENS(board p, card c, int coord){} */ -void effect_card_SOIREE_SANS_ALCOOL(board p, card c, int coord){} +void effect_card_SOIREE_SANS_ALCOOL(board p, card c, int coord) +{ + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + faction faction_enemy = enemy_faction(p, num_faction_owner); + +} /** @@ -613,7 +767,13 @@ void effect_card_SOIREE_SANS_ALCOOL(board p, card c, int coord){} */ -void effect_card_ALCOOL(board p, card c, int coord){} +void effect_card_ALCOOL(board p, card c, int coord) +{ + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + faction faction_enemy = enemy_faction(p, num_faction_owner); + +} /** @@ -628,7 +788,13 @@ void effect_card_ALCOOL(board p, card c, int coord){} */ -void effect_card_CAFE(board p, card c, int coord){} +void effect_card_CAFE(board p, card c, int coord) +{ + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + faction faction_enemy = enemy_faction(p, num_faction_owner); + +} /** @@ -643,7 +809,13 @@ void effect_card_CAFE(board p, card c, int coord){} */ -void effect_card_THE(board p, card c, int coord){} +void effect_card_THE(board p, card c, int coord) +{ + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + faction faction_enemy = enemy_faction(p, num_faction_owner); + +} /** @@ -657,7 +829,13 @@ void effect_card_THE(board p, card c, int coord){} */ -void effect_card_ECOCUP(board p, card c, int coord){} +void effect_card_ECOCUP(board p, card c, int coord) +{ + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + faction faction_enemy = enemy_faction(p, num_faction_owner); + +} /** @@ -672,7 +850,13 @@ void effect_card_ECOCUP(board p, card c, int coord){} */ -void effect_card_REPROGRAPHIE(board p, card c, int coord){} +void effect_card_REPROGRAPHIE(board p, card c, int coord) +{ + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + faction faction_enemy = enemy_faction(p, num_faction_owner); + +} /** @@ -686,7 +870,13 @@ void effect_card_REPROGRAPHIE(board p, card c, int coord){} */ -void effect_card_ISOLATION_DU_BATIMENT(board p, card c, int coord){} +void effect_card_ISOLATION_DU_BATIMENT(board p, card c, int coord) +{ + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + faction faction_enemy = enemy_faction(p, num_faction_owner); + +} /** @@ -700,7 +890,13 @@ void effect_card_ISOLATION_DU_BATIMENT(board p, card c, int coord){} */ -void effect_card_PARCOURS_SOBRIETE_NUMERIQUE(board p, card c, int coord){} +void effect_card_PARCOURS_SOBRIETE_NUMERIQUE(board p, card c, int coord) +{ + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + faction faction_enemy = enemy_faction(p, num_faction_owner); + +} /** @@ -714,7 +910,13 @@ void effect_card_PARCOURS_SOBRIETE_NUMERIQUE(board p, card c, int coord){} */ -void effect_card_HEURES_SUPPLEMENTAIRES(board p, card c, int coord){} +void effect_card_HEURES_SUPPLEMENTAIRES(board p, card c, int coord) +{ + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + faction faction_enemy = enemy_faction(p, num_faction_owner); + +} /** @@ -728,7 +930,13 @@ void effect_card_HEURES_SUPPLEMENTAIRES(board p, card c, int coord){} */ -void effect_card_KAHINA_BOUCHAMA(board p, card c, int coord){} +void effect_card_KAHINA_BOUCHAMA(board p, card c, int coord) +{ + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + faction faction_enemy = enemy_faction(p, num_faction_owner); + +} /** @@ -742,7 +950,13 @@ void effect_card_KAHINA_BOUCHAMA(board p, card c, int coord){} */ -void effect_card_KEVIN_GOILARD(board p, card c, int coord){} +void effect_card_KEVIN_GOILARD(board p, card c, int coord) +{ + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + faction faction_enemy = enemy_faction(p, num_faction_owner); + +} /** @@ -757,7 +971,13 @@ void effect_card_KEVIN_GOILARD(board p, card c, int coord){} */ -void effect_card_MASSINISSA_MERABET(board p, card c, int coord){} +void effect_card_MASSINISSA_MERABET(board p, card c, int coord) +{ + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + faction faction_enemy = enemy_faction(p, num_faction_owner); + +} /** @@ -771,7 +991,13 @@ void effect_card_MASSINISSA_MERABET(board p, card c, int coord){} */ -void effect_card_VITERA_Y(board p, card c, int coord){} +void effect_card_VITERA_Y(board p, card c, int coord) +{ + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + faction faction_enemy = enemy_faction(p, num_faction_owner); + +} /** @@ -785,7 +1011,13 @@ void effect_card_VITERA_Y(board p, card c, int coord){} */ -void effect_card_JONAS_SENIZERGUES(board p, card c, int coord){} +void effect_card_JONAS_SENIZERGUES(board p, card c, int coord) +{ + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + faction faction_enemy = enemy_faction(p, num_faction_owner); + +} /** @@ -802,7 +1034,13 @@ void effect_card_JONAS_SENIZERGUES(board p, card c, int coord){} */ -void effect_card_FETIA_BANNOUR(board p, card c, int coord){} +void effect_card_FETIA_BANNOUR(board p, card c, int coord) +{ + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + faction faction_enemy = enemy_faction(p, num_faction_owner); + +} /** @@ -816,7 +1054,13 @@ void effect_card_FETIA_BANNOUR(board p, card c, int coord){} */ -void effect_card_CATHERINE_DUBOIS(board p, card c, int coord){} +void effect_card_CATHERINE_DUBOIS(board p, card c, int coord) +{ + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + faction faction_enemy = enemy_faction(p, num_faction_owner); + +} /** @@ -832,7 +1076,13 @@ void effect_card_CATHERINE_DUBOIS(board p, card c, int coord){} */ -void effect_card_ANNE_LAURE_LIGOZAT(board p, card c, int coord){} +void effect_card_ANNE_LAURE_LIGOZAT(board p, card c, int coord) +{ + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + faction faction_enemy = enemy_faction(p, num_faction_owner); + +} /** @@ -846,7 +1096,13 @@ void effect_card_ANNE_LAURE_LIGOZAT(board p, card c, int coord){} */ -void effect_card_GUILLAUME_BUREL(board p, card c, int coord){} +void effect_card_GUILLAUME_BUREL(board p, card c, int coord) +{ + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + faction faction_enemy = enemy_faction(p, num_faction_owner); + +} /** @@ -861,7 +1117,13 @@ void effect_card_GUILLAUME_BUREL(board p, card c, int coord){} */ -void effect_card_CHRISTOPHE_MOUILLERON(board p, card c, int coord){} +void effect_card_CHRISTOPHE_MOUILLERON(board p, card c, int coord) +{ + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + faction faction_enemy = enemy_faction(p, num_faction_owner); + +} /** @@ -876,7 +1138,13 @@ void effect_card_CHRISTOPHE_MOUILLERON(board p, card c, int coord){} */ -void effect_card_THOMAS_LIM(board p, card c, int coord){} +void effect_card_THOMAS_LIM(board p, card c, int coord) +{ + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + faction faction_enemy = enemy_faction(p, num_faction_owner); + +} /** @@ -890,7 +1158,13 @@ void effect_card_THOMAS_LIM(board p, card c, int coord){} */ -void effect_card_JULIEN_FOREST(board p, card c, int coord){} +void effect_card_JULIEN_FOREST(board p, card c, int coord) +{ + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + faction faction_enemy = enemy_faction(p, num_faction_owner); + +} /** @@ -904,7 +1178,13 @@ void effect_card_JULIEN_FOREST(board p, card c, int coord){} */ -void effect_card_DIMITRI_WATEL(board p, card c, int coord){} +void effect_card_DIMITRI_WATEL(board p, card c, int coord) +{ + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + faction faction_enemy = enemy_faction(p, num_faction_owner); + +} /** @@ -918,7 +1198,13 @@ void effect_card_DIMITRI_WATEL(board p, card c, int coord){} */ -void effect_card_DJIBRIL_AURELIEN_DEMBELE_CABOT(board p, card c, int coord){} +void effect_card_DJIBRIL_AURELIEN_DEMBELE_CABOT(board p, card c, int coord) +{ + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + faction faction_enemy = enemy_faction(p, num_faction_owner); + +} /** @@ -935,7 +1221,13 @@ void effect_card_DJIBRIL_AURELIEN_DEMBELE_CABOT(board p, card c, int coord){} */ -void effect_card_ERIC_LEJEUNE(board p, card c, int coord){} +void effect_card_ERIC_LEJEUNE(board p, card c, int coord) +{ + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + faction faction_enemy = enemy_faction(p, num_faction_owner); + +} /** @@ -949,7 +1241,13 @@ void effect_card_ERIC_LEJEUNE(board p, card c, int coord){} */ -void effect_card_LUCIENNE_PACAVE(board p, card c, int coord){} +void effect_card_LUCIENNE_PACAVE(board p, card c, int coord) +{ + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + faction faction_enemy = enemy_faction(p, num_faction_owner); + +} /** @@ -965,7 +1263,13 @@ void effect_card_LUCIENNE_PACAVE(board p, card c, int coord){} */ -void effect_card_KATRIN_SALHAB(board p, card c, int coord){} +void effect_card_KATRIN_SALHAB(board p, card c, int coord) +{ + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + faction faction_enemy = enemy_faction(p, num_faction_owner); + +} /** @@ -980,4 +1284,10 @@ void effect_card_KATRIN_SALHAB(board p, card c, int coord){} */ -void effect_card_LAURENT_PREVEL(board p, card c, int coord){} +void effect_card_LAURENT_PREVEL(board p, card c, int coord) +{ + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + faction faction_enemy = enemy_faction(p, num_faction_owner); + +} -- GitLab From 8717863989933108ebfa92e62a76a97bd344f17f Mon Sep 17 00:00:00 2001 From: Martin Fond <martin.fond@ensiie.fr> Date: Sun, 24 Apr 2022 19:39:46 +0200 Subject: [PATCH 094/163] Lot B modif pour eviter conflict --- src/plateau.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plateau.c b/src/plateau.c index 76c4a4b..07e4414 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -373,7 +373,7 @@ void card_effect(board p, card c, int coord) break; - default : break; + default; } return; } -- GitLab From 5bcad841d6c724bf5ed42887cb3470d509efc879 Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Sun, 24 Apr 2022 19:51:52 +0200 Subject: [PATCH 095/163] Tache B.7 : correction de messages d'erreur --- src/plateau.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/plateau.c b/src/plateau.c index 3f77bc4..34f77ce 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -374,7 +374,7 @@ void card_effect(board p, card c, int coord) break; - default; + default: ; } return; } @@ -618,7 +618,7 @@ void effect_card_FC(board p, card c, int coord) int i = 0; int count_FC = 0; // count_FC compte le nombre de cartes de type FC retournées sur le plateau CardType t1 = get_card_type(c); // t1 : type de la carte c dont on active l'effet - Cardtype t2; // t2 : type de la carte courrante retournée de la boucle while + CardType t2; // t2 : type de la carte courrante retournée de la boucle while while (i < coord && !count_FC) { if ((p->tabBoard[i]).state == FaceUp) @@ -661,7 +661,7 @@ void effect_card_ECOLOGIIE(board p, card c, int coord) int count_card = 0; // count_card compte le nombre de cartes retournées de type FISE, FISA ou FC sur le plateau - Cardtype t; // t : type de la carte courrante retournée de la boucle for + CardType t; // t : type de la carte courrante retournée de la boucle for for (int i = 0; i < coord; i++) { if ((p->tabBoard[i]).state == FaceUp) @@ -702,7 +702,7 @@ void effect_card_LIIENS(board p, card c, int coord) Stack card_FISE_FISA_FC = empty_stack(); // card_FISE_FISA_FC représente le paquet de cartes de type FISE, FISA, ou FC qui étaient retournées sur le plateau, et qu'on a retirées du plateau - Cardtype t; // t : type de la carte courrante retournée de la boucle for + CardType t; // t : type de la carte courrante retournée de la boucle for for (int i = 0; i < coord; i++) // Tout d'abord, on retire les cartes de type FISE, FISA, ou FC retournées, et on les ajoute dans card_FISE_FISA_FC { -- GitLab From abbe4656a600c0fd86ebcbaf310c459f9eeb45ed Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Mon, 25 Apr 2022 15:40:19 +0200 Subject: [PATCH 096/163] =?UTF-8?q?Tache=20B.7=20:=20impl=C3=A9mentation?= =?UTF-8?q?=20des=20fonctions=20effect=5Fcard=5FALCOOL()=20et=20effect=5Fc?= =?UTF-8?q?ard=5FSOIREE=5FSANS=5FALCOOL()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plateau.c | 201 ++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 185 insertions(+), 16 deletions(-) diff --git a/src/plateau.c b/src/plateau.c index 34f77ce..c2c9051 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -586,7 +586,7 @@ void effect_card_FISA(board p, card c, int coord) count_card ++; } } - if (!(count_card % 2)) // dans ce cas, il y a un nombre pair de cartes retournées sur le plateau + if (!(count_card % 2)) // Dans ce cas, il y a un nombre pair de cartes retournées sur le plateau { set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + 2); @@ -618,7 +618,7 @@ void effect_card_FC(board p, card c, int coord) int i = 0; int count_FC = 0; // count_FC compte le nombre de cartes de type FC retournées sur le plateau CardType t1 = get_card_type(c); // t1 : type de la carte c dont on active l'effet - CardType t2; // t2 : type de la carte courrante retournée de la boucle while + CardType t2; // t2 : type de la carte courante retournée de la boucle while while (i < coord && !count_FC) { if ((p->tabBoard[i]).state == FaceUp) @@ -661,7 +661,7 @@ void effect_card_ECOLOGIIE(board p, card c, int coord) int count_card = 0; // count_card compte le nombre de cartes retournées de type FISE, FISA ou FC sur le plateau - CardType t; // t : type de la carte courrante retournée de la boucle for + CardType t; // t : type de la carte courante retournée de la boucle for for (int i = 0; i < coord; i++) { if ((p->tabBoard[i]).state == FaceUp) @@ -702,7 +702,7 @@ void effect_card_LIIENS(board p, card c, int coord) Stack card_FISE_FISA_FC = empty_stack(); // card_FISE_FISA_FC représente le paquet de cartes de type FISE, FISA, ou FC qui étaient retournées sur le plateau, et qu'on a retirées du plateau - CardType t; // t : type de la carte courrante retournée de la boucle for + CardType t; // t : type de la carte courante retournée de la boucle for for (int i = 0; i < coord; i++) // Tout d'abord, on retire les cartes de type FISE, FISA, ou FC retournées, et on les ajoute dans card_FISE_FISA_FC { @@ -714,7 +714,7 @@ void effect_card_LIIENS(board p, card c, int coord) if (t == FISE || t == FISA || t == FC ) { push(card_FISE_FISA_FC, current_card); - (p->tabBoard[i]).state = Empty; + (p->tabBoard[i]).state = Empty; // Pas besoin de préciser que (p->tabBoard[i]).cellCard = NULL, car l'information de (p->tabBoard[i]).state est suffisante pour le déroulement de la partie } } } @@ -724,8 +724,11 @@ void effect_card_LIIENS(board p, card c, int coord) while ( !(is_stack_empty(card_FISE_FISA_FC)) ) // Enfin, on place les cartes de card_FISE_FISA_FC tout en haut à gauche du plateau, dans le même ordre que l'ordre des cartes que l'on retire de card_FISE_FISA_FC { - (p->tabBoard[i]).state = FaceDown; - (p->tabBoard[i]).cellCard = pop(card_FISE_FISA_FC); + if ( (p->tabBoard[i]).state == Empty ) // Tout en haut à gauche du plateau, soit il y a des cartes déjà retournées, soit il n'y a pas de cartes sur certains emplacements. De plus, comme les cartes que l'on retire du plateau se trouvent avant la carte de type lIIEns dont l'effet est en train de s'effectuer, avant cette carte, et donc avant les prochaines cartes faces cachées, il y a suffisamment d'emplacements pour les cartes de types FISE, FC ou FISA afin qu'elles soient les prochaines cartes à être retournées + { + (p->tabBoard[i]).state = FaceDown; + (p->tabBoard[i]).cellCard = pop(card_FISE_FISA_FC); + } i++; } } @@ -751,11 +754,107 @@ void effect_card_SOIREE_SANS_ALCOOL(board p, card c, int coord) { int num_faction_owner = get_card_factionOwner(c); faction faction_owner = p->factions[num_faction_owner]; - faction faction_enemy = enemy_faction(p, num_faction_owner); + int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); + + + int i = 0; + int count_alcool = 0; // count_alcool compte le nombre de cartes de type ALCOOL retournées sur le plateau + CardType t; // t : type de la carte courante retournée de la boucle while + + while (i < coord && !count_alcool) // On vérifie tout d'abord si il y a au moins une cartes de type alcool retournée sur le plateau + { + if ((p->tabBoard[i]).state == FaceUp) + { + t = get_card_type((p->tabBoard[i]).cellCard); + if (t == Alcool) + { + count_alcool ++; + } + } + i++; + } + + if (count_alcool) // si count_alcool != 0 alors count_alcool == true; et donc on supprime toutes les cartes de type FISE, FISA ou FC retournée sur le plateau; et on supprime la première et la dernière ligne + { + for (int j = 0; j < coord; j++) // Suppression des cartes de type FISE, FISA ou FC retournée sur le plateau + { + if ((p->tabBoard[j]).state == FaceUp) + { + t = get_card_type((p->tabBoard[j]).cellCard); // Ici : t est le type de la carte courante de la boucle for + if (t == FISE || t == FISA || t == FC) + { + (p->tabBoard[j]).state == Empty; + } + } + } + + + + // Suppression de la première et de la dernière ligne + + int k = -1; // k : ligne à suprimer + int indicator = 0; // indicator indique si il y a au moins une carte sur la ligne numéro k + + while (k < BOARD_SIZE - 1 && !indicator) // Détermination de la première ligne où il y a des cartes + { + k++; + + int j = 0; + while ( j < BOARD_SIZE && !indicator) // En 2 dimension, les coordonnées de la carte courante de la boucle while se trouvant en dessous sont : k, j ( kième ligne, jième colonne) + { + if ((p->tabBoard[k*BOARD_SIZE + j]).state == FaceUp || (p->tabBoard[k*BOARD_SIZE + j]).state == FaceDown ) + { + indicator ++; + } + j++; + } + } + + for (int j = 0; j < BOARD_SIZE; j++) // Suppression de la kième ligne, correspondant à la première ligne où il y a des cartes + { + (p->tabBoard[k*BOARD_SIZE + j]).state == Empty + } + + + // De la même façon, mais pour supprimer la dernière ligne + + int k = BOARD_SIZE; // k : ligne à suprimer + int indicator = 0; // indicator indique si il y a au moins une carte sur la ligne numéro k + + while (k > 0 && !indicator) // Détermination de la dernière ligne où il y a des cartes + { + k--; + + int j = 0; + while ( j < BOARD_SIZE && !indicator) // En 2 dimension, les coordonnées de la carte courante de la boucle while se trouvant en dessous sont : k, j ( kième ligne, jième colonne) + { + if ((p->tabBoard[k*BOARD_SIZE + j]).state == FaceUp || (p->tabBoard[k*BOARD_SIZE + j]).state == FaceDown ) + { + indicator ++; + } + j++; + } + } + + for (int j = 0; j < BOARD_SIZE; j++) // Suppression de la kième ligne, correspondant à la dernière ligne où il y a des cartes + { + (p->tabBoard[k*BOARD_SIZE + j]).state == Empty + } + + } + + + else // sinon, faction_owner gagne 5 points DDRS + { + set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + 5); + } } + + + /** *\fn void effect_card_ALCOOL(board p, card c, int coord) *\param p de type board @@ -769,13 +868,85 @@ void effect_card_SOIREE_SANS_ALCOOL(board p, card c, int coord) void effect_card_ALCOOL(board p, card c, int coord) { - int num_faction_owner = get_card_factionOwner(c); - faction faction_owner = p->factions[num_faction_owner]; - faction faction_enemy = enemy_faction(p, num_faction_owner); + // En 2 dimensions, si c a pour coordonnées x (xième ligne), y (yième colonne), alors : coord = x*BOARD_SIZE + y + + int x = coord/BOARD_SIZE; // car y/BOARD_SIZE == 0 car y < BOARD_SIZE et y est un entier + + int y = coord - x*BOARD_SIZE; + + + // Premier cas : si la carte c se situe sur un des coins du plateau + + if (x == 0 && y == 0) + { + (p->tabBoard[x*BOARD_SIZE + y + 1]).state == Empty; + (p->tabBoard[(x+1)*BOARD_SIZE + y]).state == Empty; + } + else if (x == 0 && y == BOARD_SIZE - 1) + { + (p->tabBoard[x*BOARD_SIZE + y - 1]).state == Empty; + (p->tabBoard[(x+1)*BOARD_SIZE + y]).state == Empty; + } + + else if (x == BOARD_SIZE - 1 && y == 0) + { + (p->tabBoard[x*BOARD_SIZE + y + 1]).state == Empty; + (p->tabBoard[(x-1)*BOARD_SIZE + y]).state == Empty; + } + + else if (x == BOARD_SIZE - 1 && y == BOARD_SIZE - 1) + { + (p->tabBoard[x*BOARD_SIZE + y - 1]).state == Empty; + (p->tabBoard[(x-1)*BOARD_SIZE + y]).state == Empty; + } + + // Deuxième cas : si la carte c se situe sur la première ligne, sur la dernière ligne, sur la première colonne ou sur la dernière colonne du plateau + + else if (x == 0) + { + (p->tabBoard[x*BOARD_SIZE + y + 1]).state == Empty; + (p->tabBoard[x*BOARD_SIZE + y - 1]).state == Empty; + (p->tabBoard[(x+1)*BOARD_SIZE + y]).state == Empty; + + } + + else if (x == BOARD_SIZE - 1) + { + (p->tabBoard[x*BOARD_SIZE + y + 1]).state == Empty; + (p->tabBoard[x*BOARD_SIZE + y - 1]).state == Empty; + (p->tabBoard[(x-1)*BOARD_SIZE + y]).state == Empty; + } + + else if (y == 0) + { + (p->tabBoard[(x-1)*BOARD_SIZE + y]).state == Empty; + (p->tabBoard[(x+1)*BOARD_SIZE + y]).state == Empty; + (p->tabBoard[x*BOARD_SIZE + y + 1]).state == Empty; + } + + else if (y == BOARD_SIZE - 1) + { + (p->tabBoard[(x-1)*BOARD_SIZE + y]).state == Empty; + (p->tabBoard[(x+1)*BOARD_SIZE + y]).state == Empty; + (p->tabBoard[x*BOARD_SIZE + y - 1]).state == Empty; + } + + // Troisème cas : la carte ne se situe pas sur le bord du plateau + + else + { + (p->tabBoard[x*BOARD_SIZE + y + 1]).state == Empty; + (p->tabBoard[x*BOARD_SIZE + y - 1]).state == Empty; + (p->tabBoard[(x-1)*BOARD_SIZE + y]).state == Empty; + (p->tabBoard[(x+1)*BOARD_SIZE + y]).state == Empty; + } } + + + /** *\fn void effect_card_CAFE(board p, card c, int coord) *\param p de type board @@ -830,12 +1001,10 @@ void effect_card_THE(board p, card c, int coord) void effect_card_ECOCUP(board p, card c, int coord) -{ - int num_faction_owner = get_card_factionOwner(c); - faction faction_owner = p->factions[num_faction_owner]; - faction faction_enemy = enemy_faction(p, num_faction_owner); +{} + + -} /** -- GitLab From 20bb0c4a464b667a76f68fb9cb93f342466624cd Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Mon, 25 Apr 2022 16:01:42 +0200 Subject: [PATCH 097/163] =?UTF-8?q?Tache=20B.7=20:=20correction=20d'erreur?= =?UTF-8?q?s=20de=20syntaxes=20sur=20effect=5Fcard=5FALCOOL()=20et=20effec?= =?UTF-8?q?t=5Fcard=5FSOIREE=5FSANS=5FALCOOL();=20impl=C3=A9mentation=20de?= =?UTF-8?q?s=20fonctions=20effect=5Fcard=5FTHE()=20et=20effect=5Fcard=5FCA?= =?UTF-8?q?FE()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plateau.c | 123 ++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 94 insertions(+), 29 deletions(-) diff --git a/src/plateau.c b/src/plateau.c index c2c9051..a45284a 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -783,7 +783,7 @@ void effect_card_SOIREE_SANS_ALCOOL(board p, card c, int coord) t = get_card_type((p->tabBoard[j]).cellCard); // Ici : t est le type de la carte courante de la boucle for if (t == FISE || t == FISA || t == FC) { - (p->tabBoard[j]).state == Empty; + (p->tabBoard[j]).state = Empty; } } } @@ -812,7 +812,7 @@ void effect_card_SOIREE_SANS_ALCOOL(board p, card c, int coord) for (int j = 0; j < BOARD_SIZE; j++) // Suppression de la kième ligne, correspondant à la première ligne où il y a des cartes { - (p->tabBoard[k*BOARD_SIZE + j]).state == Empty + (p->tabBoard[k*BOARD_SIZE + j]).state = Empty; } @@ -838,7 +838,7 @@ void effect_card_SOIREE_SANS_ALCOOL(board p, card c, int coord) for (int j = 0; j < BOARD_SIZE; j++) // Suppression de la kième ligne, correspondant à la dernière ligne où il y a des cartes { - (p->tabBoard[k*BOARD_SIZE + j]).state == Empty + (p->tabBoard[k*BOARD_SIZE + j]).state = Empty; } } @@ -879,67 +879,67 @@ void effect_card_ALCOOL(board p, card c, int coord) if (x == 0 && y == 0) { - (p->tabBoard[x*BOARD_SIZE + y + 1]).state == Empty; - (p->tabBoard[(x+1)*BOARD_SIZE + y]).state == Empty; + (p->tabBoard[x*BOARD_SIZE + y + 1]).state = Empty; + (p->tabBoard[(x+1)*BOARD_SIZE + y]).state = Empty; } else if (x == 0 && y == BOARD_SIZE - 1) { - (p->tabBoard[x*BOARD_SIZE + y - 1]).state == Empty; - (p->tabBoard[(x+1)*BOARD_SIZE + y]).state == Empty; + (p->tabBoard[x*BOARD_SIZE + y - 1]).state = Empty; + (p->tabBoard[(x+1)*BOARD_SIZE + y]).state = Empty; } else if (x == BOARD_SIZE - 1 && y == 0) { - (p->tabBoard[x*BOARD_SIZE + y + 1]).state == Empty; - (p->tabBoard[(x-1)*BOARD_SIZE + y]).state == Empty; + (p->tabBoard[x*BOARD_SIZE + y + 1]).state = Empty; + (p->tabBoard[(x-1)*BOARD_SIZE + y]).state = Empty; } else if (x == BOARD_SIZE - 1 && y == BOARD_SIZE - 1) { - (p->tabBoard[x*BOARD_SIZE + y - 1]).state == Empty; - (p->tabBoard[(x-1)*BOARD_SIZE + y]).state == Empty; + (p->tabBoard[x*BOARD_SIZE + y - 1]).state = Empty; + (p->tabBoard[(x-1)*BOARD_SIZE + y]).state = Empty; } // Deuxième cas : si la carte c se situe sur la première ligne, sur la dernière ligne, sur la première colonne ou sur la dernière colonne du plateau else if (x == 0) { - (p->tabBoard[x*BOARD_SIZE + y + 1]).state == Empty; - (p->tabBoard[x*BOARD_SIZE + y - 1]).state == Empty; - (p->tabBoard[(x+1)*BOARD_SIZE + y]).state == Empty; + (p->tabBoard[x*BOARD_SIZE + y + 1]).state = Empty; + (p->tabBoard[x*BOARD_SIZE + y - 1]).state = Empty; + (p->tabBoard[(x+1)*BOARD_SIZE + y]).state = Empty; } else if (x == BOARD_SIZE - 1) { - (p->tabBoard[x*BOARD_SIZE + y + 1]).state == Empty; - (p->tabBoard[x*BOARD_SIZE + y - 1]).state == Empty; - (p->tabBoard[(x-1)*BOARD_SIZE + y]).state == Empty; + (p->tabBoard[x*BOARD_SIZE + y + 1]).state = Empty; + (p->tabBoard[x*BOARD_SIZE + y - 1]).state = Empty; + (p->tabBoard[(x-1)*BOARD_SIZE + y]).state = Empty; } else if (y == 0) { - (p->tabBoard[(x-1)*BOARD_SIZE + y]).state == Empty; - (p->tabBoard[(x+1)*BOARD_SIZE + y]).state == Empty; - (p->tabBoard[x*BOARD_SIZE + y + 1]).state == Empty; + (p->tabBoard[(x-1)*BOARD_SIZE + y]).state = Empty; + (p->tabBoard[(x+1)*BOARD_SIZE + y]).state = Empty; + (p->tabBoard[x*BOARD_SIZE + y + 1]).state = Empty; } else if (y == BOARD_SIZE - 1) { - (p->tabBoard[(x-1)*BOARD_SIZE + y]).state == Empty; - (p->tabBoard[(x+1)*BOARD_SIZE + y]).state == Empty; - (p->tabBoard[x*BOARD_SIZE + y - 1]).state == Empty; + (p->tabBoard[(x-1)*BOARD_SIZE + y]).state = Empty; + (p->tabBoard[(x+1)*BOARD_SIZE + y]).state = Empty; + (p->tabBoard[x*BOARD_SIZE + y - 1]).state = Empty; } // Troisème cas : la carte ne se situe pas sur le bord du plateau else { - (p->tabBoard[x*BOARD_SIZE + y + 1]).state == Empty; - (p->tabBoard[x*BOARD_SIZE + y - 1]).state == Empty; - (p->tabBoard[(x-1)*BOARD_SIZE + y]).state == Empty; - (p->tabBoard[(x+1)*BOARD_SIZE + y]).state == Empty; + (p->tabBoard[x*BOARD_SIZE + y + 1]).state = Empty; + (p->tabBoard[x*BOARD_SIZE + y - 1]).state = Empty; + (p->tabBoard[(x-1)*BOARD_SIZE + y]).state = Empty; + (p->tabBoard[(x+1)*BOARD_SIZE + y]).state = Empty; } } @@ -963,11 +963,43 @@ void effect_card_CAFE(board p, card c, int coord) { int num_faction_owner = get_card_factionOwner(c); faction faction_owner = p->factions[num_faction_owner]; - faction faction_enemy = enemy_faction(p, num_faction_owner); + int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); + + int count_ecocup = 0; // count_ecocup compte le nombre de cartes de type Ecocup retournées sur le plateau + CardType t; // t : type de la carte courante retournée de la boucle for + + for (int i = 0; i < coord; i++) + { + if ((p->tabBoard[i]).state == FaceUp) + { + t = get_card_type((p->tabBoard[i]).cellCard); + if (t == Alcool || t == The) + { + (p->tabBoard[i]).state = Empty; + } + if (t == Ecocup) + { + count_ecocup++; + } + } + } + + if (count_ecocup) // Si count_ecocup != 0 alors count_ecocup == true + { + set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + 1); + } + + else + { + set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs - 1); + } } + + + /** *\fn void effect_card_THE(board p, card c, int coord) *\param p de type board @@ -984,11 +1016,44 @@ void effect_card_THE(board p, card c, int coord) { int num_faction_owner = get_card_factionOwner(c); faction faction_owner = p->factions[num_faction_owner]; - faction faction_enemy = enemy_faction(p, num_faction_owner); + int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); + + int count_ecocup = 0; // count_ecocup compte le nombre de cartes de type Ecocup retournées sur le plateau + CardType t; // t : type de la carte courante retournée de la boucle for + + for (int i = 0; i < coord; i++) + { + if ((p->tabBoard[i]).state == FaceUp) + { + t = get_card_type((p->tabBoard[i]).cellCard); + if (t == Alcool || t == Cafe) + { + (p->tabBoard[i]).state = Empty; + } + + if (t == Ecocup) + { + count_ecocup++; + } + } + } + + if (count_ecocup) // Si count_ecocup != 0 alors count_ecocup == true + { + set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + 1); + } + + else + { + set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs - 1); + } } + + + /** *\fn void effect_card_ECOCUP(board p, card c, int coord) *\param p de type board -- GitLab From b4d3e84ab3160245eec397ed638ceed0970faadf Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Mon, 25 Apr 2022 18:14:06 +0200 Subject: [PATCH 098/163] =?UTF-8?q?Tache=20B.7=20:=20impl=C3=A9mentation?= =?UTF-8?q?=20d'une=20fonction=20auxiliaire=20binom(),=20et=20de=20la=20fo?= =?UTF-8?q?nction=20effect=5Fcard=5FREPROGRAPHIE()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plateau.c | 75 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 73 insertions(+), 2 deletions(-) diff --git a/src/plateau.c b/src/plateau.c index a45284a..4d3ccef 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -790,7 +790,7 @@ void effect_card_SOIREE_SANS_ALCOOL(board p, card c, int coord) - // Suppression de la première et de la dernière ligne + // Suppression de la première et de la dernière ligne du plateau int k = -1; // k : ligne à suprimer int indicator = 0; // indicator indique si il y a au moins une carte sur la ligne numéro k @@ -1072,6 +1072,47 @@ void effect_card_ECOCUP(board p, card c, int coord) +/** + *\fn int binom(int k, int n) + *\param k de type int + *\param n de type int + *\brief Fonction permettant de calculer la valeur du coefficient binomial k parmi n (ou combinaison de k parmi n), égal à : (n!)/( (k!) * ((n-k)!) ) + *\return la valeur du coefficient binomial : k parmi n + */ + +int binom(int k, int n) +{ + int denominator = 1; + int numerator = 1; + + if (n < k) + { + return(0); + } + + if (n == k) + { + return(1); + } + + for (int i = k+1; i <= n; i++) // numerator == (n!)/(k!) + { + numerator *= i; + } + + for (int i = 2; i <= (n-k); i++) // denominator == (n-k)! + { + denominator *= i; + } + + return(numerator/denominator); + +} + + + + + /** *\fn void effect_card_REPROGRAPHIE(board p, card c, int coord) *\param p de type board @@ -1087,12 +1128,42 @@ void effect_card_ECOCUP(board p, card c, int coord) void effect_card_REPROGRAPHIE(board p, card c, int coord) { int num_faction_owner = get_card_factionOwner(c); - faction faction_owner = p->factions[num_faction_owner]; faction faction_enemy = enemy_faction(p, num_faction_owner); + int f_enemy_ptsddrs = get_faction_ptsDDRS(faction_enemy); + + int tab[32]; // tab[i] contiendra le nombre de cartes ayant le type numéro i retournées sur le plateau + + for (int i = 0; i < 32; i++) // Initialisation de tab, afin que tous ses éléments soient égaux à 0 + { + tab[i] = 0; + } + + CardType t; // t : type de la carte courante retournée de la boucle for + for (int i = 0; i < coord; i++) // On détermine le nombre d'occurrences de chaque carte qui est retournée sur le plateau + { + if ((p->tabBoard[i]).state == FaceUp) + { + t = get_card_type((p->tabBoard[i]).cellCard); + tab[t] += 1; + } + } + + + int count = 0; // count contiendra le nombre de points DDRS à retirerde la faction adverse + + for (int i = 0; i < 32; i++) + { + count += binom(2, tab[i]); + } + + set_faction_ptsDDRS(faction_enemy, f_enemy_ptsddrs - count); } + + + /** *\fn void effect_card_ISOLATION_DU_BATIMENT(board p, card c, int coord) *\param p de type board -- GitLab From c0c49119345c44c3e7aaa282a83745402a64cd08 Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Mon, 25 Apr 2022 20:40:22 +0200 Subject: [PATCH 099/163] =?UTF-8?q?Tache=20B.7=20:=20impl=C3=A9mentation?= =?UTF-8?q?=20des=20fonctions=20effect=5Fcard=5FISOLATION=5FDU=5FBATIMENT(?= =?UTF-8?q?),=20affect=5Fcard=5FPARCOURS=5FSOBRIETE=5FNUMERIQUE(),=20et=20?= =?UTF-8?q?effect=5Fcard=5FHEURES=5FSUPPLEMENTAIRES();=20modifications=20d?= =?UTF-8?q?e=20commentaires,=20de=20param=C3=A8tres=20de=20certaines=20fon?= =?UTF-8?q?ctions=20et=20de=20types=20de=20certaines=20variables=5F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plateau.c | 303 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 202 insertions(+), 101 deletions(-) diff --git a/src/plateau.c b/src/plateau.c index 4d3ccef..69335c4 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -184,7 +184,7 @@ void card_effect(board p, card c, int coord) switch(type) { case FISE : - effect_card_FISE(p, c, coord); + effect_card_FISE(p, c); break; @@ -208,7 +208,7 @@ void card_effect(board p, card c, int coord) case lIIEns : - effect_card_LIIENS(p, c, coord); + effect_card_LIIENS(p, coord); break; @@ -220,7 +220,7 @@ void card_effect(board p, card c, int coord) case Alcool : - effect_card_ALCOOL(p, c, coord); + effect_card_ALCOOL(p, coord); break; @@ -238,7 +238,7 @@ void card_effect(board p, card c, int coord) case Ecocup : - effect_card_ECOCUP(p, c, coord); + effect_card_ECOCUP(); break; @@ -256,7 +256,7 @@ void card_effect(board p, card c, int coord) case Parcours_sobriete_numerique : - effect_card_PARCOURS_SOBRIETE_NUMERIQUE(p, c, coord); + effect_card_PARCOURS_SOBRIETE_NUMERIQUE(p); break; @@ -268,7 +268,7 @@ void card_effect(board p, card c, int coord) case Kahina_Bouchama : - effect_card_KAHINA_BOUCHAMA(p, c, coord); + effect_card_KAHINA_BOUCHAMA(p, coord); break; @@ -523,7 +523,7 @@ card turn_over_card(board p) et sa faction ennemie est la faction p->factions[1-num_faction_owner] Si num_faction_owner == 1, alors la faction ayant ce numéro est la faction p->factions[num_faction_owner] et sa faction ennemie est la faction p->factions[1-num_faction_owner] - *\return la faction ennemie de la faction ayant pour numéro num_faction_owner + *\return la faction ennemie de la faction ayant pour numéro num_faction_owner, du plateau p */ @@ -537,17 +537,16 @@ faction enemy_faction(board p, int num_faction_owner) /** - *\fn void effect_card_FISE(board p, card c, int coord) + *\fn void effect_card_FISE(board p, card c) *\param p de type board *\param c de type card - *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type FISE : + *\brief Procédure qui active l'effet d'une carte c, de type FISE, sur le plateau p : * "La faction qui a posé cette carte gagne 1 point DDRS." *\return rien */ -void effect_card_FISE(board p, card c, int coord) +void effect_card_FISE(board p, card c) { int num_faction_owner = get_card_factionOwner(c); faction faction_owner = p->factions[num_faction_owner]; @@ -565,7 +564,7 @@ void effect_card_FISE(board p, card c, int coord) *\param p de type board *\param c de type card *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type FISA : + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type FISA, sur le plateau p : * "La faction qui a posé cette carte gagne 2 points DDRS si le nombre de cartes retournées sur le plateau (y compris celle-ci) est pair, et 0 sinon." *\return rien */ @@ -573,9 +572,9 @@ void effect_card_FISE(board p, card c, int coord) void effect_card_FISA(board p, card c, int coord) { - int num_faction_owner = get_card_factionOwner(c); - faction faction_owner = p->factions[num_faction_owner]; - int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); + int num_faction_owner = get_card_factionOwner(c); // num_faction_owner représente le numéro (0 ou 1) de la faction possédant la carte c venant d'être retournée + faction faction_owner = p->factions[num_faction_owner]; // faction_owner représente la faction possédant la carte c venant d'être retournée + int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); // f_owner_ptsddrs représente les points de faction_owner int count_card = 0; // count_card compte le nombre de cartes retournées sur le plateau @@ -602,7 +601,7 @@ void effect_card_FISA(board p, card c, int coord) *\param p de type board *\param c de type card *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type FC : + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type FC, sur le plateau p : * "La faction qui a posé cette carte gagne 4 points DDRS si au moins une autre carte FC est retournée sur le plateau et 0 sinon." *\return rien */ @@ -616,23 +615,23 @@ void effect_card_FC(board p, card c, int coord) int i = 0; - int count_FC = 0; // count_FC compte le nombre de cartes de type FC retournées sur le plateau + bool ind_FC = false; // ind_FC indique si il y a au moins une carte de type FC retournée sur le plateau CardType t1 = get_card_type(c); // t1 : type de la carte c dont on active l'effet CardType t2; // t2 : type de la carte courante retournée de la boucle while - while (i < coord && !count_FC) + while (i < coord && !ind_FC) { if ((p->tabBoard[i]).state == FaceUp) { t2 = get_card_type((p->tabBoard[i]).cellCard); if (t1 == t2) { - count_FC ++; + ind_FC = true; } } i++; } - if (count_FC) // si count_FC != 0 alors count_FC == true + if (ind_FC) // Si ind_FC == true { set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + 4); } @@ -647,7 +646,7 @@ void effect_card_FC(board p, card c, int coord) *\param p de type board *\param c de type card *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type EcologIIE : + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type EcologIIE, sur le plateau p : * "La faction qui a posé cette carte gagne 1 point DDRS par carte FISE/FISA/FC retournée." *\return rien */ @@ -674,7 +673,7 @@ void effect_card_ECOLOGIIE(board p, card c, int coord) } } - if (count_card) // si count_card != 0 alors count_card == true + if (count_card) // Si count_card != 0 alors count_card == true { set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + count_card); } @@ -685,11 +684,10 @@ void effect_card_ECOLOGIIE(board p, card c, int coord) /** - *\fn void effect_card_LIIENS(board p, card c, int coord) + *\fn void effect_card_LIIENS(board p, int coord) *\param p de type board - *\param c de type card *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type lIIEns : + *\brief Procédure qui active l'effet d'une carte, de coordonnée 1D coord, de type lIIEns, sur le plateau p : * "Prenez toutes les cartes FISE/FISA/FC retournées, retirez les du plateau, mélangez les et * reposez les face cachées une par une sur la gauche de la carte la plus en haut à gauche du plateau, dans cet ordre. * Les prochaines cartes à être retournées sont ces cartes là ." @@ -697,7 +695,7 @@ void effect_card_ECOLOGIIE(board p, card c, int coord) */ -void effect_card_LIIENS(board p, card c, int coord) +void effect_card_LIIENS(board p, int coord) { Stack card_FISE_FISA_FC = empty_stack(); // card_FISE_FISA_FC représente le paquet de cartes de type FISE, FISA, ou FC qui étaient retournées sur le plateau, et qu'on a retirées du plateau @@ -742,7 +740,7 @@ void effect_card_LIIENS(board p, card c, int coord) *\param p de type board *\param c de type card *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Soirée sans alcool : + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Soirée sans alcool, sur le plateau p : * "Si au moins une carte alcool est retournée, supprimez toutes les cartes FISE/FISA/FC retournées du plateau. * Supprimez ensuite la première et la dernière ligne du plateau. * Sinon la faction qui a posé cette carte gagne 5 points DDRS." @@ -758,23 +756,23 @@ void effect_card_SOIREE_SANS_ALCOOL(board p, card c, int coord) int i = 0; - int count_alcool = 0; // count_alcool compte le nombre de cartes de type ALCOOL retournées sur le plateau + bool ind_alcool = false; // ind_alcool indique si il y a au moins une carte de type ALCOOL retournée sur le plateau CardType t; // t : type de la carte courante retournée de la boucle while - while (i < coord && !count_alcool) // On vérifie tout d'abord si il y a au moins une cartes de type alcool retournée sur le plateau + while (i < coord && !ind_alcool) // On vérifie tout d'abord si il y a au moins une cartes de type alcool retournée sur le plateau { if ((p->tabBoard[i]).state == FaceUp) { t = get_card_type((p->tabBoard[i]).cellCard); if (t == Alcool) { - count_alcool ++; + ind_alcool = true; } } i++; } - if (count_alcool) // si count_alcool != 0 alors count_alcool == true; et donc on supprime toutes les cartes de type FISE, FISA ou FC retournée sur le plateau; et on supprime la première et la dernière ligne + if (ind_alcool) // Si ind_alcool == true, on supprime toutes les cartes de type FISE, FISA ou FC retournée sur le plateau; et on supprime la première et la dernière ligne { for (int j = 0; j < coord; j++) // Suppression des cartes de type FISE, FISA ou FC retournée sur le plateau { @@ -789,11 +787,12 @@ void effect_card_SOIREE_SANS_ALCOOL(board p, card c, int coord) } - // Suppression de la première et de la dernière ligne du plateau + // Suppression de la première ligne du plateau + int k = -1; // k : ligne à suprimer - int indicator = 0; // indicator indique si il y a au moins une carte sur la ligne numéro k + bool indicator = false; // indicator indique si il y a au moins une carte sur la ligne numéro k while (k < BOARD_SIZE - 1 && !indicator) // Détermination de la première ligne où il y a des cartes { @@ -804,7 +803,7 @@ void effect_card_SOIREE_SANS_ALCOOL(board p, card c, int coord) { if ((p->tabBoard[k*BOARD_SIZE + j]).state == FaceUp || (p->tabBoard[k*BOARD_SIZE + j]).state == FaceDown ) { - indicator ++; + indicator = true; } j++; } @@ -816,10 +815,11 @@ void effect_card_SOIREE_SANS_ALCOOL(board p, card c, int coord) } - // De la même façon, mais pour supprimer la dernière ligne + // supression de la dernière ligne du plateau - int k = BOARD_SIZE; // k : ligne à suprimer - int indicator = 0; // indicator indique si il y a au moins une carte sur la ligne numéro k + + k = BOARD_SIZE; // k : ligne à suprimer + indicator = false; // indicator indique si il y a au moins une carte sur la ligne numéro k while (k > 0 && !indicator) // Détermination de la dernière ligne où il y a des cartes { @@ -828,9 +828,9 @@ void effect_card_SOIREE_SANS_ALCOOL(board p, card c, int coord) int j = 0; while ( j < BOARD_SIZE && !indicator) // En 2 dimension, les coordonnées de la carte courante de la boucle while se trouvant en dessous sont : k, j ( kième ligne, jième colonne) { - if ((p->tabBoard[k*BOARD_SIZE + j]).state == FaceUp || (p->tabBoard[k*BOARD_SIZE + j]).state == FaceDown ) + if ((p->tabBoard[k*BOARD_SIZE + j]).state != Empty) { - indicator ++; + indicator = true; } j++; } @@ -856,17 +856,16 @@ void effect_card_SOIREE_SANS_ALCOOL(board p, card c, int coord) /** - *\fn void effect_card_ALCOOL(board p, card c, int coord) + *\fn void effect_card_ALCOOL(board p, int coord) *\param p de type board - *\param c de type card *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Alcool : + *\brief Procédure qui active l'effet d'une carte, de coordonnée 1D coord, de type Alcool, sur le plateau p : * "Supprimez du plateau toutes les cartes qui touchent cette carte-ci (mais laissez la carte Alcool sur le plateau)." *\return rien */ -void effect_card_ALCOOL(board p, card c, int coord) +void effect_card_ALCOOL(board p, int coord) { // En 2 dimensions, si c a pour coordonnées x (xième ligne), y (yième colonne), alors : coord = x*BOARD_SIZE + y @@ -952,7 +951,7 @@ void effect_card_ALCOOL(board p, card c, int coord) *\param p de type board *\param c de type card *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Café : + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Café, sur le plateau p : * "Supprimez toutes les cartes Thé et Alcool retournées sur le plateau. * Si une carte Ecocup est retournée sur le plateau, la faction qui a posé cette carte gagne 1 point DDRS. Sinon elle perd 1 point DDRS." *\return rien @@ -965,7 +964,7 @@ void effect_card_CAFE(board p, card c, int coord) faction faction_owner = p->factions[num_faction_owner]; int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); - int count_ecocup = 0; // count_ecocup compte le nombre de cartes de type Ecocup retournées sur le plateau + bool ind_ecocup = false; // ind_ecocup indique si il y a au moins une carte de type Ecocup retournée sur le plateau CardType t; // t : type de la carte courante retournée de la boucle for for (int i = 0; i < coord; i++) @@ -980,12 +979,12 @@ void effect_card_CAFE(board p, card c, int coord) if (t == Ecocup) { - count_ecocup++; + ind_ecocup = true; } } } - if (count_ecocup) // Si count_ecocup != 0 alors count_ecocup == true + if (ind_ecocup) // Si ind_ecocup == true { set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + 1); } @@ -1005,7 +1004,7 @@ void effect_card_CAFE(board p, card c, int coord) *\param p de type board *\param c de type card *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Thé : + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Thé, sur le plateau p : * "Supprimez toutes les cartes Café et Alcool retournées sur le plateau. * Si une carte Ecocup est retournée sur le plateau, la faction qui a posé cette carte gagne 1 point DDRS. Sinon elle perd 1 point DDRS." *\return rien @@ -1018,7 +1017,7 @@ void effect_card_THE(board p, card c, int coord) faction faction_owner = p->factions[num_faction_owner]; int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); - int count_ecocup = 0; // count_ecocup compte le nombre de cartes de type Ecocup retournées sur le plateau + bool ind_ecocup = false; // ind_ecocup indique si il y a au moins une carte de type Ecocup retournée sur le plateau CardType t; // t : type de la carte courante retournée de la boucle for for (int i = 0; i < coord; i++) @@ -1033,12 +1032,12 @@ void effect_card_THE(board p, card c, int coord) if (t == Ecocup) { - count_ecocup++; + ind_ecocup = true; } } } - if (count_ecocup) // Si count_ecocup != 0 alors count_ecocup == true + if (ind_ecocup) // Si ind_ecocup == true { set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + 1); } @@ -1055,17 +1054,14 @@ void effect_card_THE(board p, card c, int coord) /** - *\fn void effect_card_ECOCUP(board p, card c, int coord) - *\param p de type board - *\param c de type card - *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Ecocup : + *\fn void effect_card_ECOCUP() + *\brief Procédure qui active l'effet d'une carte de type Ecocup : * "Cette carte est sans effet." *\return rien */ -void effect_card_ECOCUP(board p, card c, int coord) +void effect_card_ECOCUP() {} @@ -1118,7 +1114,7 @@ int binom(int k, int n) *\param p de type board *\param c de type card *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Reprographie : + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Reprographie, sur le plateau p : * "La faction adverse de celle qui a posé cette carte perd 1 points DDRS pour chaque paire de cartes retournées et identiques sur le plateau. * (S'il y a 3 cartes identiques, cela fait 3 paires)." *\return rien @@ -1129,11 +1125,11 @@ void effect_card_REPROGRAPHIE(board p, card c, int coord) { int num_faction_owner = get_card_factionOwner(c); faction faction_enemy = enemy_faction(p, num_faction_owner); - int f_enemy_ptsddrs = get_faction_ptsDDRS(faction_enemy); + int f_enemy_ptsddrs = get_faction_ptsDDRS(faction_enemy); // f_enemy_ptsddrs représente les points de la faction ennemie de faction_owner - int tab[32]; // tab[i] contiendra le nombre de cartes ayant le type numéro i retournées sur le plateau + int tab[CardTypeCount]; // tab[i] contiendra le nombre de cartes ayant le type numéro i retournées sur le plateau - for (int i = 0; i < 32; i++) // Initialisation de tab, afin que tous ses éléments soient égaux à 0 + for (int i = 0; i < CardTypeCount; i++) // Initialisation de tab, afin que tous ses éléments soient égaux à 0 { tab[i] = 0; } @@ -1148,16 +1144,17 @@ void effect_card_REPROGRAPHIE(board p, card c, int coord) } } + int count = 0; // count contiendra le nombre de points DDRS à retirer de la faction adverse - int count = 0; // count contiendra le nombre de points DDRS à retirerde la faction adverse - - for (int i = 0; i < 32; i++) + for (int i = 0; i < CardTypeCount; i++) { count += binom(2, tab[i]); } - set_faction_ptsDDRS(faction_enemy, f_enemy_ptsddrs - count); - + if (count) + { + set_faction_ptsDDRS(faction_enemy, f_enemy_ptsddrs - count); + } } @@ -1169,7 +1166,7 @@ void effect_card_REPROGRAPHIE(board p, card c, int coord) *\param p de type board *\param c de type card *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Isolation du bâtiment : + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Isolation du bâtiment, sur le plateau p : * "Chaque faction gagne 1 point DDRS par carte non retournée et non supprimée du plateau qu'elle a posée sur le plateau." *\return rien */ @@ -1179,37 +1176,108 @@ void effect_card_ISOLATION_DU_BATIMENT(board p, card c, int coord) { int num_faction_owner = get_card_factionOwner(c); faction faction_owner = p->factions[num_faction_owner]; + int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); faction faction_enemy = enemy_faction(p, num_faction_owner); + int f_enemy_ptsddrs = get_faction_ptsDDRS(faction_enemy); + + int count_card_owner = 0; // count_card_owner représente le nombre de cartes non retournées et non supprimées du plateau, de la faction possédant la carte c dont l'effet est en train de se réaliser + int count_card_enemy = 0; // count_card_enemy représente le nombre de cartes non retournées et non supprimées du plateau, de la faction ne possédant pas la carte c dont l'effet est en train de se réaliser + + int num_faction_owner_current_card; // num_faction_owner_current_card représente le numéro de la faction (0 ou 1) possédant la carte courante de la boucle for + + for (int i = coord + 1; i < BOARD_SIZE; i++) + { + if ((p->tabBoard[i]).state == FaceDown) + { + num_faction_owner_current_card = get_card_factionOwner((p->tabBoard[i]).cellCard); + + if (num_faction_owner_current_card == num_faction_owner) // Si la carte courante appartient à faction_owner + { + count_card_owner += 1; + } + + else // Si la carte courante appartient à faction_enemy + { + count_card_enemy += 1; + } + } + } + + if (count_card_owner) + { + set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + count_card_owner); + } + + if (count_card_enemy) + { + set_faction_ptsDDRS(faction_enemy, f_enemy_ptsddrs + count_card_enemy); + } } + + + /** - *\fn void effect_card_PARCOURS_SOBRIETE_NUMERIQUE(board p, card c, int coord) + *\fn void effect_card_PARCOURS_SOBRIETE_NUMERIQUE(board p) *\param p de type board - *\param c de type card - *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Sobriété numérique : + *\brief Procédure qui active l'effet d'une carte de type Sobriété numérique, sur le plateau p : * "Retournez toutes les cartes non retournées les plus à gauche et à droite de chaque ligne, sans appliquer leur effet." *\return rien */ -void effect_card_PARCOURS_SOBRIETE_NUMERIQUE(board p, card c, int coord) +void effect_card_PARCOURS_SOBRIETE_NUMERIQUE(board p) { - int num_faction_owner = get_card_factionOwner(c); - faction faction_owner = p->factions[num_faction_owner]; - faction faction_enemy = enemy_faction(p, num_faction_owner); + int x = 0; + int y1 = 0; + int y2 = BOARD_SIZE - 1; + + bool indicator1; + bool indicator2; + + while ( x < BOARD_SIZE ) + { + indicator1 = false; //indicator1 indique si la première carte de la xième ligne a été retournée + indicator2 = false; //indicator2 indique si la dernière carte de la xième ligne a été retournée + + while ( (y1 < BOARD_SIZE && !indicator) || (y2 >= 0 && !indicator2) ) // On explore les deux côtés de la xième ligne en même temps + { + if ((p->tabBoard[x*BOARD_SIZE + y1]).state == FaceDown) + { + indicator1 = true; + (p->tabBoard[x*BOARD_SIZE + y1]).state = FaceUp; + } + + if ((p->tabBoard[x*BOARD_SIZE + y2]).state == FaceDown) + { + indicator2 = true; + (p->tabBoard[x*BOARD_SIZE + y2]).state = FaceUp; + } + + y1 += 1; + y2 -= 1; + + } + + x++; + y1 = 0; + y2 = BOARD_SIZE - 1; + } } + + + /** *\fn void effect_card_HEURES_SUPPLEMENTAIRES(board p, card c, int coord) *\param p de type board *\param c de type card *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Heures supplémentaires : + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Heures supplémentaires, sur le plateau p : * "La faction adverse de celle qui a posé cette carte perd 3 points DDRS par carte Heures supplémentaires retournée sur le plateau (y compris celle-ci)." *\return rien */ @@ -1218,38 +1286,71 @@ void effect_card_PARCOURS_SOBRIETE_NUMERIQUE(board p, card c, int coord) void effect_card_HEURES_SUPPLEMENTAIRES(board p, card c, int coord) { int num_faction_owner = get_card_factionOwner(c); - faction faction_owner = p->factions[num_faction_owner]; faction faction_enemy = enemy_faction(p, num_faction_owner); + int f_enemy_ptsddrs = get_faction_ptsDDRS(faction_enemy); + + int count_h_supp = 0; // count_h_supp compte le nombre de cartes de type Heures_supplementaires retournées sur le plateau + CardType t; // t : type de la carte courante retournée de la boucle for + for (int i = 0; i <= coord; i++) + { + if ((p->tabBoard[i]).state == FaceUp) + { + t = get_card_type((p->tabBoard[i]).cellCard); + if (t == Heures_supplementaires) + { + count_h_supp ++; + } + } + } + + if (count_card) + { + set_faction_ptsDDRS(faction_enemy, f_enemy_ptsddrs + 3 * count_h_supp); + } } + + + /** - *\fn void effect_card_KAHINA_BOUCHAMA(board p, card c, int coord) + *\fn void effect_card_KAHINA_BOUCHAMA(board p, int coord) *\param p de type board - *\param c de type card *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Kahina Bouchama : + *\brief Procédure qui active l'effet d'une carte, de coordonnée 1D coord, de type Kahina Bouchama, sur le plateau p : * "Supprimez une carte non retournée du plateau choisie au hasard." *\return rien */ -void effect_card_KAHINA_BOUCHAMA(board p, card c, int coord) +void effect_card_KAHINA_BOUCHAMA(board p, int coord) { - int num_faction_owner = get_card_factionOwner(c); - faction faction_owner = p->factions[num_faction_owner]; - faction faction_enemy = enemy_faction(p, num_faction_owner); + } + + + + + + + + + + + + + + /** *\fn void effect_card_KEVIN_GOILARD(board p, card c, int coord) *\param p de type board *\param c de type card *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Kevin Goilard : + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Kevin Goilard, sur le plateau p : * "Supprimez une ligne au hasard, la faction qui a posé cette carte gagne 2 points DDRS par carte supprimée ainsi." *\return rien */ @@ -1269,7 +1370,7 @@ void effect_card_KEVIN_GOILARD(board p, card c, int coord) *\param p de type board *\param c de type card *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Massinissa Merabet : + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Massinissa Merabet, sur le plateau p : * "La faction qui a posé cette carte réactive l'effet de la dernière carte retournée avant Massinissa Merabet, * en faisant comme si elle l'avait posée elle-même, même si ce n'est pas le cas." *\return rien @@ -1290,7 +1391,7 @@ void effect_card_MASSINISSA_MERABET(board p, card c, int coord) *\param p de type board *\param c de type card *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Vitera y : + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Vitera y, sur le plateau p : * "La faction qui a le moins de points DDRS gagne 3 points DDRS." *\return rien */ @@ -1310,7 +1411,7 @@ void effect_card_VITERA_Y(board p, card c, int coord) *\param p de type board *\param c de type card *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Jonas Senizergues : + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Jonas Senizergues, sur le plateau p : * "Supprimez toutes les cartes Heures supplémentaires retournées du plateau." *\return rien */ @@ -1330,7 +1431,7 @@ void effect_card_JONAS_SENIZERGUES(board p, card c, int coord) *\param p de type board *\param c de type card *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Fetia Bannour : + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Fetia Bannour, sur le plateau p : * "Si la carte Heures supplémentaires est retournée sur le plateau, * supprimez toutes les cartes de la ligne et de la colonne où est posée cette carte (y compris celle-ci). * Sinon la faction qui a posé cette carte gagne 1 point DDRS par carte Catherine Dubois, Anne-Laure Ligozat, Guillaume Burel, @@ -1353,7 +1454,7 @@ void effect_card_FETIA_BANNOUR(board p, card c, int coord) *\param p de type board *\param c de type card *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Catherine Dubois : + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Catherine Dubois, sur le plateau p : * "Supprimez la première et la dernière cartes de la ligne et de la colonne où est posée cette carte." *\return rien */ @@ -1373,7 +1474,7 @@ void effect_card_CATHERINE_DUBOIS(board p, card c, int coord) *\param p de type board *\param c de type card *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Anne-Laure Ligozat : + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Anne-Laure Ligozat, sur le plateau p : * "Pour chaque carte EcologIIE, Ecocup, Isolation du bâtiment et parcours Sobriété numérique retournée, * la faction qui a posé cette carte gagne 3 points DDRS et la dernière carte non retournée du plateau est supprimée. * (L'effet continue même si Anne-Laure Ligozat ou une des 4 cartes précédemment mentionnées est supprimée)." @@ -1395,7 +1496,7 @@ void effect_card_ANNE_LAURE_LIGOZAT(board p, card c, int coord) *\param p de type board *\param c de type card *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Guillaume Burel : + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Guillaume Burel, sur le plateau p : * "Si la faction adverse de celle qui a posé cette carte a plus de points DDRS, la seconde lui vole 3 points DDRS." *\return rien */ @@ -1415,7 +1516,7 @@ void effect_card_GUILLAUME_BUREL(board p, card c, int coord) *\param p de type board *\param c de type card *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Christophe Mouilleron : + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Christophe Mouilleron, sur le plateau p : * "Si la carte Heures supplémentaires est retournée sur le plateau, * supprimez toutes les cartes retournées du plateau sauf les cartes Christophe Mouilleron et Heures supplémentaires." *\return rien @@ -1436,7 +1537,7 @@ void effect_card_CHRISTOPHE_MOUILLERON(board p, card c, int coord) *\param p de type board *\param c de type card *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Thomas Lim : + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Thomas Lim, sur le plateau p : * "Si Julien Forest n'est par retourné sur le plateau, la faction qui a posé cette carte gagne 3 points DDRS par carte FISE retournée sur le plateau. * Sinon la faction adverse perd 1 point DDRS par carte FISE retournée sur le plateau." *\return rien @@ -1457,7 +1558,7 @@ void effect_card_THOMAS_LIM(board p, card c, int coord) *\param p de type board *\param c de type card *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Julien Forest : + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Julien Forest, sur le plateau p : * "La faction qui a posé cette carte gagne 6 points DDRS par carte FISE retournée sur le plateau si au moins une carte Café est retournée sur le plateau." *\return rien */ @@ -1477,7 +1578,7 @@ void effect_card_JULIEN_FOREST(board p, card c, int coord) *\param p de type board *\param c de type card *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Dimitri Watel : + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Dimitri Watel, sur le plateau p : * "La faction qui a posé cette carte gagne 3 points DDRS par carte FISA ou FC retournée sur le plateau si au moins une carte Thé est retournée sur le plateau." *\return rien */ @@ -1497,7 +1598,7 @@ void effect_card_DIMITRI_WATEL(board p, card c, int coord) *\param p de type board *\param c de type card *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Djibril-Aurélien Dembele-Cabot : + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Djibril-Aurélien Dembele-Cabot, sur le plateau p : * "S'il y a plus de 3 cartes retournées sur la ligne de cette carte, la faction qui a posé cette carte gagne 5 points DDRS." *\return rien */ @@ -1517,7 +1618,7 @@ void effect_card_DJIBRIL_AURELIEN_DEMBELE_CABOT(board p, card c, int coord) *\param p de type board *\param c de type card *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Éric Lejeune : + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Éric Lejeune, sur le plateau p : * "Prenez au hasard 5 cartes retournées du plateau (ou toutes les cartes retournées du plateau s'il y a moins de 5). * Si une de ces cartes est une carte Catherine Dubois, Anne-Laure Ligozat, Guillaume Burel, Christophe Mouilleron, * Thomas Lim, Julien Forest ou Dimitri Watel, mélangez les et placez les à gauche de la case la plus à gauche de la première ligne. @@ -1540,7 +1641,7 @@ void effect_card_ERIC_LEJEUNE(board p, card c, int coord) *\param p de type board *\param c de type card *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Lucienne Pacave : + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Lucienne Pacave, sur le plateau p : * "S'il y a une carte FISA retournée dans la même ligne ou la même colonne que cette carte, la faction qui a posé cette carte gagne 5 points DDRS." *\return rien */ @@ -1560,7 +1661,7 @@ void effect_card_LUCIENNE_PACAVE(board p, card c, int coord) *\param p de type board *\param c de type card *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Katrin Salhab : + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Katrin Salhab, sur le plateau p : * "Si les cartes Djibril-Aurélien Djembele-Cabeau, Eric Lejeune et Lucienne Pacavé sont retournées, * la faction qui a posé cette carte gagne 10 points DDRS. * Sinon, retournez toutes les cartes dans la même ligne de cette carte sans appliquer leurs effets." @@ -1582,7 +1683,7 @@ void effect_card_KATRIN_SALHAB(board p, card c, int coord) *\param p de type board *\param c de type card *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Laurent Prével : + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Laurent Prével, sur le plateau p : * "Si Laurent Prével est la dernière carte retournée du plateau, * la faction qui a posé cette carte gagne la manche, quel que soit le nombre de points DDRS des deux factions." *\return rien -- GitLab From 4fb3a0e41b5df926d11573917bfd6f9d3ea82457 Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Tue, 26 Apr 2022 04:03:10 +0200 Subject: [PATCH 100/163] =?UTF-8?q?Tache=20B.7=20:=20impl=C3=A9mentation?= =?UTF-8?q?=20des=20fonctions=20effect=5Fcard=5FKAHINA=5FBOUCHAMA()=20,=20?= =?UTF-8?q?effect=5Fcard=5FKEVIN=5FGOILARD()=20,=20effect=5Fcard=5FMASSINI?= =?UTF-8?q?SSA=5FMERABET()=20,=20effect=5Fcard=5FVITERA=5FY=20,=20effect?= =?UTF-8?q?=5Fcard=5FJONAS=5FSENIZERGUES()=20,=20et=20effect=5Fcard=5FLAUR?= =?UTF-8?q?ENT=5FPREVEL()=20.=20L=C3=A9g=C3=A8res=20modifications=20des=20?= =?UTF-8?q?proc=C3=A9dures=20r=C3=A9alisant=20les=20effets=20de=20certains?= =?UTF-8?q?=20types=20de=20carte=20d=C3=A9j=C3=A0=20impl=C3=A9ment=C3=A9es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plateau.c | 368 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 257 insertions(+), 111 deletions(-) diff --git a/src/plateau.c b/src/plateau.c index 69335c4..ace66a7 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -2,7 +2,7 @@ #include "../headers/faction.h" #include "../headers/carte.h" #include "../headers/structure.h" - +#include <stdlib.h> /** * \brief utilisee dans plateau.h @@ -190,31 +190,31 @@ void card_effect(board p, card c, int coord) case FISA : - effect_card_FISA(p, c, coord); + effect_card_FISA(p, c); break; case FC : - effect_card_FC(p, c, coord); + effect_card_FC(p, c); break; case EcologIIE : - effect_card_ECOLOGIIE(p, c, coord); + effect_card_ECOLOGIIE(p, c); break; case lIIEns : - effect_card_LIIENS(p, coord); + effect_card_LIIENS(p); break; case Soiree_sans_alcool : - effect_card_SOIREE_SANS_ALCOOL(p, c, coord); + effect_card_SOIREE_SANS_ALCOOL(p, c); break; @@ -226,13 +226,13 @@ void card_effect(board p, card c, int coord) case Cafe : - effect_card_CAFE(p, c, coord); + effect_card_CAFE(p, c); break; case The : - effect_card_THE(p, c, coord); + effect_card_THE(p, c); break; @@ -244,7 +244,7 @@ void card_effect(board p, card c, int coord) case Reprographie : - effect_card_REPROGRAPHIE(p, c, coord); + effect_card_REPROGRAPHIE(p, c); break; @@ -262,7 +262,7 @@ void card_effect(board p, card c, int coord) case Heures_supplementaires : - effect_card_HEURES_SUPPLEMENTAIRES(p, c, coord); + effect_card_HEURES_SUPPLEMENTAIRES(p, c); break; @@ -286,13 +286,13 @@ void card_effect(board p, card c, int coord) case Vitera_Y : - effect_card_VITERA_Y(p, c, coord); + effect_card_VITERA_Y(p, c); break; case Jonas_Senizergues : - effect_card_JONAS_SENIZERGUES(p, c, coord); + effect_card_JONAS_SENIZERGUES(p); break; @@ -560,17 +560,16 @@ void effect_card_FISE(board p, card c) /** - *\fn void effect_card_FISA(board p, card c, int coord) + *\fn void effect_card_FISA(board p, card c) *\param p de type board *\param c de type card - *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type FISA, sur le plateau p : + *\brief Procédure qui active l'effet d'une carte c de type FISA, sur le plateau p : * "La faction qui a posé cette carte gagne 2 points DDRS si le nombre de cartes retournées sur le plateau (y compris celle-ci) est pair, et 0 sinon." *\return rien */ -void effect_card_FISA(board p, card c, int coord) +void effect_card_FISA(board p, card c) { int num_faction_owner = get_card_factionOwner(c); // num_faction_owner représente le numéro (0 ou 1) de la faction possédant la carte c venant d'être retournée faction faction_owner = p->factions[num_faction_owner]; // faction_owner représente la faction possédant la carte c venant d'être retournée @@ -578,7 +577,7 @@ void effect_card_FISA(board p, card c, int coord) int count_card = 0; // count_card compte le nombre de cartes retournées sur le plateau - for (int i = 0; i <= coord; i++) + for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE - 1) ; i++) // (BOARD_SIZE*BOARD_SIZE - 1) car il peut y avoir des cartes retournées n'importe où sur le plateau, à cause des effets des autres cartes { if ((p->tabBoard[i]).state == FaceUp) { @@ -597,17 +596,16 @@ void effect_card_FISA(board p, card c, int coord) /** - *\fn void effect_card_FC(board p, card c, int coord) + *\fn void effect_card_FC(board p, card c) *\param p de type board *\param c de type card - *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type FC, sur le plateau p : + *\brief Procédure qui active l'effet d'une carte c, de type FC, sur le plateau p : * "La faction qui a posé cette carte gagne 4 points DDRS si au moins une autre carte FC est retournée sur le plateau et 0 sinon." *\return rien */ -void effect_card_FC(board p, card c, int coord) +void effect_card_FC(board p, card c) { int num_faction_owner = get_card_factionOwner(c); faction faction_owner = p->factions[num_faction_owner]; @@ -616,14 +614,13 @@ void effect_card_FC(board p, card c, int coord) int i = 0; bool ind_FC = false; // ind_FC indique si il y a au moins une carte de type FC retournée sur le plateau - CardType t1 = get_card_type(c); // t1 : type de la carte c dont on active l'effet - CardType t2; // t2 : type de la carte courante retournée de la boucle while - while (i < coord && !ind_FC) + CardType t; // t : type de la carte courante retournée de la boucle while + while (i < (BOARD_SIZE*BOARD_SIZE - 1) && !ind_FC) { if ((p->tabBoard[i]).state == FaceUp) { - t2 = get_card_type((p->tabBoard[i]).cellCard); - if (t1 == t2) + t = get_card_type((p->tabBoard[i]).cellCard); + if (t == FC) { ind_FC = true; } @@ -642,17 +639,16 @@ void effect_card_FC(board p, card c, int coord) /** - *\fn void effect_card_ECOLOGIIE(board p, card c, int coord) + *\fn void effect_card_ECOLOGIIE(board p, card c) *\param p de type board *\param c de type card - *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type EcologIIE, sur le plateau p : + *\brief Procédure qui active l'effet d'une carte c de type EcologIIE, sur le plateau p : * "La faction qui a posé cette carte gagne 1 point DDRS par carte FISE/FISA/FC retournée." *\return rien */ -void effect_card_ECOLOGIIE(board p, card c, int coord) +void effect_card_ECOLOGIIE(board p, card c) { int num_faction_owner = get_card_factionOwner(c); faction faction_owner = p->factions[num_faction_owner]; @@ -661,7 +657,7 @@ void effect_card_ECOLOGIIE(board p, card c, int coord) int count_card = 0; // count_card compte le nombre de cartes retournées de type FISE, FISA ou FC sur le plateau CardType t; // t : type de la carte courante retournée de la boucle for - for (int i = 0; i < coord; i++) + for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE - 1); i++) { if ((p->tabBoard[i]).state == FaceUp) { @@ -684,10 +680,9 @@ void effect_card_ECOLOGIIE(board p, card c, int coord) /** - *\fn void effect_card_LIIENS(board p, int coord) + *\fn void effect_card_LIIENS(board p) *\param p de type board - *\param coord de type int - *\brief Procédure qui active l'effet d'une carte, de coordonnée 1D coord, de type lIIEns, sur le plateau p : + *\brief Procédure qui active l'effet d'une carte de type lIIEns, sur le plateau p : * "Prenez toutes les cartes FISE/FISA/FC retournées, retirez les du plateau, mélangez les et * reposez les face cachées une par une sur la gauche de la carte la plus en haut à gauche du plateau, dans cet ordre. * Les prochaines cartes à être retournées sont ces cartes là ." @@ -695,14 +690,14 @@ void effect_card_ECOLOGIIE(board p, card c, int coord) */ -void effect_card_LIIENS(board p, int coord) +void effect_card_LIIENS(board p) { Stack card_FISE_FISA_FC = empty_stack(); // card_FISE_FISA_FC représente le paquet de cartes de type FISE, FISA, ou FC qui étaient retournées sur le plateau, et qu'on a retirées du plateau CardType t; // t : type de la carte courante retournée de la boucle for - for (int i = 0; i < coord; i++) // Tout d'abord, on retire les cartes de type FISE, FISA, ou FC retournées, et on les ajoute dans card_FISE_FISA_FC + for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE - 1); i++) // Tout d'abord, on retire les cartes de type FISE, FISA, ou FC retournées, et on les ajoute dans card_FISE_FISA_FC { if ((p->tabBoard[i]).state == FaceUp) { @@ -736,11 +731,10 @@ void effect_card_LIIENS(board p, int coord) /** - *\fn void effect_card_SOIREE_SANS_ALCOOL(board p, card c, int coord) + *\fn void effect_card_SOIREE_SANS_ALCOOL(board p, card c) *\param p de type board *\param c de type card - *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Soirée sans alcool, sur le plateau p : + *\brief Procédure qui active l'effet d'une carte c de type Soirée sans alcool, sur le plateau p : * "Si au moins une carte alcool est retournée, supprimez toutes les cartes FISE/FISA/FC retournées du plateau. * Supprimez ensuite la première et la dernière ligne du plateau. * Sinon la faction qui a posé cette carte gagne 5 points DDRS." @@ -748,7 +742,7 @@ void effect_card_LIIENS(board p, int coord) */ -void effect_card_SOIREE_SANS_ALCOOL(board p, card c, int coord) +void effect_card_SOIREE_SANS_ALCOOL(board p, card c) { int num_faction_owner = get_card_factionOwner(c); faction faction_owner = p->factions[num_faction_owner]; @@ -759,7 +753,7 @@ void effect_card_SOIREE_SANS_ALCOOL(board p, card c, int coord) bool ind_alcool = false; // ind_alcool indique si il y a au moins une carte de type ALCOOL retournée sur le plateau CardType t; // t : type de la carte courante retournée de la boucle while - while (i < coord && !ind_alcool) // On vérifie tout d'abord si il y a au moins une cartes de type alcool retournée sur le plateau + while (i < (BOARD_SIZE*BOARD_SIZE - 1) && !ind_alcool) // On vérifie tout d'abord si il y a au moins une cartes de type alcool retournée sur le plateau { if ((p->tabBoard[i]).state == FaceUp) { @@ -774,7 +768,7 @@ void effect_card_SOIREE_SANS_ALCOOL(board p, card c, int coord) if (ind_alcool) // Si ind_alcool == true, on supprime toutes les cartes de type FISE, FISA ou FC retournée sur le plateau; et on supprime la première et la dernière ligne { - for (int j = 0; j < coord; j++) // Suppression des cartes de type FISE, FISA ou FC retournée sur le plateau + for (int j = 0; j < (BOARD_SIZE*BOARD_SIZE - 1); j++) // Suppression des cartes de type FISE, FISA ou FC retournée sur le plateau { if ((p->tabBoard[j]).state == FaceUp) { @@ -818,7 +812,7 @@ void effect_card_SOIREE_SANS_ALCOOL(board p, card c, int coord) // supression de la dernière ligne du plateau - k = BOARD_SIZE; // k : ligne à suprimer + k = BOARD_SIZE; // k : ligne à supprimer indicator = false; // indicator indique si il y a au moins une carte sur la ligne numéro k while (k > 0 && !indicator) // Détermination de la dernière ligne où il y a des cartes @@ -947,18 +941,17 @@ void effect_card_ALCOOL(board p, int coord) /** - *\fn void effect_card_CAFE(board p, card c, int coord) + *\fn void effect_card_CAFE(board p, card c) *\param p de type board *\param c de type card - *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Café, sur le plateau p : + *\brief Procédure qui active l'effet d'une carte c de type Café, sur le plateau p : * "Supprimez toutes les cartes Thé et Alcool retournées sur le plateau. * Si une carte Ecocup est retournée sur le plateau, la faction qui a posé cette carte gagne 1 point DDRS. Sinon elle perd 1 point DDRS." *\return rien */ -void effect_card_CAFE(board p, card c, int coord) +void effect_card_CAFE(board p, card c) { int num_faction_owner = get_card_factionOwner(c); faction faction_owner = p->factions[num_faction_owner]; @@ -967,7 +960,7 @@ void effect_card_CAFE(board p, card c, int coord) bool ind_ecocup = false; // ind_ecocup indique si il y a au moins une carte de type Ecocup retournée sur le plateau CardType t; // t : type de la carte courante retournée de la boucle for - for (int i = 0; i < coord; i++) + for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE - 1); i++) { if ((p->tabBoard[i]).state == FaceUp) { @@ -1000,18 +993,17 @@ void effect_card_CAFE(board p, card c, int coord) /** - *\fn void effect_card_THE(board p, card c, int coord) + *\fn void effect_card_THE(board p, card c) *\param p de type board *\param c de type card - *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Thé, sur le plateau p : + *\brief Procédure qui active l'effet d'une carte c de type Thé, sur le plateau p : * "Supprimez toutes les cartes Café et Alcool retournées sur le plateau. * Si une carte Ecocup est retournée sur le plateau, la faction qui a posé cette carte gagne 1 point DDRS. Sinon elle perd 1 point DDRS." *\return rien */ -void effect_card_THE(board p, card c, int coord) +void effect_card_THE(board p, card c) { int num_faction_owner = get_card_factionOwner(c); faction faction_owner = p->factions[num_faction_owner]; @@ -1020,7 +1012,7 @@ void effect_card_THE(board p, card c, int coord) bool ind_ecocup = false; // ind_ecocup indique si il y a au moins une carte de type Ecocup retournée sur le plateau CardType t; // t : type de la carte courante retournée de la boucle for - for (int i = 0; i < coord; i++) + for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE - 1); i++) { if ((p->tabBoard[i]).state == FaceUp) { @@ -1110,18 +1102,17 @@ int binom(int k, int n) /** - *\fn void effect_card_REPROGRAPHIE(board p, card c, int coord) + *\fn void effect_card_REPROGRAPHIE(board p, card c) *\param p de type board *\param c de type card - *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Reprographie, sur le plateau p : + *\brief Procédure qui active l'effet d'une carte c de type Reprographie, sur le plateau p : * "La faction adverse de celle qui a posé cette carte perd 1 points DDRS pour chaque paire de cartes retournées et identiques sur le plateau. * (S'il y a 3 cartes identiques, cela fait 3 paires)." *\return rien */ -void effect_card_REPROGRAPHIE(board p, card c, int coord) +void effect_card_REPROGRAPHIE(board p, card c) { int num_faction_owner = get_card_factionOwner(c); faction faction_enemy = enemy_faction(p, num_faction_owner); @@ -1135,7 +1126,7 @@ void effect_card_REPROGRAPHIE(board p, card c, int coord) } CardType t; // t : type de la carte courante retournée de la boucle for - for (int i = 0; i < coord; i++) // On détermine le nombre d'occurrences de chaque carte qui est retournée sur le plateau + for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE - 1); i++) // On détermine le nombre d'occurrences de chaque carte qui est retournée sur le plateau { if ((p->tabBoard[i]).state == FaceUp) { @@ -1185,7 +1176,7 @@ void effect_card_ISOLATION_DU_BATIMENT(board p, card c, int coord) int num_faction_owner_current_card; // num_faction_owner_current_card représente le numéro de la faction (0 ou 1) possédant la carte courante de la boucle for - for (int i = coord + 1; i < BOARD_SIZE; i++) + for (int i = coord + 1; i < (BOARD_SIZE*BOARD_SIZE); i++) { if ((p->tabBoard[i]).state == FaceDown) { @@ -1230,40 +1221,38 @@ void effect_card_ISOLATION_DU_BATIMENT(board p, card c, int coord) void effect_card_PARCOURS_SOBRIETE_NUMERIQUE(board p) { - int x = 0; - int y1 = 0; - int y2 = BOARD_SIZE - 1; + int x = -1; + int y; bool indicator1; bool indicator2; - while ( x < BOARD_SIZE ) + while ( x < (BOARD_SIZE - 1) ) { + x++; + y = 0; + indicator1 = false; //indicator1 indique si la première carte de la xième ligne a été retournée indicator2 = false; //indicator2 indique si la dernière carte de la xième ligne a été retournée - while ( (y1 < BOARD_SIZE && !indicator) || (y2 >= 0 && !indicator2) ) // On explore les deux côtés de la xième ligne en même temps + while ( y <= (BOARD_SIZE/2 + 1) && ((!indicator1) || (!indicator2) ) ) // On explore les deux côtés de la xième ligne en même temps { - if ((p->tabBoard[x*BOARD_SIZE + y1]).state == FaceDown) + if ((p->tabBoard[x*BOARD_SIZE + y]).state == FaceDown && !indicator1) { + (p->tabBoard[x*BOARD_SIZE + y]).state = FaceUp; indicator1 = true; - (p->tabBoard[x*BOARD_SIZE + y1]).state = FaceUp; } - if ((p->tabBoard[x*BOARD_SIZE + y2]).state == FaceDown) + if ((p->tabBoard[x*BOARD_SIZE + (BOARD_SIZE - y - 1)]).state == FaceDown && !indicator2) { + (p->tabBoard[x*BOARD_SIZE + (BOARD_SIZE - y - 1)]).state = FaceUp; indicator2 = true; - (p->tabBoard[x*BOARD_SIZE + y2]).state = FaceUp; } - y1 += 1; - y2 -= 1; + y += 1; } - x++; - y1 = 0; - y2 = BOARD_SIZE - 1; } } @@ -1273,17 +1262,16 @@ void effect_card_PARCOURS_SOBRIETE_NUMERIQUE(board p) /** - *\fn void effect_card_HEURES_SUPPLEMENTAIRES(board p, card c, int coord) + *\fn void effect_card_HEURES_SUPPLEMENTAIRES(board p, card c) *\param p de type board *\param c de type card - *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Heures supplémentaires, sur le plateau p : + *\brief Procédure qui active l'effet d'une carte c de type Heures supplémentaires, sur le plateau p : * "La faction adverse de celle qui a posé cette carte perd 3 points DDRS par carte Heures supplémentaires retournée sur le plateau (y compris celle-ci)." *\return rien */ -void effect_card_HEURES_SUPPLEMENTAIRES(board p, card c, int coord) +void effect_card_HEURES_SUPPLEMENTAIRES(board p, card c) { int num_faction_owner = get_card_factionOwner(c); faction faction_enemy = enemy_faction(p, num_faction_owner); @@ -1292,7 +1280,7 @@ void effect_card_HEURES_SUPPLEMENTAIRES(board p, card c, int coord) int count_h_supp = 0; // count_h_supp compte le nombre de cartes de type Heures_supplementaires retournées sur le plateau CardType t; // t : type de la carte courante retournée de la boucle for - for (int i = 0; i <= coord; i++) + for (int i = 0; i <= (BOARD_SIZE*BOARD_SIZE - 1); i++) { if ((p->tabBoard[i]).state == FaceUp) { @@ -1304,10 +1292,8 @@ void effect_card_HEURES_SUPPLEMENTAIRES(board p, card c, int coord) } } - if (count_card) - { - set_faction_ptsDDRS(faction_enemy, f_enemy_ptsddrs + 3 * count_h_supp); - } + set_faction_ptsDDRS(faction_enemy, f_enemy_ptsddrs - 3 * count_h_supp); + } @@ -1326,45 +1312,120 @@ void effect_card_HEURES_SUPPLEMENTAIRES(board p, card c, int coord) void effect_card_KAHINA_BOUCHAMA(board p, int coord) { - - -} - - - - - - + int count_card = 0; // count_card compte le nombre de cartes non retournées sur le plateau + for (int i = coord + 1; i < (BOARD_SIZE*BOARD_SIZE); i++) + { + if ((p->tabBoard[i]).state == FaceDown) + { + count_card ++; + } + } + if (count_card) // Si count_card != 0, alors on peut retirer une carte non retournées au hasard + { + srand(time(NULL)); + int random_card; // random_card est le numéro de la carte qui sera retirée, après celle qui a pour coordonnée 1D coord + random_card = (rand() % count_card) + 1; + int i = coord + 1; + bool indicator = false; // indicator indique si la random_cardième carte après celle qui a pour coordonnée 1D coord a été retirée + while ( i < (BOARD_SIZE*BOARD_SIZE) && !indicator) + { + if ((p->tabBoard[i]).state == FaceDown && random_card == 1) + { + (p->tabBoard[i]).state = Empty; + indicator = true; + } + i++; + random_card --; + } + } +} /** - *\fn void effect_card_KEVIN_GOILARD(board p, card c, int coord) + *\fn void effect_card_KEVIN_GOILARD(board p, card c) *\param p de type board *\param c de type card - *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Kevin Goilard, sur le plateau p : + *\brief Procédure qui active l'effet d'une carte c, de type Kevin Goilard, sur le plateau p : * "Supprimez une ligne au hasard, la faction qui a posé cette carte gagne 2 points DDRS par carte supprimée ainsi." *\return rien */ -void effect_card_KEVIN_GOILARD(board p, card c, int coord) +void effect_card_KEVIN_GOILARD(board p, card c) { int num_faction_owner = get_card_factionOwner(c); faction faction_owner = p->factions[num_faction_owner]; - faction faction_enemy = enemy_faction(p, num_faction_owner); + int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); + + int count_card = 0; //count_card représentera le nombre de cartes qui ont été supprimées sur une ligne au hasard + + int xmin; // xmin sera la ligne la plus en haut contenant au moins une carte + int xmax; // xmax sera la ligne la plus en bas contenant au moins une carte + + // Détermination de xmin et xmax + + bool indicator1 = false; // indicator1 indique si on a trouvé xmin + bool indicator2 = false; // indicator2 indique si on a trouvé xmax + + int x = -1; + int y; + + while ( x <= (BOARD_SIZE/2) && (!indicator1 || !indicator2) ) // On détermin xmin et xmax en même temps, en parcourant la partie gauche et la partie droite de la ligne x en même temps, et de la même façon (c'est symétrique par rapport à la droite verticale se trouvant au milieu du tableau) + { + x += 1; + y = 0; + + while (y < BOARD_SIZE && (!indicator1 || !indicator2) ) + { + if ((p->tabBoard[x*BOARD_SIZE + y]).state != Empty && (!indicator1) ) + { + xmin = x; + indicator1 = true; + } + + if ((p->tabBoard[(BOARD_SIZE - x - 1)*BOARD_SIZE + y]).state != Empty && (!indicator2) ) + { + xmax = (BOARD_SIZE - x - 1); + indicator2 = true; + } + + y++; + + } + } + + // Détermination de la ligne à supprimer + + srand(time(NULL)); + x = (rand() % (xmax - xmin)) + 1; // La xième ligne à partir de xmin sera supprimée + + // Suppression de la xième ligne + + for (int k = 0; k < BOARD_SIZE; k++) + { + if ((p->tabBoard[(xmin + x)*BOARD_SIZE + k]).state != Empty ) + { + (p->tabBoard[(xmin + x)*BOARD_SIZE + k]).state = Empty; + count_card += 1; + } + } + + set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + 2 * count_card); } + + + /** *\fn void effect_card_MASSINISSA_MERABET(board p, card c, int coord) *\param p de type board @@ -1380,52 +1441,103 @@ void effect_card_KEVIN_GOILARD(board p, card c, int coord) void effect_card_MASSINISSA_MERABET(board p, card c, int coord) { int num_faction_owner = get_card_factionOwner(c); - faction faction_owner = p->factions[num_faction_owner]; - faction faction_enemy = enemy_faction(p, num_faction_owner); + // Détermination de la carte dont on souhaite réactiver l'effet + + bool indicator = false; // indicator indique si on a trouvé la dernière carte retournée + int i = coord; + card new_c; // new_c sera la carte dont on réactivera l'effet + + while (i > 0 && !indicator) + { + i--; + + if ((p->tabBoard[i]).state == FaceUp ) + { + set_card_factionOwner((p->tabBoard[i]).cellCard, num_faction_owner); + new_c = (p->tabBoard[i]).cellCard; + indicator = true; + } + + } + + // new_c a pour coordonnée i + + if (indicator) // Dans ce cas, avant la carte c, il y a au moins une carte retournée + { + card_effect(p, new_c, i); + } } + + + /** - *\fn void effect_card_VITERA_Y(board p, card c, int coord) + *\fn void effect_card_VITERA_Y(board p, card c) *\param p de type board *\param c de type card - *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Vitera y, sur le plateau p : + *\brief Procédure qui active l'effet d'une carte c, de type Vitera y, sur le plateau p : * "La faction qui a le moins de points DDRS gagne 3 points DDRS." *\return rien */ -void effect_card_VITERA_Y(board p, card c, int coord) +void effect_card_VITERA_Y(board p, card c) { int num_faction_owner = get_card_factionOwner(c); faction faction_owner = p->factions[num_faction_owner]; faction faction_enemy = enemy_faction(p, num_faction_owner); + int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); + int f_enemy_ptsddrs = get_faction_ptsDDRS(faction_enemy); + + if (f_owner_ptsddrs < f_enemy_ptsddrs) + { + set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + 3); + } + + if (f_enemy_ptsddrs < f_owner_ptsddrs) + { + set_faction_ptsDDRS(faction_enemy, f_enemy_ptsddrs + 3); + } + } + + + /** - *\fn void effect_card_JONAS_SENIZERGUES(board p, card c, int coord) + *\fn void effect_card_JONAS_SENIZERGUES(board p) *\param p de type board - *\param c de type card - *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Jonas Senizergues, sur le plateau p : + *\brief Procédure qui active l'effet d'une carte de type Jonas Senizergues, sur le plateau p : * "Supprimez toutes les cartes Heures supplémentaires retournées du plateau." *\return rien */ -void effect_card_JONAS_SENIZERGUES(board p, card c, int coord) +void effect_card_JONAS_SENIZERGUES(board p) { - int num_faction_owner = get_card_factionOwner(c); - faction faction_owner = p->factions[num_faction_owner]; - faction faction_enemy = enemy_faction(p, num_faction_owner); + CardType t; // t : type de la carte courante retournée de la boucle for + for (int i = 0; i < BOARD_SIZE*BOARD_SIZE; i++) + { + if ( (p->tabBoard[i]).state == FaceUp ) + { + t = get_card_type((p->tabBoard[i]).cellCard); + if (t == Heures_supplementaires) + { + (p->tabBoard[i]).state == Empty; + } + } + } } + + + /** *\fn void effect_card_FETIA_BANNOUR(board p, card c, int coord) *\param p de type board @@ -1449,6 +1561,19 @@ void effect_card_FETIA_BANNOUR(board p, card c, int coord) } + + + + + + + + + + + + + /** *\fn void effect_card_CATHERINE_DUBOIS(board p, card c, int coord) *\param p de type board @@ -1694,6 +1819,27 @@ void effect_card_LAURENT_PREVEL(board p, card c, int coord) { int num_faction_owner = get_card_factionOwner(c); faction faction_owner = p->factions[num_faction_owner]; - faction faction_enemy = enemy_faction(p, num_faction_owner); + int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); + + // Tout d'abord, on vérifie si c est la dernière carte qui a été retournée du plateau + + bool indicator = false; // indicator indique si il y a au moins une carte non retournée après c + int i = coord; + + while ( i < (BOARD_SIZE*BOARD_SIZE - 1) && !indicator ) + { + i++; + if ( (p->tabBoard[i]).state == FaceDown ) + { + indicator = true; + } + } + + // On applique ensuite l'effet de la carte c en fonction de la valeur de indicator + + if (!indicator) // Dans ce cas, après c, il n'y a pas de carte non retournée + { + set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + 1000000000); + } } -- GitLab From 8fee0d87725ec9cf5e2d1bee7c8cf9f2a177b21d Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Tue, 26 Apr 2022 19:44:55 +0200 Subject: [PATCH 101/163] =?UTF-8?q?Tache=20B.7=20:=20Impl=C3=A9mentation?= =?UTF-8?q?=20des=20proc=C3=A9dures=20effect=5Fcard=5FFETIA=5FBANNOUR()=20?= =?UTF-8?q?,=20effect=5Fcard=5FCATHERINE=5FDUBOIS()=20,=20et=20effect=5Fca?= =?UTF-8?q?rd=5FANNE=5FLAURE=5FLIGOZAT()=20.=20Modification=20de=20la=20fo?= =?UTF-8?q?nction=20effect=5Fcard=5FMASSINISSA=5FMERABET(),=20et=20cr?= =?UTF-8?q?=C3=A9ation=20d'un=20type=20struct=20utilis=C3=A9=20uniquement?= =?UTF-8?q?=20pour=20cette=20fonction.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plateau.c | 247 ++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 230 insertions(+), 17 deletions(-) diff --git a/src/plateau.c b/src/plateau.c index ace66a7..6e2b279 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -280,7 +280,14 @@ void card_effect(board p, card c, int coord) case Massinissa_Merabet : - effect_card_MASSINISSA_MERABET(p, c, coord); + + pair_card_coord pcc = effect_card_MASSINISSA_MERABET(p, c, coord); + + if (pcc.coord_card != -1) + { + card_effect(p, pcc.card_in_coord, pcc.coord_card); + } + break; @@ -304,7 +311,7 @@ void card_effect(board p, card c, int coord) case Catherine_Dubois : - effect_card_CATHERINE_DUBOIS(p, c, coord); + effect_card_CATHERINE_DUBOIS(p, coord); break; @@ -1426,19 +1433,32 @@ void effect_card_KEVIN_GOILARD(board p, card c) +// Définition d'un type struct qui sera utilisé uniquement par la fonction effect_card_MASSINISSA_MERABET() +// Ce type permet de réunir une carte c et sa coordonnée coord dans un seul objet de type pair_card_coord + + +typedef struct pair_card_coord +{ + card card_in_coord; + int coord_card; // coordonnée de c sur le plateau +} pair_card_coord; + + + + /** - *\fn void effect_card_MASSINISSA_MERABET(board p, card c, int coord) + *\fn pair_card_coord effect_card_MASSINISSA_MERABET(board p, card c, int coord) *\param p de type board *\param c de type card *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Massinissa Merabet, sur le plateau p : + *\brief Fonction qui permet d'activer l'effet d'une carte c, de coordonnée 1D coord, de type Massinissa Merabet, sur le plateau p : * "La faction qui a posé cette carte réactive l'effet de la dernière carte retournée avant Massinissa Merabet, * en faisant comme si elle l'avait posée elle-même, même si ce n'est pas le cas." - *\return rien + *\return la carte dont l'effet sera activé immédiatement, ainsi que sa position sur le plateau */ -void effect_card_MASSINISSA_MERABET(board p, card c, int coord) +pair_card_coord effect_card_MASSINISSA_MERABET(board p, card c, int coord) { int num_faction_owner = get_card_factionOwner(c); @@ -1461,12 +1481,26 @@ void effect_card_MASSINISSA_MERABET(board p, card c, int coord) } + // On regarde si il existe au moins une carte retournée sur le plateau // new_c a pour coordonnée i if (indicator) // Dans ce cas, avant la carte c, il y a au moins une carte retournée { - card_effect(p, new_c, i); + pair_card_coord pcc; + pcc.card_in_coord = new_c; + pcc.coord_card = i; + return(pcc); + } + + else // Dans ce cas, avant la carte c, il n'y a pas de carte retournée + { + pair_card_coord pcc; + pcc.card_in_coord = NULL; + pcc.coord_card = -1; // Si avant c, il n'y a pas de carte retournée, la valeur de pcc.coord_card est -1 + return(pcc); } + + } @@ -1556,44 +1590,157 @@ void effect_card_FETIA_BANNOUR(board p, card c, int coord) { int num_faction_owner = get_card_factionOwner(c); faction faction_owner = p->factions[num_faction_owner]; - faction faction_enemy = enemy_faction(p, num_faction_owner); + int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); -} + // Tout d'abord, on regarde si la carte Heures supplémentaires est retournée sur le plateau + int i = 0; + bool ind_h_supp = false; //ind_h_supp indique si la carte Heures supplémentaires est retournée sur le plateau + CardType t; // t : type de la carte courante retournée de la boucle while + while (i < (BOARD_SIZE*BOARD_SIZE -1) && (!ind_h_supp) ) + { + if ( (p->tabBoard[i]).state == FaceUp ) + { + t = get_card_type((p->tabBoard[i]).cellCard); + if (t == Heures_supplementaires) + { + ind_h_supp = true; + } + } + i++; + } + // Ensuite, premier cas : ind_h_supp == true + if (ind_h_supp) + { + // x et y sont les coordonnées 2D de c + int x = coord/BOARD_SIZE; // x : ligne sur laquelle est c + int y = coord - x*BOARD_SIZE; // y : colonne sur laquelle est c + + // Supression de toutes les cartes sur la ligne x et sur la colonne y + + for (int k = 0; k < BOARD_SIZE; k++) + { + (p->tabBoard[x*BOARD_SIZE + k]).state = Empty; + + (p->tabBoard[k*BOARD_SIZE + y]).state = Empty; + } + + } + + // Deuxième cas : ind_h_supp == false + + else + { + + int count = 0; // count compte le nombre de cartes de type Catherine_Dubois, Anne-Laure_Ligozat, Guillaume_Burel, Christophe_Mouilleron, Thomas_Lim, Julien_Forest ou Dimitri_Watel retournée sur le plateau + + + // Détermination de la valeur de count en fonction des cartes retournées sur le plateau + + for (int k = 0; k < BOARD_SIZE; k++) + { + if ( (p->tabBoard[k]).state == FaceUp ) + { + t = get_card_type((p->tabBoard[k]).cellCard); // Ici, t est le type de la carte courante de cette boucle for + if (t == Catherine_Dubois || t == Anne_Laure_Ligozat || t == Guillaume_Burel || t == Christophe_Mouilleron || t == Thomas_Lim || t == Julien_Forest || t == Dimitri_Watel ) + { + count += 1; + } + } + } + + // Mise à jour du nombre de points DDRS de faction_owner + + if (count) // Si count > 0 + { + set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + count); + } + + } + +} /** - *\fn void effect_card_CATHERINE_DUBOIS(board p, card c, int coord) + *\fn void effect_card_CATHERINE_DUBOIS(board p, int coord) *\param p de type board - *\param c de type card *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Catherine Dubois, sur le plateau p : + *\brief Procédure qui active l'effet d'une carte de coordonnée 1D coord, de type Catherine Dubois, sur le plateau p : * "Supprimez la première et la dernière cartes de la ligne et de la colonne où est posée cette carte." *\return rien */ -void effect_card_CATHERINE_DUBOIS(board p, card c, int coord) +void effect_card_CATHERINE_DUBOIS(board p, int coord) { - int num_faction_owner = get_card_factionOwner(c); - faction faction_owner = p->factions[num_faction_owner]; - faction faction_enemy = enemy_faction(p, num_faction_owner); + // x et y sont les coordonnées 2D de c + + int x = coord/BOARD_SIZE; // x : ligne sur laquelle est c + int y = coord - x*BOARD_SIZE; // y : colonne sur laquelle est c + + bool indicator1 = false; // indicator1 indique si la première carte de la xième ligne a été supprimée + bool indicator2 = false; // indicator2 indique si la dernière carte de la xième ligne a été supprimée + bool indicator3 = false; // indicator3 indique si la première carte de la yième colonne a été supprimée + bool indicator4 = false; // indicator4 indique si la dernière carte de la yième colonne a été supprimée + + int k = 0; + + while ( k < (BOARD_SIZE/2 + 1) && (!indicator1 || !indicator2 || !indicator3 || !indicator4) ) + { + + if ( (p->tabBoard[x*BOARD_SIZE + k]).state != Empty && (!indicator1) ) // Cette condition permet de supprimer la première carte de la xième ligne + { + (p->tabBoard[x*BOARD_SIZE + k]).state = Empty; + indicator1 = true; + } + + + + if ( (p->tabBoard[x*BOARD_SIZE + (BOARD_SIZE - k - 1)]).state != Empty && (!indicator2) ) // Cette condition permet de supprimer la dernière carte de la xième ligne + { + (p->tabBoard[x*BOARD_SIZE + (BOARD_SIZE - k - 1)]).state = Empty; + indicator2 = true; + } + + + + if ( (p->tabBoard[k*BOARD_SIZE + y]).state != Empty && (!indicator3) ) // Cette condition permet de supprimer la première carte de la yième colonne + { + (p->tabBoard[k*BOARD_SIZE + y]).state = Empty; + indicator3 = true; + } + + + + if ( (p->tabBoard[(BOARD_SIZE - k - 1)*BOARD_SIZE + y]).state != Empty && (!indicator4) ) // Cette condition permet de supprimer la dernière carte de la yième colonne + { + (p->tabBoard[(BOARD_SIZE - k - 1)*BOARD_SIZE + y]).state = Empty; + indicator4 = true; + } + + k++; + + } + } + + + /** *\fn void effect_card_ANNE_LAURE_LIGOZAT(board p, card c, int coord) *\param p de type board @@ -1611,11 +1758,51 @@ void effect_card_ANNE_LAURE_LIGOZAT(board p, card c, int coord) { int num_faction_owner = get_card_factionOwner(c); faction faction_owner = p->factions[num_faction_owner]; - faction faction_enemy = enemy_faction(p, num_faction_owner); + int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); + + bool indicator = false; // indicator indique si la dernière carte non retournée du plateau a été supprimée + int count = 0; // count compte le nombre de carte de type EcologIIE, Ecocup, Isolation_du_batiment ou Parcours_sobriete_numerique retournées sur le plateau + CardType t; // t : type de la carte courante retournée de la boucle for + + + for (int i = (BOARD_SIZE*BOARD_SIZE - 1); i >= 0; i--) + { + + if ( (p->tabBoard[i]).state == FaceDown && (!indicator) ) // Cette condition permet de supprimer la dernière carte non retournée du plateau + { + (p->tabBoard[i]).state = Empty; + indicator = true; + } + + + + if ( (p->tabBoard[i]).state == FaceUp ) // Cette condition permet d'incrémenter de 1 ou non count + { + t = get_card_type((p->tabBoard[i]).cellCard); + + if ( t == EcologIIE || t == Ecocup || t == Isolation_du_batiment || t == Parcours_sobriete_numerique) + { + count += 1; + } + + } + + } + + + // Mise à jour du nombre de points DDRS de faction_owner + + if (count) // Si count > 0 + { + set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + 3 * count); + } } + + + /** *\fn void effect_card_GUILLAUME_BUREL(board p, card c, int coord) *\param p de type board @@ -1636,6 +1823,24 @@ void effect_card_GUILLAUME_BUREL(board p, card c, int coord) } + + + + + + + + + + + + + + + + + + /** *\fn void effect_card_CHRISTOPHE_MOUILLERON(board p, card c, int coord) *\param p de type board @@ -1803,6 +2008,14 @@ void effect_card_KATRIN_SALHAB(board p, card c, int coord) } + + + + + + + + /** *\fn void effect_card_LAURENT_PREVEL(board p, card c, int coord) *\param p de type board -- GitLab From aded8b0b33b38409b4ecddc728ef4cd6814d8c9d Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Tue, 26 Apr 2022 19:56:21 +0200 Subject: [PATCH 102/163] =?UTF-8?q?Tache=20B.7=20:=20Modification=20de=20c?= =?UTF-8?q?ommentaires=20et=20d'un=20des=20param=C3=A8tres=20de=20la=20pro?= =?UTF-8?q?c=C3=A9dure=20effect=5Fcard=5FANNE=5FLAURE=5FLIGOZAT()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plateau.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/plateau.c b/src/plateau.c index 6e2b279..368c6dd 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -317,7 +317,7 @@ void card_effect(board p, card c, int coord) case Anne_Laure_Ligozat : - effect_card_ANNE_LAURE_LIGOZAT(p, c, coord); + effect_card_ANNE_LAURE_LIGOZAT(p, c); break; @@ -1454,7 +1454,7 @@ typedef struct pair_card_coord *\brief Fonction qui permet d'activer l'effet d'une carte c, de coordonnée 1D coord, de type Massinissa Merabet, sur le plateau p : * "La faction qui a posé cette carte réactive l'effet de la dernière carte retournée avant Massinissa Merabet, * en faisant comme si elle l'avait posée elle-même, même si ce n'est pas le cas." - *\return la carte dont l'effet sera activé immédiatement, ainsi que sa position sur le plateau + *\return la carte dont l'effet sera activé immédiatement après la fin de cette fonction si elle existe, ainsi que sa position sur le plateau */ @@ -1742,11 +1742,10 @@ void effect_card_CATHERINE_DUBOIS(board p, int coord) /** - *\fn void effect_card_ANNE_LAURE_LIGOZAT(board p, card c, int coord) + *\fn void effect_card_ANNE_LAURE_LIGOZAT(board p, card c) *\param p de type board *\param c de type card - *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Anne-Laure Ligozat, sur le plateau p : + *\brief Procédure qui active l'effet d'une carte c de type Anne-Laure Ligozat, sur le plateau p : * "Pour chaque carte EcologIIE, Ecocup, Isolation du bâtiment et parcours Sobriété numérique retournée, * la faction qui a posé cette carte gagne 3 points DDRS et la dernière carte non retournée du plateau est supprimée. * (L'effet continue même si Anne-Laure Ligozat ou une des 4 cartes précédemment mentionnées est supprimée)." @@ -1754,7 +1753,7 @@ void effect_card_CATHERINE_DUBOIS(board p, int coord) */ -void effect_card_ANNE_LAURE_LIGOZAT(board p, card c, int coord) +void effect_card_ANNE_LAURE_LIGOZAT(board p, card c) { int num_faction_owner = get_card_factionOwner(c); faction faction_owner = p->factions[num_faction_owner]; -- GitLab From 2e831f3ce9aa49ac9e08b2240c768fc2b7efdd72 Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Thu, 28 Apr 2022 01:04:15 +0200 Subject: [PATCH 103/163] =?UTF-8?q?Tache=20B.7=20:=20impl=C3=A9mentation?= =?UTF-8?q?=20des=2012=20derni=C3=A8res=20proc=C3=A9dures=20permettant=20d?= =?UTF-8?q?'activer=20l'effet=20d'une=20carte=20ayant=20un=20certain=20typ?= =?UTF-8?q?e=20parmi=20les=2012=20type=20restants=20(dont=20les=20effets?= =?UTF-8?q?=20n'=C3=A9taient=20pas=20encore=20impl=C3=A9ment=C3=A9s)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plateau.c | 1057 ++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 958 insertions(+), 99 deletions(-) diff --git a/src/plateau.c b/src/plateau.c index 368c6dd..32f07de 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -1,3 +1,16 @@ +/** + * \file faction.c + * \author Martin Fond , Aurélien Coreau & Lucas Desrumeaux + * \brief + * \version 0.1 + * \date 2022-04-05 + * + * \copyright Copyright (c) 2022 + * + */ + + + #include "../headers/plateau.h" #include "../headers/faction.h" #include "../headers/carte.h" @@ -283,7 +296,7 @@ void card_effect(board p, card c, int coord) pair_card_coord pcc = effect_card_MASSINISSA_MERABET(p, c, coord); - if (pcc.coord_card != -1) + if (pcc.coord_card != -1) // Si pcc.coord_card != -1, alors avant la carte c de type Massinissa_Merabet, il y a au moins une carte retournée, et donc on active l'effet de la dernière carte retournée avant c (qui est pcc.coord_card) { card_effect(p, pcc.card_in_coord, pcc.coord_card); } @@ -323,31 +336,31 @@ void card_effect(board p, card c, int coord) case Guillaume_Burel : - effect_card_GUILLAUME_BUREL(p, c, coord); + effect_card_GUILLAUME_BUREL(p, c); break; case Christophe_Mouilleron : - effect_card_CHRISTOPHE_MOUILLERON(p, c, coord); + effect_card_CHRISTOPHE_MOUILLERON(p); break; case Thomas_Lim : - effect_card_THOMAS_LIM(p, c, coord); + effect_card_THOMAS_LIM(p, c); break; case Julien_Forest : - effect_card_JULIEN_FOREST(p, c, coord); + effect_card_JULIEN_FOREST(p, c); break; case Dimitri_Watel : - effect_card_DIMITRI_WATEL(p, c, coord); + effect_card_DIMITRI_WATEL(p, c); break; @@ -359,7 +372,7 @@ void card_effect(board p, card c, int coord) case Eric_Lejeune : - effect_card_ERIC_LEJEUNE(p, c, coord); + effect_card_ERIC_LEJEUNE(p); break; @@ -543,6 +556,11 @@ faction enemy_faction(board p, int num_faction_owner) + + + + + /** *\fn void effect_card_FISE(board p, card c) *\param p de type board @@ -566,6 +584,11 @@ void effect_card_FISE(board p, card c) + + + + + /** *\fn void effect_card_FISA(board p, card c) *\param p de type board @@ -584,7 +607,7 @@ void effect_card_FISA(board p, card c) int count_card = 0; // count_card compte le nombre de cartes retournées sur le plateau - for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE - 1) ; i++) // (BOARD_SIZE*BOARD_SIZE - 1) car il peut y avoir des cartes retournées n'importe où sur le plateau, à cause des effets des autres cartes + for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE) ; i++) // (BOARD_SIZE*BOARD_SIZE) car il peut y avoir des cartes retournées n'importe où sur le plateau, à cause des effets des autres cartes { if ((p->tabBoard[i]).state == FaceUp) { @@ -602,6 +625,11 @@ void effect_card_FISA(board p, card c) + + + + + /** *\fn void effect_card_FC(board p, card c) *\param p de type board @@ -622,7 +650,7 @@ void effect_card_FC(board p, card c) int i = 0; bool ind_FC = false; // ind_FC indique si il y a au moins une carte de type FC retournée sur le plateau CardType t; // t : type de la carte courante retournée de la boucle while - while (i < (BOARD_SIZE*BOARD_SIZE - 1) && !ind_FC) + while (i < (BOARD_SIZE*BOARD_SIZE) && !ind_FC) { if ((p->tabBoard[i]).state == FaceUp) { @@ -645,6 +673,11 @@ void effect_card_FC(board p, card c) + + + + + /** *\fn void effect_card_ECOLOGIIE(board p, card c) *\param p de type board @@ -664,7 +697,7 @@ void effect_card_ECOLOGIIE(board p, card c) int count_card = 0; // count_card compte le nombre de cartes retournées de type FISE, FISA ou FC sur le plateau CardType t; // t : type de la carte courante retournée de la boucle for - for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE - 1); i++) + for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE); i++) { if ((p->tabBoard[i]).state == FaceUp) { @@ -686,6 +719,11 @@ void effect_card_ECOLOGIIE(board p, card c) + + + + + /** *\fn void effect_card_LIIENS(board p) *\param p de type board @@ -704,7 +742,7 @@ void effect_card_LIIENS(board p) CardType t; // t : type de la carte courante retournée de la boucle for - for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE - 1); i++) // Tout d'abord, on retire les cartes de type FISE, FISA, ou FC retournées, et on les ajoute dans card_FISE_FISA_FC + for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE); i++) // Tout d'abord, on retire les cartes de type FISE, FISA, ou FC retournées, et on les ajoute dans card_FISE_FISA_FC { if ((p->tabBoard[i]).state == FaceUp) { @@ -724,10 +762,10 @@ void effect_card_LIIENS(board p) while ( !(is_stack_empty(card_FISE_FISA_FC)) ) // Enfin, on place les cartes de card_FISE_FISA_FC tout en haut à gauche du plateau, dans le même ordre que l'ordre des cartes que l'on retire de card_FISE_FISA_FC { - if ( (p->tabBoard[i]).state == Empty ) // Tout en haut à gauche du plateau, soit il y a des cartes déjà retournées, soit il n'y a pas de cartes sur certains emplacements. De plus, comme les cartes que l'on retire du plateau se trouvent avant la carte de type lIIEns dont l'effet est en train de s'effectuer, avant cette carte, et donc avant les prochaines cartes faces cachées, il y a suffisamment d'emplacements pour les cartes de types FISE, FC ou FISA afin qu'elles soient les prochaines cartes à être retournées + if ( (p->tabBoard[i]).state == Empty ) { - (p->tabBoard[i]).state = FaceDown; - (p->tabBoard[i]).cellCard = pop(card_FISE_FISA_FC); + card c = pop(card_FISE_FISA_FC); + put_card(p, c, i) } i++; } @@ -737,6 +775,10 @@ void effect_card_LIIENS(board p) + + + + /** *\fn void effect_card_SOIREE_SANS_ALCOOL(board p, card c) *\param p de type board @@ -760,7 +802,7 @@ void effect_card_SOIREE_SANS_ALCOOL(board p, card c) bool ind_alcool = false; // ind_alcool indique si il y a au moins une carte de type ALCOOL retournée sur le plateau CardType t; // t : type de la carte courante retournée de la boucle while - while (i < (BOARD_SIZE*BOARD_SIZE - 1) && !ind_alcool) // On vérifie tout d'abord si il y a au moins une cartes de type alcool retournée sur le plateau + while (i < (BOARD_SIZE*BOARD_SIZE) && !ind_alcool) // On vérifie tout d'abord si il y a au moins une cartes de type alcool retournée sur le plateau { if ((p->tabBoard[i]).state == FaceUp) { @@ -775,7 +817,7 @@ void effect_card_SOIREE_SANS_ALCOOL(board p, card c) if (ind_alcool) // Si ind_alcool == true, on supprime toutes les cartes de type FISE, FISA ou FC retournée sur le plateau; et on supprime la première et la dernière ligne { - for (int j = 0; j < (BOARD_SIZE*BOARD_SIZE - 1); j++) // Suppression des cartes de type FISE, FISA ou FC retournée sur le plateau + for (int j = 0; j < (BOARD_SIZE*BOARD_SIZE); j++) // Suppression des cartes de type FISE, FISA ou FC retournée sur le plateau { if ((p->tabBoard[j]).state == FaceUp) { @@ -856,6 +898,11 @@ void effect_card_SOIREE_SANS_ALCOOL(board p, card c) + + + + + /** *\fn void effect_card_ALCOOL(board p, int coord) *\param p de type board @@ -947,6 +994,11 @@ void effect_card_ALCOOL(board p, int coord) + + + + + /** *\fn void effect_card_CAFE(board p, card c) *\param p de type board @@ -967,7 +1019,7 @@ void effect_card_CAFE(board p, card c) bool ind_ecocup = false; // ind_ecocup indique si il y a au moins une carte de type Ecocup retournée sur le plateau CardType t; // t : type de la carte courante retournée de la boucle for - for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE - 1); i++) + for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE); i++) { if ((p->tabBoard[i]).state == FaceUp) { @@ -999,6 +1051,11 @@ void effect_card_CAFE(board p, card c) + + + + + /** *\fn void effect_card_THE(board p, card c) *\param p de type board @@ -1019,7 +1076,7 @@ void effect_card_THE(board p, card c) bool ind_ecocup = false; // ind_ecocup indique si il y a au moins une carte de type Ecocup retournée sur le plateau CardType t; // t : type de la carte courante retournée de la boucle for - for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE - 1); i++) + for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE); i++) { if ((p->tabBoard[i]).state == FaceUp) { @@ -1052,6 +1109,11 @@ void effect_card_THE(board p, card c) + + + + + /** *\fn void effect_card_ECOCUP() *\brief Procédure qui active l'effet d'une carte de type Ecocup : @@ -1067,6 +1129,11 @@ void effect_card_ECOCUP() + + + + + /** *\fn int binom(int k, int n) *\param k de type int @@ -1108,6 +1175,11 @@ int binom(int k, int n) + + + + + /** *\fn void effect_card_REPROGRAPHIE(board p, card c) *\param p de type board @@ -1133,7 +1205,7 @@ void effect_card_REPROGRAPHIE(board p, card c) } CardType t; // t : type de la carte courante retournée de la boucle for - for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE - 1); i++) // On détermine le nombre d'occurrences de chaque carte qui est retournée sur le plateau + for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE); i++) // On détermine le nombre d'occurrences de chaque carte qui est retournée sur le plateau { if ((p->tabBoard[i]).state == FaceUp) { @@ -1159,6 +1231,11 @@ void effect_card_REPROGRAPHIE(board p, card c) + + + + + /** *\fn void effect_card_ISOLATION_DU_BATIMENT(board p, card c, int coord) *\param p de type board @@ -1217,6 +1294,11 @@ void effect_card_ISOLATION_DU_BATIMENT(board p, card c, int coord) + + + + + /** *\fn void effect_card_PARCOURS_SOBRIETE_NUMERIQUE(board p) *\param p de type board @@ -1268,6 +1350,11 @@ void effect_card_PARCOURS_SOBRIETE_NUMERIQUE(board p) + + + + + /** *\fn void effect_card_HEURES_SUPPLEMENTAIRES(board p, card c) *\param p de type board @@ -1287,7 +1374,7 @@ void effect_card_HEURES_SUPPLEMENTAIRES(board p, card c) int count_h_supp = 0; // count_h_supp compte le nombre de cartes de type Heures_supplementaires retournées sur le plateau CardType t; // t : type de la carte courante retournée de la boucle for - for (int i = 0; i <= (BOARD_SIZE*BOARD_SIZE - 1); i++) + for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE); i++) { if ((p->tabBoard[i]).state == FaceUp) { @@ -1307,6 +1394,11 @@ void effect_card_HEURES_SUPPLEMENTAIRES(board p, card c) + + + + + /** *\fn void effect_card_KAHINA_BOUCHAMA(board p, int coord) *\param p de type board @@ -1338,7 +1430,7 @@ void effect_card_KAHINA_BOUCHAMA(board p, int coord) int i = coord + 1; bool indicator = false; // indicator indique si la random_cardième carte après celle qui a pour coordonnée 1D coord a été retirée - while ( i < (BOARD_SIZE*BOARD_SIZE) && !indicator) + while ( i < (BOARD_SIZE*BOARD_SIZE) && (!indicator) ) { if ((p->tabBoard[i]).state == FaceDown && random_card == 1) { @@ -1356,6 +1448,11 @@ void effect_card_KAHINA_BOUCHAMA(board p, int coord) + + + + + /** *\fn void effect_card_KEVIN_GOILARD(board p, card c) *\param p de type board @@ -1433,14 +1530,24 @@ void effect_card_KEVIN_GOILARD(board p, card c) + + + + + // Définition d'un type struct qui sera utilisé uniquement par la fonction effect_card_MASSINISSA_MERABET() // Ce type permet de réunir une carte c et sa coordonnée coord dans un seul objet de type pair_card_coord +/** + * \struct pair_card_coord + * \brief Un objet ayant ce type correspond à un couple (card_in_coord, coord_card) où card_in_coord est une carte étant sur le plateau de jeu à la coordonnée coord_card + */ + typedef struct pair_card_coord { card card_in_coord; - int coord_card; // coordonnée de c sur le plateau + int coord_card; } pair_card_coord; @@ -1507,6 +1614,11 @@ pair_card_coord effect_card_MASSINISSA_MERABET(board p, card c, int coord) + + + + + /** *\fn void effect_card_VITERA_Y(board p, card c) *\param p de type board @@ -1542,6 +1654,11 @@ void effect_card_VITERA_Y(board p, card c) + + + + + /** *\fn void effect_card_JONAS_SENIZERGUES(board p) *\param p de type board @@ -1555,7 +1672,7 @@ void effect_card_JONAS_SENIZERGUES(board p) { CardType t; // t : type de la carte courante retournée de la boucle for - for (int i = 0; i < BOARD_SIZE*BOARD_SIZE; i++) + for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE); i++) { if ( (p->tabBoard[i]).state == FaceUp ) { @@ -1572,6 +1689,11 @@ void effect_card_JONAS_SENIZERGUES(board p) + + + + + /** *\fn void effect_card_FETIA_BANNOUR(board p, card c, int coord) *\param p de type board @@ -1579,7 +1701,7 @@ void effect_card_JONAS_SENIZERGUES(board p) *\param coord de type int *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Fetia Bannour, sur le plateau p : * "Si la carte Heures supplémentaires est retournée sur le plateau, - * supprimez toutes les cartes de la ligne et de la colonne où est posée cette carte (y compris celle-ci). + * supprimez toutes les cartes de la ligne et de la colonne où est posée cette carte Fétia Bannour (y compris celle-ci). * Sinon la faction qui a posé cette carte gagne 1 point DDRS par carte Catherine Dubois, Anne-Laure Ligozat, Guillaume Burel, * Christophe Mouilleron, Thomas Lim, Julien Forest et Dimitri Watel retournée sur le plateau." *\return rien @@ -1601,7 +1723,7 @@ void effect_card_FETIA_BANNOUR(board p, card c, int coord) CardType t; // t : type de la carte courante retournée de la boucle while - while (i < (BOARD_SIZE*BOARD_SIZE -1) && (!ind_h_supp) ) + while (i < (BOARD_SIZE*BOARD_SIZE) && (!ind_h_supp) ) { if ( (p->tabBoard[i]).state == FaceUp ) { @@ -1616,7 +1738,7 @@ void effect_card_FETIA_BANNOUR(board p, card c, int coord) } - // Ensuite, premier cas : ind_h_supp == true + // Ensuite, premier cas : ind_h_supp == true, on supprime toutes les cartes de la ligne et de la colonne où est posée la carte c de type Fetia_Bannour if (ind_h_supp) { @@ -1673,6 +1795,11 @@ void effect_card_FETIA_BANNOUR(board p, card c, int coord) + + + + + /** *\fn void effect_card_CATHERINE_DUBOIS(board p, int coord) *\param p de type board @@ -1741,6 +1868,11 @@ void effect_card_CATHERINE_DUBOIS(board p, int coord) + + + + + /** *\fn void effect_card_ANNE_LAURE_LIGOZAT(board p, card c) *\param p de type board @@ -1802,23 +1934,36 @@ void effect_card_ANNE_LAURE_LIGOZAT(board p, card c) + + + + + /** - *\fn void effect_card_GUILLAUME_BUREL(board p, card c, int coord) + *\fn void effect_card_GUILLAUME_BUREL(board p, card c) *\param p de type board *\param c de type card - *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Guillaume Burel, sur le plateau p : + *\brief Procédure qui active l'effet d'une carte c, de type Guillaume Burel, sur le plateau p : * "Si la faction adverse de celle qui a posé cette carte a plus de points DDRS, la seconde lui vole 3 points DDRS." *\return rien */ -void effect_card_GUILLAUME_BUREL(board p, card c, int coord) +void effect_card_GUILLAUME_BUREL(board p, card c) { int num_faction_owner = get_card_factionOwner(c); faction faction_owner = p->factions[num_faction_owner]; faction faction_enemy = enemy_faction(p, num_faction_owner); + int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); + int f_enemy_ptsddrs = get_faction_ptsDDRS(faction_enemy); + + if ( f_enemy_ptsddrs > f_owner_ptsddrs) + { + set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + 3 ); + set_faction_ptsDDRS(faction_enemy, f_enemy_ptsddrs - 3 ); + } + } @@ -1830,125 +1975,346 @@ void effect_card_GUILLAUME_BUREL(board p, card c, int coord) +/** + *\fn void effect_card_CHRISTOPHE_MOUILLERON(board p) + *\param p de type board + *\brief Procédure qui active l'effet d'une carte de type Christophe Mouilleron, sur le plateau p : + * "Si la carte Heures supplémentaires est retournée sur le plateau, + * supprimez toutes les cartes retournées du plateau sauf les cartes Christophe Mouilleron et Heures supplémentaires." + *\return rien + */ +void effect_card_CHRISTOPHE_MOUILLERON(board p) +{ + // Tout d'abord, on regarde si la carte Heures supplémentaires est retournée sur le plateau + int i = 0; + bool ind_h_supp = false; //ind_h_supp indique si la carte Heures supplémentaires est retournée sur le plateau + CardType t; // t : type de la carte courante retournée de la boucle while + while (i < (BOARD_SIZE*BOARD_SIZE) && (!ind_h_supp) ) + { + if ( (p->tabBoard[i]).state == FaceUp ) + { + t = get_card_type((p->tabBoard[i]).cellCard); + if (t == Heures_supplementaires) + { + ind_h_supp = true; + } + } + i++; + } + // Ensuite, si ind_h_supp == true, on supprime toutes les cartes retournées du plateau sauf les cartes de type Christophe_Mouilleron et Heures_supplementaires -/** - *\fn void effect_card_CHRISTOPHE_MOUILLERON(board p, card c, int coord) - *\param p de type board - *\param c de type card - *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Christophe Mouilleron, sur le plateau p : - * "Si la carte Heures supplémentaires est retournée sur le plateau, - * supprimez toutes les cartes retournées du plateau sauf les cartes Christophe Mouilleron et Heures supplémentaires." - *\return rien - */ + for (int j = 0; j < (BOARD_SIZE*BOARD_SIZE); j++) + { + if ( (p->tabBoard[j]).state == FaceUp ) + { + t = get_card_type((p->tabBoard[j]).cellCard); + + if ( t != Christophe_Mouilleron && t != Heures_supplementaires ) + { + (p->tabBoard[j]).state = Empty + } + } + + } -void effect_card_CHRISTOPHE_MOUILLERON(board p, card c, int coord) -{ - int num_faction_owner = get_card_factionOwner(c); - faction faction_owner = p->factions[num_faction_owner]; - faction faction_enemy = enemy_faction(p, num_faction_owner); } + + + + + + + + /** - *\fn void effect_card_THOMAS_LIM(board p, card c, int coord) + *\fn void effect_card_THOMAS_LIM(board p, card c) *\param p de type board *\param c de type card - *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Thomas Lim, sur le plateau p : + *\brief Procédure qui active l'effet d'une carte c, de type Thomas Lim, sur le plateau p : * "Si Julien Forest n'est par retourné sur le plateau, la faction qui a posé cette carte gagne 3 points DDRS par carte FISE retournée sur le plateau. * Sinon la faction adverse perd 1 point DDRS par carte FISE retournée sur le plateau." *\return rien */ -void effect_card_THOMAS_LIM(board p, card c, int coord) +void effect_card_THOMAS_LIM(board p, card c) { int num_faction_owner = get_card_factionOwner(c); faction faction_owner = p->factions[num_faction_owner]; faction faction_enemy = enemy_faction(p, num_faction_owner); -} + int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); + int f_enemy_ptsddrs = get_faction_ptsDDRS(faction_enemy); -/** - *\fn void effect_card_JULIEN_FOREST(board p, card c, int coord) - *\param p de type board - *\param c de type card - *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Julien Forest, sur le plateau p : - * "La faction qui a posé cette carte gagne 6 points DDRS par carte FISE retournée sur le plateau si au moins une carte Café est retournée sur le plateau." - *\return rien - */ + // Tout d'abord, on regarde si la carte Julien Forest est retournée sur le plateau + bool ind_julien_forest = false; //ind_julien_forest indique si la carte Julien Forest est retournée sur le plateau + int count_fise = 0; // count_fise compte le nombre de cartes de type FISE retournées sur le plateau + + CardType t; // t : type de la carte courante retournée de la boucle for -void effect_card_JULIEN_FOREST(board p, card c, int coord) -{ - int num_faction_owner = get_card_factionOwner(c); - faction faction_owner = p->factions[num_faction_owner]; - faction faction_enemy = enemy_faction(p, num_faction_owner); -} + for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE); i++ ) + { + if ( (p->tabBoard[i]).state == FaceUp ) + { + t = get_card_type((p->tabBoard[i]).cellCard); + if (t == Julien_Forest) + { + ind_julien_forest = true; + } + + if ( t == FISE ) + { + count_fise += 1; + } + } -/** - *\fn void effect_card_DIMITRI_WATEL(board p, card c, int coord) - *\param p de type board - *\param c de type card - *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Dimitri Watel, sur le plateau p : - * "La faction qui a posé cette carte gagne 3 points DDRS par carte FISA ou FC retournée sur le plateau si au moins une carte Thé est retournée sur le plateau." - *\return rien - */ + } -void effect_card_DIMITRI_WATEL(board p, card c, int coord) -{ - int num_faction_owner = get_card_factionOwner(c); - faction faction_owner = p->factions[num_faction_owner]; - faction faction_enemy = enemy_faction(p, num_faction_owner); + // Ensuite, si count_fise != 0, alors f_owner_ptsddrs ou f_enemy_ptsddrs est modifié en fonction de la valeur de ind_julien_forest + + + if ( count_fise ) + { + + if ( !ind_julien_forest ) + { + set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + 3 * count_fise ); + } + + else + { + set_faction_ptsDDRS(faction_enemy, f_enemy_ptsddrs - count_fise ); + } + + } } + + + + + + + + /** - *\fn void effect_card_DJIBRIL_AURELIEN_DEMBELE_CABOT(board p, card c, int coord) + *\fn void effect_card_JULIEN_FOREST(board p, card c) *\param p de type board *\param c de type card - *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Djibril-Aurélien Dembele-Cabot, sur le plateau p : - * "S'il y a plus de 3 cartes retournées sur la ligne de cette carte, la faction qui a posé cette carte gagne 5 points DDRS." + *\brief Procédure qui active l'effet d'une carte c, de type Julien Forest, sur le plateau p : + * "La faction qui a posé cette carte gagne 6 points DDRS par carte FISE retournée sur le plateau si au moins une carte Café est retournée sur le plateau." *\return rien */ -void effect_card_DJIBRIL_AURELIEN_DEMBELE_CABOT(board p, card c, int coord) +void effect_card_JULIEN_FOREST(board p, card c) { int num_faction_owner = get_card_factionOwner(c); faction faction_owner = p->factions[num_faction_owner]; - faction faction_enemy = enemy_faction(p, num_faction_owner); + int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); -} + // Tout d'abord, on regarde si la carte Café est retournée sur le plateau -/** - *\fn void effect_card_ERIC_LEJEUNE(board p, card c, int coord) - *\param p de type board - *\param c de type card - *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Éric Lejeune, sur le plateau p : - * "Prenez au hasard 5 cartes retournées du plateau (ou toutes les cartes retournées du plateau s'il y a moins de 5). + bool ind_cafe = false; //ind_cafe indique si la carte Café est retournée sur le plateau + int count_fise = 0; // count_fise compte le nombre de cartes de type FISE retournées sur le plateau + + CardType t; // t : type de la carte courante retournée de la boucle for + + + for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE); i++ ) + { + if ( (p->tabBoard[i]).state == FaceUp ) + { + t = get_card_type((p->tabBoard[i]).cellCard); + if (t == Cafe) + { + ind_cafe = true; + } + + if ( t == FISE ) + { + count_fise += 1; + } + + } + + } + + // Ensuite, si count_fise != 0 et si ind_cafe == true, alors f_owner_ptsddrs est modifié + + + if ( count_fise && ind_cafe ) + { + + set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + 6 * count_fise ); + + } + + +} + + + + + + + + + + +/** + *\fn void effect_card_DIMITRI_WATEL(board p, card c) + *\param p de type board + *\param c de type card + *\brief Procédure qui active l'effet d'une carte c, de type Dimitri Watel, sur le plateau p : + * "La faction qui a posé cette carte gagne 3 points DDRS par carte FISA ou FC retournée sur le plateau si au moins une carte Thé est retournée sur le plateau." + *\return rien + */ + + +void effect_card_DIMITRI_WATEL(board p, card c) +{ + + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); + + + // Tout d'abord, on regarde si la carte Thé est retournée sur le plateau + + bool ind_the = false; //ind_the indique si la carte Thé est retournée sur le plateau + int count_fisa_fc = 0; // count_fisa_fc compte le nombre de cartes de type FISE retournées sur le plateau + + CardType t; // t : type de la carte courante retournée de la boucle for + + + for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE); i++ ) + { + if ( (p->tabBoard[i]).state == FaceUp ) + { + t = get_card_type((p->tabBoard[i]).cellCard); + if (t == The) + { + ind_the = true; + } + + if ( t == FISE ) + { + count_fisa_fc += 1; + } + + } + + } + + // Ensuite, si count_fisa_fc != 0 et si ind_the == true, alors f_owner_ptsddrs est modifié + + + if ( count_fisa_fc && ind_the ) + { + + set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + 3 * count_fisa_fc ); + + } + + +} + + + + + + + + + + +/** + *\fn void effect_card_DJIBRIL_AURELIEN_DEMBELE_CABOT(board p, card c, int coord) + *\param p de type board + *\param c de type card + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Djibril-Aurélien Dembele-Cabot, sur le plateau p : + * "S'il y a plus de 3 cartes retournées sur la ligne de cette carte, la faction qui a posé cette carte gagne 5 points DDRS." + *\return rien + */ + + +void effect_card_DJIBRIL_AURELIEN_DEMBELE_CABOT(board p, card c, int coord) +{ + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); + + int x = coord/BOARD_SIZE; // x représente le numéro de la ligne sur laquelle se trouve x + + + // Tout d'abord, on regarde si il y a plus de 3 cartes retournées sur la xième ligne du plateau + + int count = 0; // count compte le nombre de cartes retournées sur la xième ligne du plateau + int y = 0; + + while ( y < BOARD_SIZE && count < 3 ) + { + if ( (p->tabBoard[x*BOARD_SIZE + y]).state == FaceUp ) + { + + count += 1; + + } + + y += 1; + + } + + + // Ensuite, en fonction de la valeur de count, on modifie ou non la valeur de f_owner_ptsddrs + + if ( count >= 3) + { + + set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + 5); + + } + + +} + + + + + + + + + + +/** + *\fn void effect_card_ERIC_LEJEUNE(board p) + *\param p de type board + *\brief Procédure qui active l'effet d'une carte de type Éric Lejeune, sur le plateau p : + * "Prenez au hasard 5 cartes retournées du plateau qui ne sont pas Éric Lejeune (ou toutes les cartes retournées du plateau s'il y a moins de 5). * Si une de ces cartes est une carte Catherine Dubois, Anne-Laure Ligozat, Guillaume Burel, Christophe Mouilleron, * Thomas Lim, Julien Forest ou Dimitri Watel, mélangez les et placez les à gauche de la case la plus à gauche de la première ligne. * Les prochaines cartes à être retournées sont ces cartes là . Sinon, supprimez ces cartes du plateau." @@ -1956,15 +2322,370 @@ void effect_card_DJIBRIL_AURELIEN_DEMBELE_CABOT(board p, card c, int coord) */ -void effect_card_ERIC_LEJEUNE(board p, card c, int coord) +push(card_FISE_FISA_FC, current_card); +card c = pop(card_FISE_FISA_FC); +put_card(p, c, i) + + + +void effect_card_ERIC_LEJEUNE(board p) { - int num_faction_owner = get_card_factionOwner(c); - faction faction_owner = p->factions[num_faction_owner]; - faction faction_enemy = enemy_faction(p, num_faction_owner); + + // Remarque : afin d'éviter les cas où un round peut avoir une durée infinie, on décide de ne jamais prendre de carte de type Eric_Lejeune sur le plateau si il y en a au moins une qui est retournée + + + Stack stack_card = empty_stack(); // stack_card représentera le paquet de 5 cartes au maximum, et de cartes qui étaient retournées sur le plateau, et qu'on a retirées du plateau + CardType t; // t : type de la carte courante retournée des boucles while et for + bool indicator = false; // indicator indiquera si parmi les cartes choisies au hasard, il y en a au moins une de type Catherine_Dubois, Anne_Laure_Ligozat, Guillaume_Burel, Christophe_Mouilleron, Thomas_Lim, Julien_Forest ou Dimitri_Watel + + + // Détermination du nombre total de cartes retournées et n'ayant pas le type Eric_Lejeune restantes sur le plateau + + + int count_card = 0; + CardType t; // t : type de la carte courante retournée des boucles while et for + + + for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE) ) + { + + if ( (p->tabBoard[i]).state == FaceUp ) + { + + t = get_card_type((p->tabBoard[i]).cellCard); + + if ( t != Eric_Lejeune) + { + + count_card += 1; + + } + + } + + } + + + // Détermination au hasard de 5 cartes retournées sur le plateau + + + // n1, n2, n3, n4, n5 correspondent aux numéros des 5 cartes retournées choisies au hasard sur le plateau + int n1; + int n2; + int n3; + int n4; + int n5; + + + // Plusieurs cas possibles en fonction de la valeur de count_card + + int j = 0; + card current_card; // current_card : carte courante retournée des boucles while + + if ( count_card == 1 ) + { + n1 = 1; + + // Recherche de la seule carte retournée sur le plateau (dont le type n'est pas Eric_Lejeune) + + while ( j < (BOARD_SIZE*BOARD_SIZE) && n1 == 1 ) + { + + if ( (p->tabBoard[j]).state == FaceUp ) + { + + current_card = (p->tabBoard[j]).cellCard; + t = get_card_type(current_card); + + if (t != Eric_Lejeune) + { + + push(stack_card, current_card); + n1 -= 1; + + } + + + } + + j ++; + + } + + + } + + + j = 0; + + + if ( count_card == 2 ) + { + + n2 = 2; // n1 n'est pas nécessaire ici, uniquement la valeur de n2 suffit dans la recherche des deux cartes retournées sur le plateau (or Éric Lejeune), car n2 == count_card <= 5 + + // Recherche des deux seules cartes retournées sur le plateau (dont les types ne sont pas égaux à Eric_Lejeune) + + while ( j < (BOARD_SIZE*BOARD_SIZE) && n2 >= 1 ) + { + + if ( (p->tabBoard[j]).state == FaceUp ) + { + + current_card = (p->tabBoard[j]).cellCard; + t = get_card_type(current_card); + + if (t != Eric_Lejeune) + { + + push(stack_card, current_card); + n2 -= 1; + + } + + + } + + j ++; + + } + + + } + + + j = 0; + + + if ( count_card == 3 ) + { + + n3 = 3; // n1 et n2 ne sont pas nécessaires ici, uniquement la valeur de n3 suffit dans la recherche des deux cartes retournées sur le plateau (or Éric Lejeune), car n3 == count_card <= 5 + + // Recherche des trois seules cartes retournées sur le plateau (dont les types ne sont pas égaux à Eric_Lejeune) + + while ( j < (BOARD_SIZE*BOARD_SIZE) && n3 >= 1 ) + { + + if ( (p->tabBoard[j]).state == FaceUp ) + { + + current_card = (p->tabBoard[j]).cellCard; + t = get_card_type(current_card); + + if (t != Eric_Lejeune) + { + + push(stack_card, current_card); + n3 -= 1; + + } + + + } + + j ++; + + } + + + } + + + j = 0; + + + if ( count_card == 4 ) + { + + n4 = 4; // n1, n2 et n3 ne sont pas nécessaires ici, uniquement la valeur de n4 suffit dans la recherche des deux cartes retournées sur le plateau (or Éric Lejeune), car n4 == count_card <= 5 + + // Recherche des quatre seules cartes retournées sur le plateau (dont les types ne sont pas égaux à Eric_Lejeune) + + while ( j < (BOARD_SIZE*BOARD_SIZE) && n4 >= 1 ) + { + + if ( (p->tabBoard[j]).state == FaceUp ) + { + + current_card = (p->tabBoard[j]).cellCard; + t = get_card_type(current_card); + + if (t != Eric_Lejeune) + { + + push(stack_card, current_card); + n4 -= 1; + + } + + + } + + j ++; + + } + + + } + + + j = 0; + + + if ( count_card == 5 ) + { + + n5 = 5; // n1, n2, n3 et n4 ne sont pas nécessaires ici, uniquement la valeur de n5 suffit dans la recherche des deux cartes retournées sur le plateau (or Éric Lejeune), car n5 == count_card <= 5 + + // Recherche des cinq seules cartes retournées sur le plateau (dont les types ne sont pas égaux à Eric_Lejeune) + + while ( j < (BOARD_SIZE*BOARD_SIZE) && n5 >= 1 ) + { + + if ( (p->tabBoard[j]).state == FaceUp ) + { + + current_card = (p->tabBoard[j]).cellCard; + t = get_card_type(current_card); + + if (t != Eric_Lejeune) + { + + push(stack_card, current_card); + n5 -= 1; + + } + + + } + + j ++; + + } + + + } + + + j = 0; + + + if ( count_card > 5 ) + { + srand(time(NULL)); + n1 = (rand() % count_card) + 1; + n2 = (rand() % count_card) + 1; + n3 = (rand() % count_card) + 1; + n4 = (rand() % count_card) + 1; + n5 = (rand() % count_card) + 1; + + while ( n2 == n1 ) + { + + n2 = (rand() % count_card) + 1; + + } + + + + while ( n3 == n2 || n3 == n1 ) + { + + n3 = (rand() % count_card) + 1; + + } + + + + while ( n4 == n3 || n4 == n2 || n4 == n1 ) + { + + n4 = (rand() % count_card) + 1; + + } + + + + while ( n5 == n4 || n5 == n3 || n5 == n2 || n5 == n1 ) + { + + n5 = (rand() % count_card) + 1; + + } + + + // Recherche des cinq cartes retournées sur le plateau choisies aléatoirement (dont les types ne sont pas égaux à Eric_Lejeune) + + + while ( j < (BOARD_SIZE*BOARD_SIZE) && (n1 >= 1 || n2 >= 1 || n3 >= 1 || n4 >= 1 || n5 >= 1) ) + { + + if ( (p->tabBoard[j]).state == FaceUp && (n1 == 1 || n2 == 1 || n3 == 1 || n4 == 1 || n5 == 1) ) + { + + current_card = (p->tabBoard[j]).cellCard; + t = get_card_type(current_card); + + if (t != Eric_Lejeune) + { + + push(stack_card, current_card); + + } + + + } + + j ++; + n1 --; + n2 --; + n3 --; + n4 --; + n5 --; + + } + + + } + + + + // Enfin, si indicator == true, on mélange stack_card, et on replace les cartes de stack_card sur le plateau, tout en haut à gauche, en ayant leurs faces cachées + + + if (indicator) + { + + shuffle_stack(stack_card); + + int i = 0; + + while ( !(is_stack_empty(stack_card)) ) + { + if ( (p->tabBoard[i]).state == Empty ) + { + card c = pop(stack_card); + put_card(p, c, i) + } + i++; + } + + + } + } + + + + + + + + /** *\fn void effect_card_LUCIENNE_PACAVE(board p, card c, int coord) *\param p de type board @@ -1978,13 +2699,81 @@ void effect_card_ERIC_LEJEUNE(board p, card c, int coord) void effect_card_LUCIENNE_PACAVE(board p, card c, int coord) { + int num_faction_owner = get_card_factionOwner(c); faction faction_owner = p->factions[num_faction_owner]; - faction faction_enemy = enemy_faction(p, num_faction_owner); + int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); + + int x = coord/BOARD_SIZE; // x est le numéro de la ligne sur laquelle est c + int y = coord - x*BOARD_SIZE; // y est le numéro de la colonne sur laquelle est c + + + // Tout d'abord, on regarde si il y a au moins une carte FISA retournée sur la xième ligne ou sur la yième colonne du plateau + + + bool ind_fisa = false; // ind_fisa indique si il y a au moins une carte FISA retournée sur la xième ligne ou sur la yième colonne du plateau + + int k = 0; + CardType t; // t : type de la carte courante retournée de la boucle while + + while ( k < BOARD_SIZE && (!ind_fisa) ) + { + + if ( (p->tabBoard[x*BOARD_SIZE + k]).state == FaceUp ) + { + + t = get_card_type((p->tabBoard[x*BOARD_SIZE + k]).cellCard); + + if ( t == FISA ) + { + + ind_fisa = true; + + } + + } + + + + if ( (p->tabBoard[k*BOARD_SIZE + y]).state == FaceUp ) + { + + t = get_card_type((p->tabBoard[k*BOARD_SIZE + y]).cellCard); + + if ( t == FISA ) + { + + ind_fisa = true; + + } + } + + k += 1; + + } + + + // Ensuite, si ind_fisa == true, on modifie f_owner_ptsddrs + + if ( ind_fisa ) + { + + set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + 5); + + } + } + + + + + + + + /** *\fn void effect_card_KATRIN_SALHAB(board p, card c, int coord) *\param p de type board @@ -2002,7 +2791,77 @@ void effect_card_KATRIN_SALHAB(board p, card c, int coord) { int num_faction_owner = get_card_factionOwner(c); faction faction_owner = p->factions[num_faction_owner]; - faction faction_enemy = enemy_faction(p, num_faction_owner); + int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); + + + // Tout d'abord, on regarde si les cartes Djibril-Aurélien Djembele-Cabeau, Eric Lejeune et Lucienne Pacavé sont retournées sur le plateau + + bool ind_d_a_d_c = false; // ind_d_a_d_c indique si la carte Djibril-Aurélien Djembele-Cabeau est retournée sur le plateau + bool ind_e_l = false; // ind_e_l indique si la carte Eric Lejeune est retournée sur le plateau + bool ind_l_p = false; // ind_l_p indique si la carte Lucienne Pacavé est retournée sur le plateau + + int i = 0; + CardType t; // t : type de la carte courante retournée de la boucle while + + + while ( i < BOARD_SIZE*BOARD_SIZE && ( (!ind_d_a_d_c) || (!ind_e_l) || (!ind_l_p) ) ) + { + + if ( (p->tabBoard[i]).state == FaceUp ) + { + + t = get_card_type((p->tabBoard[i]).cellCard); + + switch(t) + { + + case Djibril_Aurelien_Dembele_Cabot : + ind_d_a_d_c = true; + break; + + case Eric_Lejeune : + ind_e_l = true; + break; + + case Lucienne_Pacave : + ind_l_p = true; + break; + + default: ; + + } + + + } + + i += 1; + + } + + + // Ensuite, en fonction des valeurs de ind_d_a_d_c , ind_e_l et ind_l_p, soit la valeur de f_owner_ptsddrs est modifiée, soit on retourne les cartes étant sur la même ligne que c + + if ( ind_d_a_d_c && ind_e_l && ind_l_p ) + { + + set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + 10); + + } + + else + { + + int x = coord/BOARD_SIZE; + + for (int y = 0; y < BOARD_SIZE; y++) + { + + (p->tabBoard[x*BOARD_SIZE + y]).state = FaceUp; + + } + + } + } -- GitLab From 5bcdf455e830ac0750435e3ff7cdda5483064e18 Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Thu, 28 Apr 2022 01:32:30 +0200 Subject: [PATCH 104/163] Tache B.7 : correction de messages d'erreur --- src/plateau.c | 613 +++++++++++++++++++++----------------------------- 1 file changed, 261 insertions(+), 352 deletions(-) diff --git a/src/plateau.c b/src/plateau.c index 32f07de..8349d32 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -176,344 +176,6 @@ void put_card(board p, card c, int coord) (p->tabBoard[coord]).cellCard = c; (p->tabBoard[coord]).state = FaceDown; } - - - - - -/** - *\fn void card_effect(board p, card c, int coord) - *\param p de type board - *\param c de type card - *\param coord de type int - *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, sur le plateau p - *\return rien - */ - -void card_effect(board p, card c, int coord) -{ - CardType type = get_card_type(c); - - switch(type) - { - case FISE : - effect_card_FISE(p, c); - break; - - - - case FISA : - effect_card_FISA(p, c); - break; - - - - case FC : - effect_card_FC(p, c); - break; - - - - case EcologIIE : - effect_card_ECOLOGIIE(p, c); - break; - - - - case lIIEns : - effect_card_LIIENS(p); - break; - - - - case Soiree_sans_alcool : - effect_card_SOIREE_SANS_ALCOOL(p, c); - break; - - - - case Alcool : - effect_card_ALCOOL(p, coord); - break; - - - - case Cafe : - effect_card_CAFE(p, c); - break; - - - - case The : - effect_card_THE(p, c); - break; - - - - case Ecocup : - effect_card_ECOCUP(); - break; - - - - case Reprographie : - effect_card_REPROGRAPHIE(p, c); - break; - - - - case Isolation_du_batiment : - effect_card_ISOLATION_DU_BATIMENT(p, c, coord); - break; - - - - case Parcours_sobriete_numerique : - effect_card_PARCOURS_SOBRIETE_NUMERIQUE(p); - break; - - - - case Heures_supplementaires : - effect_card_HEURES_SUPPLEMENTAIRES(p, c); - break; - - - - case Kahina_Bouchama : - effect_card_KAHINA_BOUCHAMA(p, coord); - break; - - - - case Kevin_Goilard : - effect_card_KEVIN_GOILARD(p, c, coord); - break; - - - - case Massinissa_Merabet : - - pair_card_coord pcc = effect_card_MASSINISSA_MERABET(p, c, coord); - - if (pcc.coord_card != -1) // Si pcc.coord_card != -1, alors avant la carte c de type Massinissa_Merabet, il y a au moins une carte retournée, et donc on active l'effet de la dernière carte retournée avant c (qui est pcc.coord_card) - { - card_effect(p, pcc.card_in_coord, pcc.coord_card); - } - - break; - - - - case Vitera_Y : - effect_card_VITERA_Y(p, c); - break; - - - - case Jonas_Senizergues : - effect_card_JONAS_SENIZERGUES(p); - break; - - - - case Fetia_Bannour : - effect_card_FETIA_BANNOUR(p, c, coord); - break; - - - - case Catherine_Dubois : - effect_card_CATHERINE_DUBOIS(p, coord); - break; - - - - case Anne_Laure_Ligozat : - effect_card_ANNE_LAURE_LIGOZAT(p, c); - break; - - - - case Guillaume_Burel : - effect_card_GUILLAUME_BUREL(p, c); - break; - - - - case Christophe_Mouilleron : - effect_card_CHRISTOPHE_MOUILLERON(p); - break; - - - - case Thomas_Lim : - effect_card_THOMAS_LIM(p, c); - break; - - - - case Julien_Forest : - effect_card_JULIEN_FOREST(p, c); - break; - - - - case Dimitri_Watel : - effect_card_DIMITRI_WATEL(p, c); - break; - - - - case Djibril_Aurelien_Dembele_Cabot : - effect_card_DJIBRIL_AURELIEN_DEMBELE_CABOT(p, c, coord); - break; - - - - case Eric_Lejeune : - effect_card_ERIC_LEJEUNE(p); - break; - - - - case Lucienne_Pacave : - effect_card_LUCIENNE_PACAVE(p, c, coord); - break; - - - - case Katrin_Salhab : - effect_card_KATRIN_SALHAB(p, c, coord); - break; - - - - case Laurent_Prevel : - effect_card_LAURENT_PREVEL(p, c, coord); - break; - - - default: ; - } - return; -} - -card turn_over_card(board p) -{ - card current = ((p->tabBoard[0]).cellCard); - int index =0; - while ( ((p->tabBoard[0]).state == Empty || (p->tabBoard[0]).state == FaceUp) && index < BOARD_SIZE) /* S'arrête quand on tombe sur une carte FaceDown*/ - { - index += 1; - current = (p->tabBoard[index]).cellCard; - } - if (index == BOARD_SIZE) - { - return NULL; - } - if (current != NULL) - { - card_effect(p, current, index); - } - return current; -} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -529,10 +191,9 @@ card turn_over_card(board p) +/*** LES EFFETS DES CARTES (32 cartes) ***/ - -/*** LES EFFETS DES CARTES (32 cartes) ***/ /** *\fn faction enemy_faction(board p, int num_faction_owner) @@ -765,7 +426,7 @@ void effect_card_LIIENS(board p) if ( (p->tabBoard[i]).state == Empty ) { card c = pop(card_FISE_FISA_FC); - put_card(p, c, i) + put_card(p, c, i); } i++; } @@ -1679,7 +1340,7 @@ void effect_card_JONAS_SENIZERGUES(board p) t = get_card_type((p->tabBoard[i]).cellCard); if (t == Heures_supplementaires) { - (p->tabBoard[i]).state == Empty; + (p->tabBoard[i]).state = Empty; } } } @@ -2020,7 +1681,7 @@ void effect_card_CHRISTOPHE_MOUILLERON(board p) if ( t != Christophe_Mouilleron && t != Heures_supplementaires ) { - (p->tabBoard[j]).state = Empty + (p->tabBoard[j]).state = Empty; } } @@ -2322,12 +1983,6 @@ void effect_card_DJIBRIL_AURELIEN_DEMBELE_CABOT(board p, card c, int coord) */ -push(card_FISE_FISA_FC, current_card); -card c = pop(card_FISE_FISA_FC); -put_card(p, c, i) - - - void effect_card_ERIC_LEJEUNE(board p) { @@ -2335,7 +1990,6 @@ void effect_card_ERIC_LEJEUNE(board p) Stack stack_card = empty_stack(); // stack_card représentera le paquet de 5 cartes au maximum, et de cartes qui étaient retournées sur le plateau, et qu'on a retirées du plateau - CardType t; // t : type de la carte courante retournée des boucles while et for bool indicator = false; // indicator indiquera si parmi les cartes choisies au hasard, il y en a au moins une de type Catherine_Dubois, Anne_Laure_Ligozat, Guillaume_Burel, Christophe_Mouilleron, Thomas_Lim, Julien_Forest ou Dimitri_Watel @@ -2346,7 +2000,7 @@ void effect_card_ERIC_LEJEUNE(board p) CardType t; // t : type de la carte courante retournée des boucles while et for - for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE) ) + for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE); i++ ) { if ( (p->tabBoard[i]).state == FaceUp ) @@ -2666,7 +2320,7 @@ void effect_card_ERIC_LEJEUNE(board p) if ( (p->tabBoard[i]).state == Empty ) { card c = pop(stack_card); - put_card(p, c, i) + put_card(p, c, i); } i++; } @@ -2914,3 +2568,258 @@ void effect_card_LAURENT_PREVEL(board p, card c, int coord) } } + + + + + + + + + + +/** + *\fn void card_effect(board p, card c, int coord) + *\param p de type board + *\param c de type card + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, sur le plateau p + *\return rien + */ + +void card_effect(board p, card c, int coord) +{ + CardType type = get_card_type(c); + + switch(type) + { + case FISE : + effect_card_FISE(p, c); + break; + + + + case FISA : + effect_card_FISA(p, c); + break; + + + + case FC : + effect_card_FC(p, c); + break; + + + + case EcologIIE : + effect_card_ECOLOGIIE(p, c); + break; + + + + case lIIEns : + effect_card_LIIENS(p); + break; + + + + case Soiree_sans_alcool : + effect_card_SOIREE_SANS_ALCOOL(p, c); + break; + + + + case Alcool : + effect_card_ALCOOL(p, coord); + break; + + + + case Cafe : + effect_card_CAFE(p, c); + break; + + + + case The : + effect_card_THE(p, c); + break; + + + + case Ecocup : + effect_card_ECOCUP(); + break; + + + + case Reprographie : + effect_card_REPROGRAPHIE(p, c); + break; + + + + case Isolation_du_batiment : + effect_card_ISOLATION_DU_BATIMENT(p, c, coord); + break; + + + + case Parcours_sobriete_numerique : + effect_card_PARCOURS_SOBRIETE_NUMERIQUE(p); + break; + + + + case Heures_supplementaires : + effect_card_HEURES_SUPPLEMENTAIRES(p, c); + break; + + + + case Kahina_Bouchama : + effect_card_KAHINA_BOUCHAMA(p, coord); + break; + + + + case Kevin_Goilard : + effect_card_KEVIN_GOILARD(p, c); + break; + + + + case Massinissa_Merabet : + + pair_card_coord pcc; + pcc = effect_card_MASSINISSA_MERABET(p, c, coord); + + if (pcc.coord_card != -1) // Si pcc.coord_card != -1, alors avant la carte c de type Massinissa_Merabet, il y a au moins une carte retournée, et donc on active l'effet de la dernière carte retournée avant c (qui est pcc.coord_card) + { + card_effect(p, pcc.card_in_coord, pcc.coord_card); + } + + break; + + + + case Vitera_Y : + effect_card_VITERA_Y(p, c); + break; + + + + case Jonas_Senizergues : + effect_card_JONAS_SENIZERGUES(p); + break; + + + + case Fetia_Bannour : + effect_card_FETIA_BANNOUR(p, c, coord); + break; + + + + case Catherine_Dubois : + effect_card_CATHERINE_DUBOIS(p, coord); + break; + + + + case Anne_Laure_Ligozat : + effect_card_ANNE_LAURE_LIGOZAT(p, c); + break; + + + + case Guillaume_Burel : + effect_card_GUILLAUME_BUREL(p, c); + break; + + + + case Christophe_Mouilleron : + effect_card_CHRISTOPHE_MOUILLERON(p); + break; + + + + case Thomas_Lim : + effect_card_THOMAS_LIM(p, c); + break; + + + + case Julien_Forest : + effect_card_JULIEN_FOREST(p, c); + break; + + + + case Dimitri_Watel : + effect_card_DIMITRI_WATEL(p, c); + break; + + + + case Djibril_Aurelien_Dembele_Cabot : + effect_card_DJIBRIL_AURELIEN_DEMBELE_CABOT(p, c, coord); + break; + + + + case Eric_Lejeune : + effect_card_ERIC_LEJEUNE(p); + break; + + + + case Lucienne_Pacave : + effect_card_LUCIENNE_PACAVE(p, c, coord); + break; + + + + case Katrin_Salhab : + effect_card_KATRIN_SALHAB(p, c, coord); + break; + + + + case Laurent_Prevel : + effect_card_LAURENT_PREVEL(p, c, coord); + break; + + + default: ; + } + return; +} + + +/*** FIN DE LA PARTIE : LES EFFETS DES CARTES (32 cartes) ***/ + + + + +card turn_over_card(board p) +{ + card current = ((p->tabBoard[0]).cellCard); + int index =0; + while ( ((p->tabBoard[0]).state == Empty || (p->tabBoard[0]).state == FaceUp) && index < BOARD_SIZE) /* S'arrête quand on tombe sur une carte FaceDown*/ + { + index += 1; + current = (p->tabBoard[index]).cellCard; + } + if (index == BOARD_SIZE) + { + return NULL; + } + if (current != NULL) + { + card_effect(p, current, index); + } + return current; +} + -- GitLab From cd3ae355b64f7739373815e9a0a53b65bcdb4b80 Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Thu, 28 Apr 2022 01:57:14 +0200 Subject: [PATCH 105/163] Tache B.7 : correction du dernier message d'erreur --- src/plateau.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 71 insertions(+), 2 deletions(-) diff --git a/src/plateau.c b/src/plateau.c index 8349d32..b6767b8 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -2593,208 +2593,277 @@ void card_effect(board p, card c, int coord) switch(type) { + case FISE : + effect_card_FISE(p, c); + break; case FISA : + effect_card_FISA(p, c); + break; case FC : + effect_card_FC(p, c); + break; case EcologIIE : + effect_card_ECOLOGIIE(p, c); + break; case lIIEns : + effect_card_LIIENS(p); + break; case Soiree_sans_alcool : + effect_card_SOIREE_SANS_ALCOOL(p, c); + break; case Alcool : + effect_card_ALCOOL(p, coord); + break; case Cafe : + effect_card_CAFE(p, c); + break; case The : + effect_card_THE(p, c); + break; case Ecocup : + effect_card_ECOCUP(); + break; case Reprographie : + effect_card_REPROGRAPHIE(p, c); + break; case Isolation_du_batiment : + effect_card_ISOLATION_DU_BATIMENT(p, c, coord); + break; case Parcours_sobriete_numerique : + effect_card_PARCOURS_SOBRIETE_NUMERIQUE(p); + break; case Heures_supplementaires : + effect_card_HEURES_SUPPLEMENTAIRES(p, c); + break; case Kahina_Bouchama : + effect_card_KAHINA_BOUCHAMA(p, coord); + break; case Kevin_Goilard : + effect_card_KEVIN_GOILARD(p, c); + break; case Massinissa_Merabet : + { pair_card_coord pcc; pcc = effect_card_MASSINISSA_MERABET(p, c, coord); if (pcc.coord_card != -1) // Si pcc.coord_card != -1, alors avant la carte c de type Massinissa_Merabet, il y a au moins une carte retournée, et donc on active l'effet de la dernière carte retournée avant c (qui est pcc.coord_card) { + card_effect(p, pcc.card_in_coord, pcc.coord_card); + } + } break; case Vitera_Y : + effect_card_VITERA_Y(p, c); + break; case Jonas_Senizergues : + effect_card_JONAS_SENIZERGUES(p); + break; case Fetia_Bannour : + effect_card_FETIA_BANNOUR(p, c, coord); + break; case Catherine_Dubois : + effect_card_CATHERINE_DUBOIS(p, coord); + break; case Anne_Laure_Ligozat : + effect_card_ANNE_LAURE_LIGOZAT(p, c); + break; case Guillaume_Burel : + effect_card_GUILLAUME_BUREL(p, c); + break; case Christophe_Mouilleron : + effect_card_CHRISTOPHE_MOUILLERON(p); + break; case Thomas_Lim : + effect_card_THOMAS_LIM(p, c); + break; case Julien_Forest : + effect_card_JULIEN_FOREST(p, c); + break; case Dimitri_Watel : + effect_card_DIMITRI_WATEL(p, c); + break; case Djibril_Aurelien_Dembele_Cabot : + effect_card_DJIBRIL_AURELIEN_DEMBELE_CABOT(p, c, coord); + break; case Eric_Lejeune : + effect_card_ERIC_LEJEUNE(p); + break; case Lucienne_Pacave : + effect_card_LUCIENNE_PACAVE(p, c, coord); + break; case Katrin_Salhab : + effect_card_KATRIN_SALHAB(p, c, coord); + break; case Laurent_Prevel : + effect_card_LAURENT_PREVEL(p, c, coord); + break; - default: ; + default: break; + } - return; + + } -- GitLab From 6fd4d4b6aa97343c1a1d1ae8d5f008b195d624f0 Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Thu, 28 Apr 2022 03:09:35 +0200 Subject: [PATCH 106/163] =?UTF-8?q?Tache=20B.7=20:=20a=C3=A9ration=20du=20?= =?UTF-8?q?code?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plateau.c | 643 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 615 insertions(+), 28 deletions(-) diff --git a/src/plateau.c b/src/plateau.c index b6767b8..a3ba2f0 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -210,7 +210,9 @@ void put_card(board p, card c, int coord) faction enemy_faction(board p, int num_faction_owner) { + return (p->factions[1-num_faction_owner]); + } @@ -234,11 +236,15 @@ faction enemy_faction(board p, int num_faction_owner) void effect_card_FISE(board p, card c) { - int num_faction_owner = get_card_factionOwner(c); - faction faction_owner = p->factions[num_faction_owner]; - int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); + + int num_faction_owner = get_card_factionOwner(c); // num_faction_owner représente le numéro (0 ou 1) de la faction possédant la carte c venant d'être retournée + + faction faction_owner = p->factions[num_faction_owner]; // faction_owner représente la faction possédant la carte c venant d'être retournée + + int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); // f_owner_ptsddrs représente les points de faction_owner set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs+1); + } @@ -262,24 +268,36 @@ void effect_card_FISE(board p, card c) void effect_card_FISA(board p, card c) { - int num_faction_owner = get_card_factionOwner(c); // num_faction_owner représente le numéro (0 ou 1) de la faction possédant la carte c venant d'être retournée - faction faction_owner = p->factions[num_faction_owner]; // faction_owner représente la faction possédant la carte c venant d'être retournée - int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); // f_owner_ptsddrs représente les points de faction_owner + int num_faction_owner = get_card_factionOwner(c); + + faction faction_owner = p->factions[num_faction_owner]; + + int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); int count_card = 0; // count_card compte le nombre de cartes retournées sur le plateau + + for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE) ; i++) // (BOARD_SIZE*BOARD_SIZE) car il peut y avoir des cartes retournées n'importe où sur le plateau, à cause des effets des autres cartes { + if ((p->tabBoard[i]).state == FaceUp) { + count_card ++; + } + } + + if (!(count_card % 2)) // Dans ce cas, il y a un nombre pair de cartes retournées sur le plateau { + set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + 2); } + } @@ -304,30 +322,48 @@ void effect_card_FISA(board p, card c) void effect_card_FC(board p, card c) { int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; - int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); + int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); int i = 0; + bool ind_FC = false; // ind_FC indique si il y a au moins une carte de type FC retournée sur le plateau + CardType t; // t : type de la carte courante retournée de la boucle while + + while (i < (BOARD_SIZE*BOARD_SIZE) && !ind_FC) { + if ((p->tabBoard[i]).state == FaceUp) { + t = get_card_type((p->tabBoard[i]).cellCard); + + if (t == FC) { + ind_FC = true; + } + } + i++; + } + if (ind_FC) // Si ind_FC == true { + set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + 4); + } + } @@ -351,29 +387,46 @@ void effect_card_FC(board p, card c) void effect_card_ECOLOGIIE(board p, card c) { + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; - int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); + int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); int count_card = 0; // count_card compte le nombre de cartes retournées de type FISE, FISA ou FC sur le plateau + CardType t; // t : type de la carte courante retournée de la boucle for + + for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE); i++) { + if ((p->tabBoard[i]).state == FaceUp) { + t = get_card_type((p->tabBoard[i]).cellCard); + + if (t == FISE || t == FISA || t == FC ) { + count_card ++; + } + } + } + if (count_card) // Si count_card != 0 alors count_card == true { + set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + count_card); + } + } @@ -398,38 +451,58 @@ void effect_card_ECOLOGIIE(board p, card c) void effect_card_LIIENS(board p) { - Stack card_FISE_FISA_FC = empty_stack(); // card_FISE_FISA_FC représente le paquet de cartes de type FISE, FISA, ou FC qui étaient retournées sur le plateau, et qu'on a retirées du plateau + Stack card_FISE_FISA_FC = empty_stack(); // card_FISE_FISA_FC représente le paquet de cartes de type FISE, FISA, ou FC qui étaient retournées sur le plateau, et qu'on a retirées du plateau CardType t; // t : type de la carte courante retournée de la boucle for + for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE); i++) // Tout d'abord, on retire les cartes de type FISE, FISA, ou FC retournées, et on les ajoute dans card_FISE_FISA_FC { + if ((p->tabBoard[i]).state == FaceUp) { + card current_card = (p->tabBoard[i]).cellCard; + t = get_card_type(current_card); + if (t == FISE || t == FISA || t == FC ) { + push(card_FISE_FISA_FC, current_card); + (p->tabBoard[i]).state = Empty; // Pas besoin de préciser que (p->tabBoard[i]).cellCard = NULL, car l'information de (p->tabBoard[i]).state est suffisante pour le déroulement de la partie + } + } + } + shuffle_stack(card_FISE_FISA_FC); // Ensuite, on mélange card_FISE_FISA_FC + int i = 0; + while ( !(is_stack_empty(card_FISE_FISA_FC)) ) // Enfin, on place les cartes de card_FISE_FISA_FC tout en haut à gauche du plateau, dans le même ordre que l'ordre des cartes que l'on retire de card_FISE_FISA_FC { + if ( (p->tabBoard[i]).state == Empty ) { + card c = pop(card_FISE_FISA_FC); + put_card(p, c, i); + } + i++; + } + } @@ -454,40 +527,63 @@ void effect_card_LIIENS(board p) void effect_card_SOIREE_SANS_ALCOOL(board p, card c) { + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; - int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); + int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); int i = 0; + bool ind_alcool = false; // ind_alcool indique si il y a au moins une carte de type ALCOOL retournée sur le plateau + CardType t; // t : type de la carte courante retournée de la boucle while + while (i < (BOARD_SIZE*BOARD_SIZE) && !ind_alcool) // On vérifie tout d'abord si il y a au moins une cartes de type alcool retournée sur le plateau { + if ((p->tabBoard[i]).state == FaceUp) { + t = get_card_type((p->tabBoard[i]).cellCard); + + if (t == Alcool) { + ind_alcool = true; + } + } + i++; + } + if (ind_alcool) // Si ind_alcool == true, on supprime toutes les cartes de type FISE, FISA ou FC retournée sur le plateau; et on supprime la première et la dernière ligne { + for (int j = 0; j < (BOARD_SIZE*BOARD_SIZE); j++) // Suppression des cartes de type FISE, FISA ou FC retournée sur le plateau { + if ((p->tabBoard[j]).state == FaceUp) { + t = get_card_type((p->tabBoard[j]).cellCard); // Ici : t est le type de la carte courante de la boucle for + if (t == FISE || t == FISA || t == FC) { + (p->tabBoard[j]).state = Empty; + } + } + } @@ -495,27 +591,42 @@ void effect_card_SOIREE_SANS_ALCOOL(board p, card c) // Suppression de la première ligne du plateau + int k = -1; // k : ligne à suprimer + bool indicator = false; // indicator indique si il y a au moins une carte sur la ligne numéro k + while (k < BOARD_SIZE - 1 && !indicator) // Détermination de la première ligne où il y a des cartes { + k++; int j = 0; + + while ( j < BOARD_SIZE && !indicator) // En 2 dimension, les coordonnées de la carte courante de la boucle while se trouvant en dessous sont : k, j ( kième ligne, jième colonne) { + if ((p->tabBoard[k*BOARD_SIZE + j]).state == FaceUp || (p->tabBoard[k*BOARD_SIZE + j]).state == FaceDown ) { + indicator = true; + } + j++; + } + } + for (int j = 0; j < BOARD_SIZE; j++) // Suppression de la kième ligne, correspondant à la première ligne où il y a des cartes { + (p->tabBoard[k*BOARD_SIZE + j]).state = Empty; + } @@ -523,26 +634,39 @@ void effect_card_SOIREE_SANS_ALCOOL(board p, card c) k = BOARD_SIZE; // k : ligne à supprimer + indicator = false; // indicator indique si il y a au moins une carte sur la ligne numéro k while (k > 0 && !indicator) // Détermination de la dernière ligne où il y a des cartes { + k--; int j = 0; + + while ( j < BOARD_SIZE && !indicator) // En 2 dimension, les coordonnées de la carte courante de la boucle while se trouvant en dessous sont : k, j ( kième ligne, jième colonne) { + if ((p->tabBoard[k*BOARD_SIZE + j]).state != Empty) { + indicator = true; + } + j++; + } + } + for (int j = 0; j < BOARD_SIZE; j++) // Suppression de la kième ligne, correspondant à la dernière ligne où il y a des cartes { + (p->tabBoard[k*BOARD_SIZE + j]).state = Empty; + } } @@ -550,7 +674,9 @@ void effect_card_SOIREE_SANS_ALCOOL(board p, card c) else // sinon, faction_owner gagne 5 points DDRS { + set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + 5); + } } @@ -576,6 +702,7 @@ void effect_card_SOIREE_SANS_ALCOOL(board p, card c) void effect_card_ALCOOL(board p, int coord) { + // En 2 dimensions, si c a pour coordonnées x (xième ligne), y (yième colonne), alors : coord = x*BOARD_SIZE + y int x = coord/BOARD_SIZE; // car y/BOARD_SIZE == 0 car y < BOARD_SIZE et y est un entier @@ -585,70 +712,114 @@ void effect_card_ALCOOL(board p, int coord) // Premier cas : si la carte c se situe sur un des coins du plateau + if (x == 0 && y == 0) { + (p->tabBoard[x*BOARD_SIZE + y + 1]).state = Empty; + (p->tabBoard[(x+1)*BOARD_SIZE + y]).state = Empty; + } + else if (x == 0 && y == BOARD_SIZE - 1) { + (p->tabBoard[x*BOARD_SIZE + y - 1]).state = Empty; + (p->tabBoard[(x+1)*BOARD_SIZE + y]).state = Empty; + } + else if (x == BOARD_SIZE - 1 && y == 0) { + (p->tabBoard[x*BOARD_SIZE + y + 1]).state = Empty; + (p->tabBoard[(x-1)*BOARD_SIZE + y]).state = Empty; + } + else if (x == BOARD_SIZE - 1 && y == BOARD_SIZE - 1) { + (p->tabBoard[x*BOARD_SIZE + y - 1]).state = Empty; + (p->tabBoard[(x-1)*BOARD_SIZE + y]).state = Empty; + } + // Deuxième cas : si la carte c se situe sur la première ligne, sur la dernière ligne, sur la première colonne ou sur la dernière colonne du plateau + else if (x == 0) { + (p->tabBoard[x*BOARD_SIZE + y + 1]).state = Empty; + (p->tabBoard[x*BOARD_SIZE + y - 1]).state = Empty; + (p->tabBoard[(x+1)*BOARD_SIZE + y]).state = Empty; } + else if (x == BOARD_SIZE - 1) { + (p->tabBoard[x*BOARD_SIZE + y + 1]).state = Empty; + (p->tabBoard[x*BOARD_SIZE + y - 1]).state = Empty; + (p->tabBoard[(x-1)*BOARD_SIZE + y]).state = Empty; + } + else if (y == 0) { + (p->tabBoard[(x-1)*BOARD_SIZE + y]).state = Empty; + (p->tabBoard[(x+1)*BOARD_SIZE + y]).state = Empty; + (p->tabBoard[x*BOARD_SIZE + y + 1]).state = Empty; + } + else if (y == BOARD_SIZE - 1) { + (p->tabBoard[(x-1)*BOARD_SIZE + y]).state = Empty; + (p->tabBoard[(x+1)*BOARD_SIZE + y]).state = Empty; + (p->tabBoard[x*BOARD_SIZE + y - 1]).state = Empty; + } + // Troisème cas : la carte ne se situe pas sur le bord du plateau + else { + (p->tabBoard[x*BOARD_SIZE + y + 1]).state = Empty; + (p->tabBoard[x*BOARD_SIZE + y - 1]).state = Empty; + (p->tabBoard[(x-1)*BOARD_SIZE + y]).state = Empty; + (p->tabBoard[(x+1)*BOARD_SIZE + y]).state = Empty; + } + } @@ -673,39 +844,60 @@ void effect_card_ALCOOL(board p, int coord) void effect_card_CAFE(board p, card c) { + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); bool ind_ecocup = false; // ind_ecocup indique si il y a au moins une carte de type Ecocup retournée sur le plateau + CardType t; // t : type de la carte courante retournée de la boucle for + for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE); i++) { + if ((p->tabBoard[i]).state == FaceUp) { + t = get_card_type((p->tabBoard[i]).cellCard); + if (t == Alcool || t == The) { + (p->tabBoard[i]).state = Empty; + } + if (t == Ecocup) { + ind_ecocup = true; + } + } + } + if (ind_ecocup) // Si ind_ecocup == true { + set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + 1); + } else { + set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs - 1); + } + } @@ -730,38 +922,58 @@ void effect_card_CAFE(board p, card c) void effect_card_THE(board p, card c) { + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); bool ind_ecocup = false; // ind_ecocup indique si il y a au moins une carte de type Ecocup retournée sur le plateau + CardType t; // t : type de la carte courante retournée de la boucle for + for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE); i++) { + if ((p->tabBoard[i]).state == FaceUp) { + t = get_card_type((p->tabBoard[i]).cellCard); + if (t == Alcool || t == Cafe) { + (p->tabBoard[i]).state = Empty; + } + if (t == Ecocup) { + ind_ecocup = true; + } + } + } + if (ind_ecocup) // Si ind_ecocup == true { + set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + 1); + } else { + set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs - 1); + } } @@ -805,27 +1017,41 @@ void effect_card_ECOCUP() int binom(int k, int n) { + int denominator = 1; + int numerator = 1; + if (n < k) { + return(0); + } + if (n == k) { + return(1); + } + for (int i = k+1; i <= n; i++) // numerator == (n!)/(k!) { + numerator *= i; + } + for (int i = 2; i <= (n-k); i++) // denominator == (n-k)! { + denominator *= i; + } return(numerator/denominator); @@ -854,38 +1080,60 @@ int binom(int k, int n) void effect_card_REPROGRAPHIE(board p, card c) { + int num_faction_owner = get_card_factionOwner(c); + faction faction_enemy = enemy_faction(p, num_faction_owner); + int f_enemy_ptsddrs = get_faction_ptsDDRS(faction_enemy); // f_enemy_ptsddrs représente les points de la faction ennemie de faction_owner int tab[CardTypeCount]; // tab[i] contiendra le nombre de cartes ayant le type numéro i retournées sur le plateau + for (int i = 0; i < CardTypeCount; i++) // Initialisation de tab, afin que tous ses éléments soient égaux à 0 { + tab[i] = 0; + } + CardType t; // t : type de la carte courante retournée de la boucle for + + for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE); i++) // On détermine le nombre d'occurrences de chaque carte qui est retournée sur le plateau { + if ((p->tabBoard[i]).state == FaceUp) { + t = get_card_type((p->tabBoard[i]).cellCard); + tab[t] += 1; + } + } + int count = 0; // count contiendra le nombre de points DDRS à retirer de la faction adverse + for (int i = 0; i < CardTypeCount; i++) { + count += binom(2, tab[i]); + } + if (count) { + set_faction_ptsDDRS(faction_enemy, f_enemy_ptsddrs - count); + } + } @@ -910,43 +1158,65 @@ void effect_card_REPROGRAPHIE(board p, card c) void effect_card_ISOLATION_DU_BATIMENT(board p, card c, int coord) { + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); + faction faction_enemy = enemy_faction(p, num_faction_owner); + int f_enemy_ptsddrs = get_faction_ptsDDRS(faction_enemy); int count_card_owner = 0; // count_card_owner représente le nombre de cartes non retournées et non supprimées du plateau, de la faction possédant la carte c dont l'effet est en train de se réaliser + int count_card_enemy = 0; // count_card_enemy représente le nombre de cartes non retournées et non supprimées du plateau, de la faction ne possédant pas la carte c dont l'effet est en train de se réaliser int num_faction_owner_current_card; // num_faction_owner_current_card représente le numéro de la faction (0 ou 1) possédant la carte courante de la boucle for + for (int i = coord + 1; i < (BOARD_SIZE*BOARD_SIZE); i++) { + if ((p->tabBoard[i]).state == FaceDown) { + num_faction_owner_current_card = get_card_factionOwner((p->tabBoard[i]).cellCard); + if (num_faction_owner_current_card == num_faction_owner) // Si la carte courante appartient à faction_owner { + count_card_owner += 1; + } else // Si la carte courante appartient à faction_enemy { + count_card_enemy += 1; + } + } + } + if (count_card_owner) { + set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + count_card_owner); + } + if (count_card_enemy) { + set_faction_ptsDDRS(faction_enemy, f_enemy_ptsddrs + count_card_enemy); + } } @@ -971,32 +1241,48 @@ void effect_card_ISOLATION_DU_BATIMENT(board p, card c, int coord) void effect_card_PARCOURS_SOBRIETE_NUMERIQUE(board p) { + int x = -1; + int y; bool indicator1; + bool indicator2; + while ( x < (BOARD_SIZE - 1) ) { + x++; + y = 0; indicator1 = false; //indicator1 indique si la première carte de la xième ligne a été retournée + indicator2 = false; //indicator2 indique si la dernière carte de la xième ligne a été retournée + while ( y <= (BOARD_SIZE/2 + 1) && ((!indicator1) || (!indicator2) ) ) // On explore les deux côtés de la xième ligne en même temps { + if ((p->tabBoard[x*BOARD_SIZE + y]).state == FaceDown && !indicator1) { + (p->tabBoard[x*BOARD_SIZE + y]).state = FaceUp; + indicator1 = true; + } + if ((p->tabBoard[x*BOARD_SIZE + (BOARD_SIZE - y - 1)]).state == FaceDown && !indicator2) { + (p->tabBoard[x*BOARD_SIZE + (BOARD_SIZE - y - 1)]).state = FaceUp; + indicator2 = true; + } y += 1; @@ -1028,23 +1314,35 @@ void effect_card_PARCOURS_SOBRIETE_NUMERIQUE(board p) void effect_card_HEURES_SUPPLEMENTAIRES(board p, card c) { + int num_faction_owner = get_card_factionOwner(c); + faction faction_enemy = enemy_faction(p, num_faction_owner); + int f_enemy_ptsddrs = get_faction_ptsDDRS(faction_enemy); int count_h_supp = 0; // count_h_supp compte le nombre de cartes de type Heures_supplementaires retournées sur le plateau + CardType t; // t : type de la carte courante retournée de la boucle for + for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE); i++) { + if ((p->tabBoard[i]).state == FaceUp) { + t = get_card_type((p->tabBoard[i]).cellCard); + if (t == Heures_supplementaires) { + count_h_supp ++; + } + } + } set_faction_ptsDDRS(faction_enemy, f_enemy_ptsddrs - 3 * count_h_supp); @@ -1072,37 +1370,57 @@ void effect_card_HEURES_SUPPLEMENTAIRES(board p, card c) void effect_card_KAHINA_BOUCHAMA(board p, int coord) { + int count_card = 0; // count_card compte le nombre de cartes non retournées sur le plateau + for (int i = coord + 1; i < (BOARD_SIZE*BOARD_SIZE); i++) { + if ((p->tabBoard[i]).state == FaceDown) { + count_card ++; + } + } + if (count_card) // Si count_card != 0, alors on peut retirer une carte non retournées au hasard { + srand(time(NULL)); + int random_card; // random_card est le numéro de la carte qui sera retirée, après celle qui a pour coordonnée 1D coord + random_card = (rand() % count_card) + 1; int i = coord + 1; + bool indicator = false; // indicator indique si la random_cardième carte après celle qui a pour coordonnée 1D coord a été retirée + while ( i < (BOARD_SIZE*BOARD_SIZE) && (!indicator) ) { + if ((p->tabBoard[i]).state == FaceDown && random_card == 1) { + (p->tabBoard[i]).state = Empty; + indicator = true; + } i++; + random_card --; + } + } + } @@ -1126,61 +1444,91 @@ void effect_card_KAHINA_BOUCHAMA(board p, int coord) void effect_card_KEVIN_GOILARD(board p, card c) { + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); int count_card = 0; //count_card représentera le nombre de cartes qui ont été supprimées sur une ligne au hasard int xmin; // xmin sera la ligne la plus en haut contenant au moins une carte + int xmax; // xmax sera la ligne la plus en bas contenant au moins une carte + // Détermination de xmin et xmax + bool indicator1 = false; // indicator1 indique si on a trouvé xmin + bool indicator2 = false; // indicator2 indique si on a trouvé xmax int x = -1; + int y; + while ( x <= (BOARD_SIZE/2) && (!indicator1 || !indicator2) ) // On détermin xmin et xmax en même temps, en parcourant la partie gauche et la partie droite de la ligne x en même temps, et de la même façon (c'est symétrique par rapport à la droite verticale se trouvant au milieu du tableau) { + x += 1; + y = 0; while (y < BOARD_SIZE && (!indicator1 || !indicator2) ) { + if ((p->tabBoard[x*BOARD_SIZE + y]).state != Empty && (!indicator1) ) { + xmin = x; + indicator1 = true; + } + if ((p->tabBoard[(BOARD_SIZE - x - 1)*BOARD_SIZE + y]).state != Empty && (!indicator2) ) { + xmax = (BOARD_SIZE - x - 1); + indicator2 = true; + } y++; } + } + // Détermination de la ligne à supprimer + srand(time(NULL)); + x = (rand() % (xmax - xmin)) + 1; // La xième ligne à partir de xmin sera supprimée + // Suppression de la xième ligne + for (int k = 0; k < BOARD_SIZE; k++) { + if ((p->tabBoard[(xmin + x)*BOARD_SIZE + k]).state != Empty ) { + (p->tabBoard[(xmin + x)*BOARD_SIZE + k]).state = Empty; + count_card += 1; + } + } set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + 2 * count_card); @@ -1208,7 +1556,9 @@ void effect_card_KEVIN_GOILARD(board p, card c) typedef struct pair_card_coord { card card_in_coord; + int coord_card; + } pair_card_coord; @@ -1228,46 +1578,68 @@ typedef struct pair_card_coord pair_card_coord effect_card_MASSINISSA_MERABET(board p, card c, int coord) { + int num_faction_owner = get_card_factionOwner(c); + // Détermination de la carte dont on souhaite réactiver l'effet + bool indicator = false; // indicator indique si on a trouvé la dernière carte retournée + int i = coord; + card new_c; // new_c sera la carte dont on réactivera l'effet + while (i > 0 && !indicator) { + i--; if ((p->tabBoard[i]).state == FaceUp ) { + set_card_factionOwner((p->tabBoard[i]).cellCard, num_faction_owner); + new_c = (p->tabBoard[i]).cellCard; + indicator = true; + } } + // On regarde si il existe au moins une carte retournée sur le plateau // new_c a pour coordonnée i + if (indicator) // Dans ce cas, avant la carte c, il y a au moins une carte retournée { + pair_card_coord pcc; + pcc.card_in_coord = new_c; + pcc.coord_card = i; + return(pcc); + } else // Dans ce cas, avant la carte c, il n'y a pas de carte retournée { + pair_card_coord pcc; + pcc.card_in_coord = NULL; + pcc.coord_card = -1; // Si avant c, il n'y a pas de carte retournée, la valeur de pcc.coord_card est -1 + return(pcc); - } + } } @@ -1292,21 +1664,31 @@ pair_card_coord effect_card_MASSINISSA_MERABET(board p, card c, int coord) void effect_card_VITERA_Y(board p, card c) { + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + faction faction_enemy = enemy_faction(p, num_faction_owner); int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); + int f_enemy_ptsddrs = get_faction_ptsDDRS(faction_enemy); + if (f_owner_ptsddrs < f_enemy_ptsddrs) { + set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + 3); + } + if (f_enemy_ptsddrs < f_owner_ptsddrs) { + set_faction_ptsDDRS(faction_enemy, f_enemy_ptsddrs + 3); + } } @@ -1331,19 +1713,28 @@ void effect_card_VITERA_Y(board p, card c) void effect_card_JONAS_SENIZERGUES(board p) { + CardType t; // t : type de la carte courante retournée de la boucle for for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE); i++) { + if ( (p->tabBoard[i]).state == FaceUp ) { + t = get_card_type((p->tabBoard[i]).cellCard); + if (t == Heures_supplementaires) { + (p->tabBoard[i]).state = Empty; + } + } + } + } @@ -1371,8 +1762,11 @@ void effect_card_JONAS_SENIZERGUES(board p) void effect_card_FETIA_BANNOUR(board p, card c, int coord) { + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); @@ -1380,47 +1774,65 @@ void effect_card_FETIA_BANNOUR(board p, card c, int coord) int i = 0; + bool ind_h_supp = false; //ind_h_supp indique si la carte Heures supplémentaires est retournée sur le plateau + CardType t; // t : type de la carte courante retournée de la boucle while while (i < (BOARD_SIZE*BOARD_SIZE) && (!ind_h_supp) ) { + if ( (p->tabBoard[i]).state == FaceUp ) { + t = get_card_type((p->tabBoard[i]).cellCard); + if (t == Heures_supplementaires) { + ind_h_supp = true; + } + } i++; } + // Ensuite, premier cas : ind_h_supp == true, on supprime toutes les cartes de la ligne et de la colonne où est posée la carte c de type Fetia_Bannour + if (ind_h_supp) { + // x et y sont les coordonnées 2D de c int x = coord/BOARD_SIZE; // x : ligne sur laquelle est c + int y = coord - x*BOARD_SIZE; // y : colonne sur laquelle est c + // Supression de toutes les cartes sur la ligne x et sur la colonne y + for (int k = 0; k < BOARD_SIZE; k++) { + (p->tabBoard[x*BOARD_SIZE + k]).state = Empty; (p->tabBoard[k*BOARD_SIZE + y]).state = Empty; + } } + // Deuxième cas : ind_h_supp == false + else { @@ -1429,23 +1841,35 @@ void effect_card_FETIA_BANNOUR(board p, card c, int coord) // Détermination de la valeur de count en fonction des cartes retournées sur le plateau + for (int k = 0; k < BOARD_SIZE; k++) { + if ( (p->tabBoard[k]).state == FaceUp ) { + t = get_card_type((p->tabBoard[k]).cellCard); // Ici, t est le type de la carte courante de cette boucle for + if (t == Catherine_Dubois || t == Anne_Laure_Ligozat || t == Guillaume_Burel || t == Christophe_Mouilleron || t == Thomas_Lim || t == Julien_Forest || t == Dimitri_Watel ) { + count += 1; + } + } + } + // Mise à jour du nombre de points DDRS de faction_owner + if (count) // Si count > 0 { + set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + count); + } } @@ -1473,14 +1897,19 @@ void effect_card_FETIA_BANNOUR(board p, card c, int coord) void effect_card_CATHERINE_DUBOIS(board p, int coord) { + // x et y sont les coordonnées 2D de c int x = coord/BOARD_SIZE; // x : ligne sur laquelle est c + int y = coord - x*BOARD_SIZE; // y : colonne sur laquelle est c bool indicator1 = false; // indicator1 indique si la première carte de la xième ligne a été supprimée + bool indicator2 = false; // indicator2 indique si la dernière carte de la xième ligne a été supprimée + bool indicator3 = false; // indicator3 indique si la première carte de la yième colonne a été supprimée + bool indicator4 = false; // indicator4 indique si la dernière carte de la yième colonne a été supprimée int k = 0; @@ -1490,39 +1919,50 @@ void effect_card_CATHERINE_DUBOIS(board p, int coord) if ( (p->tabBoard[x*BOARD_SIZE + k]).state != Empty && (!indicator1) ) // Cette condition permet de supprimer la première carte de la xième ligne { + (p->tabBoard[x*BOARD_SIZE + k]).state = Empty; + indicator1 = true; + } if ( (p->tabBoard[x*BOARD_SIZE + (BOARD_SIZE - k - 1)]).state != Empty && (!indicator2) ) // Cette condition permet de supprimer la dernière carte de la xième ligne { + (p->tabBoard[x*BOARD_SIZE + (BOARD_SIZE - k - 1)]).state = Empty; + indicator2 = true; + } if ( (p->tabBoard[k*BOARD_SIZE + y]).state != Empty && (!indicator3) ) // Cette condition permet de supprimer la première carte de la yième colonne { + (p->tabBoard[k*BOARD_SIZE + y]).state = Empty; + indicator3 = true; + } if ( (p->tabBoard[(BOARD_SIZE - k - 1)*BOARD_SIZE + y]).state != Empty && (!indicator4) ) // Cette condition permet de supprimer la dernière carte de la yième colonne { + (p->tabBoard[(BOARD_SIZE - k - 1)*BOARD_SIZE + y]).state = Empty; + indicator4 = true; + } k++; } - } @@ -1548,12 +1988,17 @@ void effect_card_CATHERINE_DUBOIS(board p, int coord) void effect_card_ANNE_LAURE_LIGOZAT(board p, card c) { + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); bool indicator = false; // indicator indique si la dernière carte non retournée du plateau a été supprimée + int count = 0; // count compte le nombre de carte de type EcologIIE, Ecocup, Isolation_du_batiment ou Parcours_sobriete_numerique retournées sur le plateau + CardType t; // t : type de la carte courante retournée de la boucle for @@ -1562,19 +2007,25 @@ void effect_card_ANNE_LAURE_LIGOZAT(board p, card c) if ( (p->tabBoard[i]).state == FaceDown && (!indicator) ) // Cette condition permet de supprimer la dernière carte non retournée du plateau { + (p->tabBoard[i]).state = Empty; + indicator = true; + } if ( (p->tabBoard[i]).state == FaceUp ) // Cette condition permet d'incrémenter de 1 ou non count { + t = get_card_type((p->tabBoard[i]).cellCard); if ( t == EcologIIE || t == Ecocup || t == Isolation_du_batiment || t == Parcours_sobriete_numerique) { + count += 1; + } } @@ -1584,9 +2035,12 @@ void effect_card_ANNE_LAURE_LIGOZAT(board p, card c) // Mise à jour du nombre de points DDRS de faction_owner + if (count) // Si count > 0 { + set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + 3 * count); + } } @@ -1613,16 +2067,23 @@ void effect_card_ANNE_LAURE_LIGOZAT(board p, card c) void effect_card_GUILLAUME_BUREL(board p, card c) { int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + faction faction_enemy = enemy_faction(p, num_faction_owner); int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); + int f_enemy_ptsddrs = get_faction_ptsDDRS(faction_enemy); + if ( f_enemy_ptsddrs > f_owner_ptsddrs) { + set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + 3 ); + set_faction_ptsDDRS(faction_enemy, f_enemy_ptsddrs - 3 ); + } } @@ -1651,44 +2112,58 @@ void effect_card_CHRISTOPHE_MOUILLERON(board p) // Tout d'abord, on regarde si la carte Heures supplémentaires est retournée sur le plateau + int i = 0; + bool ind_h_supp = false; //ind_h_supp indique si la carte Heures supplémentaires est retournée sur le plateau + CardType t; // t : type de la carte courante retournée de la boucle while while (i < (BOARD_SIZE*BOARD_SIZE) && (!ind_h_supp) ) { + if ( (p->tabBoard[i]).state == FaceUp ) { + t = get_card_type((p->tabBoard[i]).cellCard); + if (t == Heures_supplementaires) { + ind_h_supp = true; + } + } i++; } + // Ensuite, si ind_h_supp == true, on supprime toutes les cartes retournées du plateau sauf les cartes de type Christophe_Mouilleron et Heures_supplementaires + for (int j = 0; j < (BOARD_SIZE*BOARD_SIZE); j++) { + if ( (p->tabBoard[j]).state == FaceUp ) { + t = get_card_type((p->tabBoard[j]).cellCard); if ( t != Christophe_Mouilleron && t != Heures_supplementaires ) { + (p->tabBoard[j]).state = Empty; + } } } - } @@ -1714,16 +2189,21 @@ void effect_card_CHRISTOPHE_MOUILLERON(board p) void effect_card_THOMAS_LIM(board p, card c) { int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + faction faction_enemy = enemy_faction(p, num_faction_owner); int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); + int f_enemy_ptsddrs = get_faction_ptsDDRS(faction_enemy); // Tout d'abord, on regarde si la carte Julien Forest est retournée sur le plateau + bool ind_julien_forest = false; //ind_julien_forest indique si la carte Julien Forest est retournée sur le plateau + int count_fise = 0; // count_fise compte le nombre de cartes de type FISE retournées sur le plateau CardType t; // t : type de la carte courante retournée de la boucle for @@ -1731,17 +2211,25 @@ void effect_card_THOMAS_LIM(board p, card c) for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE); i++ ) { + if ( (p->tabBoard[i]).state == FaceUp ) { + t = get_card_type((p->tabBoard[i]).cellCard); + if (t == Julien_Forest) { + ind_julien_forest = true; + } + if ( t == FISE ) { + count_fise += 1; + } } @@ -1749,6 +2237,7 @@ void effect_card_THOMAS_LIM(board p, card c) } + // Ensuite, si count_fise != 0, alors f_owner_ptsddrs ou f_enemy_ptsddrs est modifié en fonction de la valeur de ind_julien_forest @@ -1757,12 +2246,16 @@ void effect_card_THOMAS_LIM(board p, card c) if ( !ind_julien_forest ) { + set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + 3 * count_fise ); + } else { + set_faction_ptsDDRS(faction_enemy, f_enemy_ptsddrs - count_fise ); + } } @@ -1790,14 +2283,19 @@ void effect_card_THOMAS_LIM(board p, card c) void effect_card_JULIEN_FOREST(board p, card c) { + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); // Tout d'abord, on regarde si la carte Café est retournée sur le plateau + bool ind_cafe = false; //ind_cafe indique si la carte Café est retournée sur le plateau + int count_fise = 0; // count_fise compte le nombre de cartes de type FISE retournées sur le plateau CardType t; // t : type de la carte courante retournée de la boucle for @@ -1805,23 +2303,32 @@ void effect_card_JULIEN_FOREST(board p, card c) for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE); i++ ) { + if ( (p->tabBoard[i]).state == FaceUp ) { + t = get_card_type((p->tabBoard[i]).cellCard); + if (t == Cafe) { + ind_cafe = true; + } + if ( t == FISE ) { + count_fise += 1; + } } } + // Ensuite, si count_fise != 0 et si ind_cafe == true, alors f_owner_ptsddrs est modifié @@ -1832,7 +2339,6 @@ void effect_card_JULIEN_FOREST(board p, card c) } - } @@ -1858,13 +2364,17 @@ void effect_card_DIMITRI_WATEL(board p, card c) { int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); // Tout d'abord, on regarde si la carte Thé est retournée sur le plateau + bool ind_the = false; //ind_the indique si la carte Thé est retournée sur le plateau + int count_fisa_fc = 0; // count_fisa_fc compte le nombre de cartes de type FISE retournées sur le plateau CardType t; // t : type de la carte courante retournée de la boucle for @@ -1872,23 +2382,32 @@ void effect_card_DIMITRI_WATEL(board p, card c) for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE); i++ ) { + if ( (p->tabBoard[i]).state == FaceUp ) { + t = get_card_type((p->tabBoard[i]).cellCard); + if (t == The) { + ind_the = true; + } + if ( t == FISE ) { + count_fisa_fc += 1; + } } } + // Ensuite, si count_fisa_fc != 0 et si ind_the == true, alors f_owner_ptsddrs est modifié @@ -1924,8 +2443,11 @@ void effect_card_DIMITRI_WATEL(board p, card c) void effect_card_DJIBRIL_AURELIEN_DEMBELE_CABOT(board p, card c, int coord) { + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); int x = coord/BOARD_SIZE; // x représente le numéro de la ligne sur laquelle se trouve x @@ -1933,11 +2455,14 @@ void effect_card_DJIBRIL_AURELIEN_DEMBELE_CABOT(board p, card c, int coord) // Tout d'abord, on regarde si il y a plus de 3 cartes retournées sur la xième ligne du plateau + int count = 0; // count compte le nombre de cartes retournées sur la xième ligne du plateau + int y = 0; while ( y < BOARD_SIZE && count < 3 ) { + if ( (p->tabBoard[x*BOARD_SIZE + y]).state == FaceUp ) { @@ -1952,6 +2477,7 @@ void effect_card_DJIBRIL_AURELIEN_DEMBELE_CABOT(board p, card c, int coord) // Ensuite, en fonction de la valeur de count, on modifie ou non la valeur de f_owner_ptsddrs + if ( count >= 3) { @@ -1979,6 +2505,10 @@ void effect_card_DJIBRIL_AURELIEN_DEMBELE_CABOT(board p, card c, int coord) * Si une de ces cartes est une carte Catherine Dubois, Anne-Laure Ligozat, Guillaume Burel, Christophe Mouilleron, * Thomas Lim, Julien Forest ou Dimitri Watel, mélangez les et placez les à gauche de la case la plus à gauche de la première ligne. * Les prochaines cartes à être retournées sont ces cartes là . Sinon, supprimez ces cartes du plateau." + * + * Remarque : lIIEns + * + * *\return rien */ @@ -1990,6 +2520,7 @@ void effect_card_ERIC_LEJEUNE(board p) Stack stack_card = empty_stack(); // stack_card représentera le paquet de 5 cartes au maximum, et de cartes qui étaient retournées sur le plateau, et qu'on a retirées du plateau + bool indicator = false; // indicator indiquera si parmi les cartes choisies au hasard, il y en a au moins une de type Catherine_Dubois, Anne_Laure_Ligozat, Guillaume_Burel, Christophe_Mouilleron, Thomas_Lim, Julien_Forest ou Dimitri_Watel @@ -1997,6 +2528,7 @@ void effect_card_ERIC_LEJEUNE(board p) int count_card = 0; + CardType t; // t : type de la carte courante retournée des boucles while et for @@ -2025,17 +2557,23 @@ void effect_card_ERIC_LEJEUNE(board p) // n1, n2, n3, n4, n5 correspondent aux numéros des 5 cartes retournées choisies au hasard sur le plateau int n1; + int n2; + int n3; + int n4; + int n5; // Plusieurs cas possibles en fonction de la valeur de count_card int j = 0; + card current_card; // current_card : carte courante retournée des boucles while + if ( count_card == 1 ) { n1 = 1; @@ -2049,23 +2587,23 @@ void effect_card_ERIC_LEJEUNE(board p) { current_card = (p->tabBoard[j]).cellCard; + t = get_card_type(current_card); if (t != Eric_Lejeune) { push(stack_card, current_card); + n1 -= 1; } - } j ++; - } - + } } @@ -2087,24 +2625,24 @@ void effect_card_ERIC_LEJEUNE(board p) { current_card = (p->tabBoard[j]).cellCard; + t = get_card_type(current_card); if (t != Eric_Lejeune) { push(stack_card, current_card); + n2 -= 1; } - } j ++; } - } @@ -2125,24 +2663,24 @@ void effect_card_ERIC_LEJEUNE(board p) { current_card = (p->tabBoard[j]).cellCard; + t = get_card_type(current_card); if (t != Eric_Lejeune) { push(stack_card, current_card); + n3 -= 1; } - } j ++; } - } @@ -2163,12 +2701,14 @@ void effect_card_ERIC_LEJEUNE(board p) { current_card = (p->tabBoard[j]).cellCard; + t = get_card_type(current_card); if (t != Eric_Lejeune) { push(stack_card, current_card); + n4 -= 1; } @@ -2180,7 +2720,6 @@ void effect_card_ERIC_LEJEUNE(board p) } - } @@ -2201,12 +2740,14 @@ void effect_card_ERIC_LEJEUNE(board p) { current_card = (p->tabBoard[j]).cellCard; + t = get_card_type(current_card); if (t != Eric_Lejeune) { push(stack_card, current_card); + n5 -= 1; } @@ -2218,7 +2759,6 @@ void effect_card_ERIC_LEJEUNE(board p) } - } @@ -2227,11 +2767,17 @@ void effect_card_ERIC_LEJEUNE(board p) if ( count_card > 5 ) { + srand(time(NULL)); + n1 = (rand() % count_card) + 1; + n2 = (rand() % count_card) + 1; + n3 = (rand() % count_card) + 1; + n4 = (rand() % count_card) + 1; + n5 = (rand() % count_card) + 1; while ( n2 == n1 ) @@ -2279,6 +2825,7 @@ void effect_card_ERIC_LEJEUNE(board p) { current_card = (p->tabBoard[j]).cellCard; + t = get_card_type(current_card); if (t != Eric_Lejeune) @@ -2288,19 +2835,22 @@ void effect_card_ERIC_LEJEUNE(board p) } - } j ++; + n1 --; + n2 --; + n3 --; + n4 --; + n5 --; } - } @@ -2317,18 +2867,22 @@ void effect_card_ERIC_LEJEUNE(board p) while ( !(is_stack_empty(stack_card)) ) { + if ( (p->tabBoard[i]).state == Empty ) { + card c = pop(stack_card); + put_card(p, c, i); + } + i++; - } + } } - } @@ -2355,10 +2909,13 @@ void effect_card_LUCIENNE_PACAVE(board p, card c, int coord) { int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); int x = coord/BOARD_SIZE; // x est le numéro de la ligne sur laquelle est c + int y = coord - x*BOARD_SIZE; // y est le numéro de la colonne sur laquelle est c @@ -2368,6 +2925,7 @@ void effect_card_LUCIENNE_PACAVE(board p, card c, int coord) bool ind_fisa = false; // ind_fisa indique si il y a au moins une carte FISA retournée sur la xième ligne ou sur la yième colonne du plateau int k = 0; + CardType t; // t : type de la carte courante retournée de la boucle while while ( k < BOARD_SIZE && (!ind_fisa) ) @@ -2400,6 +2958,7 @@ void effect_card_LUCIENNE_PACAVE(board p, card c, int coord) ind_fisa = true; } + } k += 1; @@ -2409,6 +2968,7 @@ void effect_card_LUCIENNE_PACAVE(board p, card c, int coord) // Ensuite, si ind_fisa == true, on modifie f_owner_ptsddrs + if ( ind_fisa ) { @@ -2443,18 +3003,25 @@ void effect_card_LUCIENNE_PACAVE(board p, card c, int coord) void effect_card_KATRIN_SALHAB(board p, card c, int coord) { + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); // Tout d'abord, on regarde si les cartes Djibril-Aurélien Djembele-Cabeau, Eric Lejeune et Lucienne Pacavé sont retournées sur le plateau + bool ind_d_a_d_c = false; // ind_d_a_d_c indique si la carte Djibril-Aurélien Djembele-Cabeau est retournée sur le plateau + bool ind_e_l = false; // ind_e_l indique si la carte Eric Lejeune est retournée sur le plateau + bool ind_l_p = false; // ind_l_p indique si la carte Lucienne Pacavé est retournée sur le plateau int i = 0; + CardType t; // t : type de la carte courante retournée de la boucle while @@ -2470,22 +3037,27 @@ void effect_card_KATRIN_SALHAB(board p, card c, int coord) { case Djibril_Aurelien_Dembele_Cabot : + ind_d_a_d_c = true; + break; case Eric_Lejeune : + ind_e_l = true; + break; case Lucienne_Pacave : + ind_l_p = true; + break; default: ; } - } i += 1; @@ -2495,6 +3067,7 @@ void effect_card_KATRIN_SALHAB(board p, card c, int coord) // Ensuite, en fonction des valeurs de ind_d_a_d_c , ind_e_l et ind_l_p, soit la valeur de f_owner_ptsddrs est modifiée, soit on retourne les cartes étant sur la même ligne que c + if ( ind_d_a_d_c && ind_e_l && ind_l_p ) { @@ -2542,29 +3115,43 @@ void effect_card_KATRIN_SALHAB(board p, card c, int coord) void effect_card_LAURENT_PREVEL(board p, card c, int coord) { + int num_faction_owner = get_card_factionOwner(c); + faction faction_owner = p->factions[num_faction_owner]; + int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); + // Tout d'abord, on vérifie si c est la dernière carte qui a été retournée du plateau + bool indicator = false; // indicator indique si il y a au moins une carte non retournée après c + int i = coord; while ( i < (BOARD_SIZE*BOARD_SIZE - 1) && !indicator ) { + i++; if ( (p->tabBoard[i]).state == FaceDown ) { + indicator = true; + } + } + // On applique ensuite l'effet de la carte c en fonction de la valeur de indicator + if (!indicator) // Dans ce cas, après c, il n'y a pas de carte non retournée { + set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + 1000000000); + } } -- GitLab From d726b4a0ec24284d64ef439169d69da5fe3784a1 Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Thu, 28 Apr 2022 20:12:20 +0200 Subject: [PATCH 107/163] Tache B.7 : ajouts et modifications de commentaires --- src/plateau.c | 308 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 209 insertions(+), 99 deletions(-) diff --git a/src/plateau.c b/src/plateau.c index a3ba2f0..9c1c415 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -241,9 +241,9 @@ void effect_card_FISE(board p, card c) faction faction_owner = p->factions[num_faction_owner]; // faction_owner représente la faction possédant la carte c venant d'être retournée - int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); // f_owner_ptsddrs représente les points de faction_owner + int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); // f_owner_ptsddrs représente les points DDRS de faction_owner - set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs+1); + set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + 1); } @@ -275,7 +275,10 @@ void effect_card_FISA(board p, card c) int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); - int count_card = 0; // count_card compte le nombre de cartes retournées sur le plateau + int count_card = 0; // count_card représentera le nombre de cartes retournées sur le plateau + + + // Tout d'abord, on détermine la valeur de count_card en fonction des cartes retournées sur le plateau for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE) ; i++) // (BOARD_SIZE*BOARD_SIZE) car il peut y avoir des cartes retournées n'importe où sur le plateau, à cause des effets des autres cartes @@ -291,7 +294,10 @@ void effect_card_FISA(board p, card c) } - if (!(count_card % 2)) // Dans ce cas, il y a un nombre pair de cartes retournées sur le plateau + // Ensuite, si count_card est pair alors faction_owner gagne 2 points DDRS + + + if (!(count_card % 2)) { set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + 2); @@ -327,9 +333,13 @@ void effect_card_FC(board p, card c) int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); + + // Tout d'abord, on détermine si il y a au moins une carte de type FC retournée sur le plateau + + int i = 0; - bool ind_FC = false; // ind_FC indique si il y a au moins une carte de type FC retournée sur le plateau + bool ind_FC = false; // ind_FC indiquera si il y a au moins une carte de type FC retournée sur le plateau CardType t; // t : type de la carte courante retournée de la boucle while @@ -357,7 +367,10 @@ void effect_card_FC(board p, card c) } - if (ind_FC) // Si ind_FC == true + // Ensuite, si ind_FC == true alors faction_owner gagne 4 points DDRS + + + if (ind_FC) { set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + 4); @@ -394,7 +407,11 @@ void effect_card_ECOLOGIIE(board p, card c) int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); - int count_card = 0; // count_card compte le nombre de cartes retournées de type FISE, FISA ou FC sur le plateau + int count_card = 0; // count_card représentera le nombre de cartes retournées de type FISE, FISA ou FC sur le plateau + + + // Tout d'abord, on détermine la valeur de count_card en fonction des cartes retournées sur le plateau + CardType t; // t : type de la carte courante retournée de la boucle for @@ -420,7 +437,10 @@ void effect_card_ECOLOGIIE(board p, card c) } - if (count_card) // Si count_card != 0 alors count_card == true + // Ensuite, si count_card != 0 alors faction_owner gagne count_card point(s) DDRS + + + if (count_card) { set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + count_card); @@ -452,12 +472,15 @@ void effect_card_ECOLOGIIE(board p, card c) void effect_card_LIIENS(board p) { - Stack card_FISE_FISA_FC = empty_stack(); // card_FISE_FISA_FC représente le paquet de cartes de type FISE, FISA, ou FC qui étaient retournées sur le plateau, et qu'on a retirées du plateau + Stack card_FISE_FISA_FC = empty_stack(); // card_FISE_FISA_FC représentera le paquet de cartes de type FISE, FISA, ou FC qui sont retournées sur le plateau, et qui seront retirées du plateau CardType t; // t : type de la carte courante retournée de la boucle for + + + // Tout d'abord, on retire les cartes de type FISE, FISA, ou FC retournées, et on les ajoute dans card_FISE_FISA_FC - for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE); i++) // Tout d'abord, on retire les cartes de type FISE, FISA, ou FC retournées, et on les ajoute dans card_FISE_FISA_FC + for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE); i++ ) { if ((p->tabBoard[i]).state == FaceUp) @@ -482,12 +505,18 @@ void effect_card_LIIENS(board p) } - shuffle_stack(card_FISE_FISA_FC); // Ensuite, on mélange card_FISE_FISA_FC + // Ensuite, on mélange card_FISE_FISA_FC - int i = 0; + shuffle_stack(card_FISE_FISA_FC); + + + // Enfin, on place les cartes de card_FISE_FISA_FC tout en haut à gauche du plateau, dans le même ordre que l'ordre des cartes que l'on retire de card_FISE_FISA_FC + + + int i = 0; - while ( !(is_stack_empty(card_FISE_FISA_FC)) ) // Enfin, on place les cartes de card_FISE_FISA_FC tout en haut à gauche du plateau, dans le même ordre que l'ordre des cartes que l'on retire de card_FISE_FISA_FC + while ( !(is_stack_empty(card_FISE_FISA_FC)) ) { if ( (p->tabBoard[i]).state == Empty ) @@ -536,12 +565,15 @@ void effect_card_SOIREE_SANS_ALCOOL(board p, card c) int i = 0; - bool ind_alcool = false; // ind_alcool indique si il y a au moins une carte de type ALCOOL retournée sur le plateau + bool ind_alcool = false; // ind_alcool indiquera si il y a au moins une carte de type ALCOOL retournée sur le plateau CardType t; // t : type de la carte courante retournée de la boucle while - while (i < (BOARD_SIZE*BOARD_SIZE) && !ind_alcool) // On vérifie tout d'abord si il y a au moins une cartes de type alcool retournée sur le plateau + // Tout d'abord, on vérifie si il y a au moins une cartes de type alcool retournée sur le plateau + + + while (i < (BOARD_SIZE*BOARD_SIZE) && !ind_alcool) { if ((p->tabBoard[i]).state == FaceUp) @@ -564,7 +596,10 @@ void effect_card_SOIREE_SANS_ALCOOL(board p, card c) } - if (ind_alcool) // Si ind_alcool == true, on supprime toutes les cartes de type FISE, FISA ou FC retournée sur le plateau; et on supprime la première et la dernière ligne + // Ensuite, si ind_alcool == true alors on supprime toutes les cartes de type FISE, FISA ou FC retournée sur le plateau; et on supprime la première et la dernière ligne + + + if (ind_alcool) { for (int j = 0; j < (BOARD_SIZE*BOARD_SIZE); j++) // Suppression des cartes de type FISE, FISA ou FC retournée sur le plateau @@ -594,7 +629,7 @@ void effect_card_SOIREE_SANS_ALCOOL(board p, card c) int k = -1; // k : ligne à suprimer - bool indicator = false; // indicator indique si il y a au moins une carte sur la ligne numéro k + bool indicator = false; // indicator indiquera si il y a au moins une carte sur la ligne numéro k while (k < BOARD_SIZE - 1 && !indicator) // Détermination de la première ligne où il y a des cartes @@ -635,7 +670,7 @@ void effect_card_SOIREE_SANS_ALCOOL(board p, card c) k = BOARD_SIZE; // k : ligne à supprimer - indicator = false; // indicator indique si il y a au moins une carte sur la ligne numéro k + indicator = false; // indicator indiquera si il y a au moins une carte sur la ligne numéro k while (k > 0 && !indicator) // Détermination de la dernière ligne où il y a des cartes { @@ -672,7 +707,10 @@ void effect_card_SOIREE_SANS_ALCOOL(board p, card c) } - else // sinon, faction_owner gagne 5 points DDRS + // Sinon, faction_owner gagne 5 points DDRS + + + else { set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + 5); @@ -703,7 +741,7 @@ void effect_card_SOIREE_SANS_ALCOOL(board p, card c) void effect_card_ALCOOL(board p, int coord) { - // En 2 dimensions, si c a pour coordonnées x (xième ligne), y (yième colonne), alors : coord = x*BOARD_SIZE + y + // En 2 dimensions, si c a pour coordonnées x (xième ligne) et y (yième colonne) alors : coord = x*BOARD_SIZE + y int x = coord/BOARD_SIZE; // car y/BOARD_SIZE == 0 car y < BOARD_SIZE et y est un entier @@ -851,10 +889,13 @@ void effect_card_CAFE(board p, card c) int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); - bool ind_ecocup = false; // ind_ecocup indique si il y a au moins une carte de type Ecocup retournée sur le plateau + bool ind_ecocup = false; // ind_ecocup indiquera si il y a au moins une carte de type Ecocup retournée sur le plateau + + + // Tout d'abord, on vérifie si il y a au moins une cartes de type Ecocup retournée sur le plateau, et on supprime toutes les cartes Thé et Alcool retournées sur le plateau + CardType t; // t : type de la carte courante retournée de la boucle for - for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE); i++) { @@ -884,13 +925,20 @@ void effect_card_CAFE(board p, card c) } - if (ind_ecocup) // Si ind_ecocup == true + // Ensuite, si ind_ecocup == true alors faction_owner gagne 1 point DDRS + + + if (ind_ecocup) { set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + 1); } + + // Sinon, faction_owner perd 1 point DDRS + + else { @@ -929,10 +977,13 @@ void effect_card_THE(board p, card c) int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); - bool ind_ecocup = false; // ind_ecocup indique si il y a au moins une carte de type Ecocup retournée sur le plateau + bool ind_ecocup = false; // ind_ecocup indiquera si il y a au moins une carte de type Ecocup retournée sur le plateau + + + // Tout d'abord, on vérifie si il y a au moins une cartes de type Ecocup retournée sur le plateau, et on supprime toutes les cartes Café et Alcool retournées sur le plateau + CardType t; // t : type de la carte courante retournée de la boucle for - for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE); i++) { @@ -962,13 +1013,20 @@ void effect_card_THE(board p, card c) } - if (ind_ecocup) // Si ind_ecocup == true + // Ensuite, si ind_ecocup == true alors faction_owner gagne 1 point DDRS + + + if (ind_ecocup) { set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + 1); } + + // Sinon, faction_owner perd 1 point DDRS + + else { @@ -1085,11 +1143,14 @@ void effect_card_REPROGRAPHIE(board p, card c) faction faction_enemy = enemy_faction(p, num_faction_owner); - int f_enemy_ptsddrs = get_faction_ptsDDRS(faction_enemy); // f_enemy_ptsddrs représente les points de la faction ennemie de faction_owner + int f_enemy_ptsddrs = get_faction_ptsDDRS(faction_enemy); // f_enemy_ptsddrs représentera les points de la faction ennemie de faction_owner int tab[CardTypeCount]; // tab[i] contiendra le nombre de cartes ayant le type numéro i retournées sur le plateau + // Tout d'abord, on détermine le nombre d'occurrences de chaque carte retournée sur le plateau + + for (int i = 0; i < CardTypeCount; i++) // Initialisation de tab, afin que tous ses éléments soient égaux à 0 { @@ -1101,7 +1162,7 @@ void effect_card_REPROGRAPHIE(board p, card c) CardType t; // t : type de la carte courante retournée de la boucle for - for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE); i++) // On détermine le nombre d'occurrences de chaque carte qui est retournée sur le plateau + for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE); i++) { if ((p->tabBoard[i]).state == FaceUp) @@ -1116,6 +1177,9 @@ void effect_card_REPROGRAPHIE(board p, card c) } + // Ensuite, on détermine le nombre de points DDRS à retirer de la faction adverse + + int count = 0; // count contiendra le nombre de points DDRS à retirer de la faction adverse @@ -1127,6 +1191,9 @@ void effect_card_REPROGRAPHIE(board p, card c) } + // Enfin, si count > 0 alors faction_enemy perd count point(s) DDRS + + if (count) { @@ -1169,11 +1236,14 @@ void effect_card_ISOLATION_DU_BATIMENT(board p, card c, int coord) int f_enemy_ptsddrs = get_faction_ptsDDRS(faction_enemy); - int count_card_owner = 0; // count_card_owner représente le nombre de cartes non retournées et non supprimées du plateau, de la faction possédant la carte c dont l'effet est en train de se réaliser + int count_card_owner = 0; // count_card_owner représentera le nombre de cartes non retournées et non supprimées du plateau, de la faction possédant la carte c dont l'effet est en train de se réaliser - int count_card_enemy = 0; // count_card_enemy représente le nombre de cartes non retournées et non supprimées du plateau, de la faction ne possédant pas la carte c dont l'effet est en train de se réaliser + int count_card_enemy = 0; // count_card_enemy représentera le nombre de cartes non retournées et non supprimées du plateau, de la faction ne possédant pas la carte c dont l'effet est en train de se réaliser - int num_faction_owner_current_card; // num_faction_owner_current_card représente le numéro de la faction (0 ou 1) possédant la carte courante de la boucle for + int num_faction_owner_current_card; // num_faction_owner_current_card représentera le numéro de la faction (0 ou 1) possédant la carte courante de la boucle for + + + // Tout d'abord, on détermine la valeur de count_card_owner et de count_card_enemy en fonction des cartes non retournées et non supprimées sur le plateau for (int i = coord + 1; i < (BOARD_SIZE*BOARD_SIZE); i++) @@ -1204,6 +1274,10 @@ void effect_card_ISOLATION_DU_BATIMENT(board p, card c, int coord) } + // Ensuite, si count_card_owner > 0 alors faction_owner gagne count_card_owner point(s) DDRS + // Et si count_card_enemy > 0 alors faction_enemy gagne count_card_enemy point(s) DDRS + + if (count_card_owner) { @@ -1242,13 +1316,16 @@ void effect_card_ISOLATION_DU_BATIMENT(board p, card c, int coord) void effect_card_PARCOURS_SOBRIETE_NUMERIQUE(board p) { + // x et y représenteront les coordonnées de la première carte courante non retournée des boucles while (celle la plus à gauche sur la ligne x) + // x et (BOARD_SIZE - y - 1) représenteront les coordonnées de la deuxième carte courante non retournée des boucles while (celle la plus à droite sur la ligne x) + int x = -1; int y; - bool indicator1; + bool indicator1; //indicator1 indiquera si la première carte de la xième ligne a été retournée - bool indicator2; + bool indicator2; //indicator2 indiquera si la dernière carte de la xième ligne a été retournée while ( x < (BOARD_SIZE - 1) ) @@ -1258,12 +1335,12 @@ void effect_card_PARCOURS_SOBRIETE_NUMERIQUE(board p) y = 0; - indicator1 = false; //indicator1 indique si la première carte de la xième ligne a été retournée + indicator1 = false; - indicator2 = false; //indicator2 indique si la dernière carte de la xième ligne a été retournée + indicator2 = false; - while ( y <= (BOARD_SIZE/2 + 1) && ((!indicator1) || (!indicator2) ) ) // On explore les deux côtés de la xième ligne en même temps + while ( y <= (BOARD_SIZE/2 + 1) && ( (!indicator1) || (!indicator2) ) ) // On explore les deux côtés de la xième ligne en même temps { if ((p->tabBoard[x*BOARD_SIZE + y]).state == FaceDown && !indicator1) @@ -1321,10 +1398,13 @@ void effect_card_HEURES_SUPPLEMENTAIRES(board p, card c) int f_enemy_ptsddrs = get_faction_ptsDDRS(faction_enemy); - int count_h_supp = 0; // count_h_supp compte le nombre de cartes de type Heures_supplementaires retournées sur le plateau + int count_h_supp = 0; // count_h_supp représentera le nombre de cartes de type Heures_supplementaires retournées sur le plateau - CardType t; // t : type de la carte courante retournée de la boucle for + // Tout d'abord, on détermine la valeur de count_h_supp en fonction des cartes retournées et non supprimées sur le plateau + + + CardType t; // t : type de la carte courante retournée de la boucle for for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE); i++) { @@ -1345,7 +1425,16 @@ void effect_card_HEURES_SUPPLEMENTAIRES(board p, card c) } - set_faction_ptsDDRS(faction_enemy, f_enemy_ptsddrs - 3 * count_h_supp); + + // Enfin, si count_h_supp > 0 alors f_enemy_ptsddrs perd 3 * count_h_supp points DDRS + + + if (count_h_supp) + { + + set_faction_ptsDDRS(faction_enemy, f_enemy_ptsddrs - 3 * count_h_supp); + + } } @@ -1371,7 +1460,10 @@ void effect_card_HEURES_SUPPLEMENTAIRES(board p, card c) void effect_card_KAHINA_BOUCHAMA(board p, int coord) { - int count_card = 0; // count_card compte le nombre de cartes non retournées sur le plateau + int count_card = 0; // count_card représentera le nombre de cartes non retournées sur le plateau + + + // Tout d'abord, on détermine la valeur de count_card for (int i = coord + 1; i < (BOARD_SIZE*BOARD_SIZE); i++) @@ -1387,18 +1479,21 @@ void effect_card_KAHINA_BOUCHAMA(board p, int coord) } - if (count_card) // Si count_card != 0, alors on peut retirer une carte non retournées au hasard + // Ensuite, si count_card != 0 alors on peut retirer une carte non retournées au hasard + + + if (count_card) { srand(time(NULL)); - int random_card; // random_card est le numéro de la carte qui sera retirée, après celle qui a pour coordonnée 1D coord + int random_card; // random_card représentera le numéro de la carte qui sera retirée, après celle qui a pour coordonnée 1D coord random_card = (rand() % count_card) + 1; int i = coord + 1; - bool indicator = false; // indicator indique si la random_cardième carte après celle qui a pour coordonnée 1D coord a été retirée + bool indicator = false; // indicator indiquera si la random_cardième carte après celle qui a pour coordonnée 1D coord a été retirée while ( i < (BOARD_SIZE*BOARD_SIZE) && (!indicator) ) @@ -1453,24 +1548,24 @@ void effect_card_KEVIN_GOILARD(board p, card c) int count_card = 0; //count_card représentera le nombre de cartes qui ont été supprimées sur une ligne au hasard - int xmin; // xmin sera la ligne la plus en haut contenant au moins une carte + int xmin = 0; // xmin sera la ligne la plus en haut contenant au moins une carte - int xmax; // xmax sera la ligne la plus en bas contenant au moins une carte + int xmax = (BOARD_SIZE - 1); // xmax sera la ligne la plus en bas contenant au moins une carte - // Détermination de xmin et xmax + // Tout d'abord, on détermine xmin et xmax - bool indicator1 = false; // indicator1 indique si on a trouvé xmin + bool indicator1 = false; // indicator1 indiquera si on a trouvé xmin - bool indicator2 = false; // indicator2 indique si on a trouvé xmax + bool indicator2 = false; // indicator2 indiquera si on a trouvé xmax int x = -1; int y; - while ( x <= (BOARD_SIZE/2) && (!indicator1 || !indicator2) ) // On détermin xmin et xmax en même temps, en parcourant la partie gauche et la partie droite de la ligne x en même temps, et de la même façon (c'est symétrique par rapport à la droite verticale se trouvant au milieu du tableau) + while ( x <= (BOARD_SIZE/2) && (!indicator1 || !indicator2) ) // On détermine xmin et xmax en même temps, en parcourant la partie gauche et la partie droite de la ligne x en même temps, et de la même façon (c'est symétrique par rapport à la droite verticale se trouvant au milieu du tableau) { x += 1; @@ -1506,15 +1601,15 @@ void effect_card_KEVIN_GOILARD(board p, card c) } - // Détermination de la ligne à supprimer + // Ensuite, on détermine la ligne à supprimer à partir de xmin srand(time(NULL)); - x = (rand() % (xmax - xmin)) + 1; // La xième ligne à partir de xmin sera supprimée + x = (rand() % (xmax - xmin + 1)); // La xième ligne à partir de xmin sera supprimée - // Suppression de la xième ligne + // Suppression de la xième ligne à partir de xmin for (int k = 0; k < BOARD_SIZE; k++) @@ -1531,7 +1626,16 @@ void effect_card_KEVIN_GOILARD(board p, card c) } - set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + 2 * count_card); + + // Enfin, si count_card > 0 alors faction_owner gagne 2 * count_card points DDRS + + + if (count_card) + { + + set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + 2 * count_card); + + } } @@ -1582,10 +1686,10 @@ pair_card_coord effect_card_MASSINISSA_MERABET(board p, card c, int coord) int num_faction_owner = get_card_factionOwner(c); - // Détermination de la carte dont on souhaite réactiver l'effet + // Tout d'abord, on détermine la carte dont on souhaite réactiver l'effet - bool indicator = false; // indicator indique si on a trouvé la dernière carte retournée + bool indicator = false; // indicator indiquera si on a trouvé la dernière carte retournée int i = coord; @@ -1600,7 +1704,7 @@ pair_card_coord effect_card_MASSINISSA_MERABET(board p, card c, int coord) if ((p->tabBoard[i]).state == FaceUp ) { - set_card_factionOwner((p->tabBoard[i]).cellCard, num_faction_owner); + set_card_factionOwner((p->tabBoard[i]).cellCard, num_faction_owner); // On modifie le numéro de faction (représentant le numéro de la faction possédant la carte) de la dernière carte retournée sur le plateau new_c = (p->tabBoard[i]).cellCard; @@ -1611,7 +1715,7 @@ pair_card_coord effect_card_MASSINISSA_MERABET(board p, card c, int coord) } - // On regarde si il existe au moins une carte retournée sur le plateau + // Ensuite, on regarde si il existe au moins une carte retournée sur le plateau // new_c a pour coordonnée i @@ -1775,7 +1879,7 @@ void effect_card_FETIA_BANNOUR(board p, card c, int coord) int i = 0; - bool ind_h_supp = false; //ind_h_supp indique si la carte Heures supplémentaires est retournée sur le plateau + bool ind_h_supp = false; //ind_h_supp indiquera si la carte Heures supplémentaires est retournée sur le plateau CardType t; // t : type de la carte courante retournée de la boucle while @@ -1802,7 +1906,7 @@ void effect_card_FETIA_BANNOUR(board p, card c, int coord) } - // Ensuite, premier cas : ind_h_supp == true, on supprime toutes les cartes de la ligne et de la colonne où est posée la carte c de type Fetia_Bannour + // Ensuite, premier cas : si ind_h_supp == true alors on supprime toutes les cartes de la ligne et de la colonne où est posée la carte c de type Fetia_Bannour if (ind_h_supp) @@ -1830,13 +1934,13 @@ void effect_card_FETIA_BANNOUR(board p, card c, int coord) } - // Deuxième cas : ind_h_supp == false + // Deuxième cas : si ind_h_supp == false alors faction_owner peut gagner des points DDRS en fonction des cartes retournées sur le plateau else { - int count = 0; // count compte le nombre de cartes de type Catherine_Dubois, Anne-Laure_Ligozat, Guillaume_Burel, Christophe_Mouilleron, Thomas_Lim, Julien_Forest ou Dimitri_Watel retournée sur le plateau + int count = 0; // count représentera le nombre de cartes de type Catherine_Dubois, Anne-Laure_Ligozat, Guillaume_Burel, Christophe_Mouilleron, Thomas_Lim, Julien_Forest ou Dimitri_Watel retournée sur le plateau // Détermination de la valeur de count en fonction des cartes retournées sur le plateau @@ -1862,7 +1966,7 @@ void effect_card_FETIA_BANNOUR(board p, card c, int coord) } - // Mise à jour du nombre de points DDRS de faction_owner + // Si count > 0 alors faction_owner gagne count point(s) DDRS if (count) // Si count > 0 @@ -1904,13 +2008,13 @@ void effect_card_CATHERINE_DUBOIS(board p, int coord) int y = coord - x*BOARD_SIZE; // y : colonne sur laquelle est c - bool indicator1 = false; // indicator1 indique si la première carte de la xième ligne a été supprimée + bool indicator1 = false; // indicator1 indiquera si la première carte de la xième ligne a été supprimée - bool indicator2 = false; // indicator2 indique si la dernière carte de la xième ligne a été supprimée + bool indicator2 = false; // indicator2 indiquera si la dernière carte de la xième ligne a été supprimée - bool indicator3 = false; // indicator3 indique si la première carte de la yième colonne a été supprimée + bool indicator3 = false; // indicator3 indiquera si la première carte de la yième colonne a été supprimée - bool indicator4 = false; // indicator4 indique si la dernière carte de la yième colonne a été supprimée + bool indicator4 = false; // indicator4 indiquera si la dernière carte de la yième colonne a été supprimée int k = 0; @@ -1995,12 +2099,15 @@ void effect_card_ANNE_LAURE_LIGOZAT(board p, card c) int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); - bool indicator = false; // indicator indique si la dernière carte non retournée du plateau a été supprimée + bool indicator = false; // indicator indiquera si la dernière carte non retournée du plateau a été supprimée - int count = 0; // count compte le nombre de carte de type EcologIIE, Ecocup, Isolation_du_batiment ou Parcours_sobriete_numerique retournées sur le plateau + int count = 0; // count représentera le nombre de carte de type EcologIIE, Ecocup, Isolation_du_batiment ou Parcours_sobriete_numerique retournées sur le plateau - CardType t; // t : type de la carte courante retournée de la boucle for + // Tout d'abord, on détermine la valeur de count et on supprime la dernière carte non retournée du plateau + + + CardType t; // t : type de la carte courante retournée de la boucle for for (int i = (BOARD_SIZE*BOARD_SIZE - 1); i >= 0; i--) { @@ -2033,10 +2140,10 @@ void effect_card_ANNE_LAURE_LIGOZAT(board p, card c) } - // Mise à jour du nombre de points DDRS de faction_owner + // Ensuite, si count > 0 alors faction_owner gagne 3 * count points DDRS - if (count) // Si count > 0 + if (count) { set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + 3 * count); @@ -2115,7 +2222,7 @@ void effect_card_CHRISTOPHE_MOUILLERON(board p) int i = 0; - bool ind_h_supp = false; //ind_h_supp indique si la carte Heures supplémentaires est retournée sur le plateau + bool ind_h_supp = false; //ind_h_supp indiquera si la carte Heures supplémentaires est retournée sur le plateau CardType t; // t : type de la carte courante retournée de la boucle while @@ -2142,7 +2249,7 @@ void effect_card_CHRISTOPHE_MOUILLERON(board p) } - // Ensuite, si ind_h_supp == true, on supprime toutes les cartes retournées du plateau sauf les cartes de type Christophe_Mouilleron et Heures_supplementaires + // Ensuite, si ind_h_supp == true alors on supprime toutes les cartes retournées du plateau sauf les cartes de type Christophe_Mouilleron et Heures_supplementaires for (int j = 0; j < (BOARD_SIZE*BOARD_SIZE); j++) @@ -2202,9 +2309,9 @@ void effect_card_THOMAS_LIM(board p, card c) // Tout d'abord, on regarde si la carte Julien Forest est retournée sur le plateau - bool ind_julien_forest = false; //ind_julien_forest indique si la carte Julien Forest est retournée sur le plateau + bool ind_julien_forest = false; //ind_julien_forest indiquera si la carte Julien Forest est retournée sur le plateau - int count_fise = 0; // count_fise compte le nombre de cartes de type FISE retournées sur le plateau + int count_fise = 0; // count_fise représentera le nombre de cartes de type FISE retournées sur le plateau CardType t; // t : type de la carte courante retournée de la boucle for @@ -2238,7 +2345,7 @@ void effect_card_THOMAS_LIM(board p, card c) - // Ensuite, si count_fise != 0, alors f_owner_ptsddrs ou f_enemy_ptsddrs est modifié en fonction de la valeur de ind_julien_forest + // Ensuite, si count_fise != 0, alors faction_owner gagne 3 * count_fise points DDRS ou non, et faction_enemy perd count_fise point(s) DDRS ou non en fonction de la valeur de ind_julien_forest if ( count_fise ) @@ -2294,9 +2401,9 @@ void effect_card_JULIEN_FOREST(board p, card c) // Tout d'abord, on regarde si la carte Café est retournée sur le plateau - bool ind_cafe = false; //ind_cafe indique si la carte Café est retournée sur le plateau + bool ind_cafe = false; //ind_cafe indiquera si la carte Café est retournée sur le plateau - int count_fise = 0; // count_fise compte le nombre de cartes de type FISE retournées sur le plateau + int count_fise = 0; // count_fise représentera le nombre de cartes de type FISE retournées sur le plateau CardType t; // t : type de la carte courante retournée de la boucle for @@ -2329,7 +2436,7 @@ void effect_card_JULIEN_FOREST(board p, card c) } - // Ensuite, si count_fise != 0 et si ind_cafe == true, alors f_owner_ptsddrs est modifié + // Ensuite, si count_fise != 0 et si ind_cafe == true alors faction_owner gagne 6 * count_fise points DDRS if ( count_fise && ind_cafe ) @@ -2373,9 +2480,9 @@ void effect_card_DIMITRI_WATEL(board p, card c) // Tout d'abord, on regarde si la carte Thé est retournée sur le plateau - bool ind_the = false; //ind_the indique si la carte Thé est retournée sur le plateau + bool ind_the = false; //ind_the indiquera si la carte Thé est retournée sur le plateau - int count_fisa_fc = 0; // count_fisa_fc compte le nombre de cartes de type FISE retournées sur le plateau + int count_fisa_fc = 0; // count_fisa_fc représentera le nombre de cartes de type FISE retournées sur le plateau CardType t; // t : type de la carte courante retournée de la boucle for @@ -2408,7 +2515,7 @@ void effect_card_DIMITRI_WATEL(board p, card c) } - // Ensuite, si count_fisa_fc != 0 et si ind_the == true, alors f_owner_ptsddrs est modifié + // Ensuite, si count_fisa_fc != 0 et si ind_the == true alors faction_owner gagne 3 * count_fisa_fc points DDRS if ( count_fisa_fc && ind_the ) @@ -2450,13 +2557,13 @@ void effect_card_DJIBRIL_AURELIEN_DEMBELE_CABOT(board p, card c, int coord) int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); - int x = coord/BOARD_SIZE; // x représente le numéro de la ligne sur laquelle se trouve x + int x = coord/BOARD_SIZE; // x représente le numéro de la ligne sur laquelle se trouve c // Tout d'abord, on regarde si il y a plus de 3 cartes retournées sur la xième ligne du plateau - int count = 0; // count compte le nombre de cartes retournées sur la xième ligne du plateau + int count = 0; // count représentera le nombre de cartes retournées sur la xième ligne du plateau int y = 0; @@ -2475,7 +2582,7 @@ void effect_card_DJIBRIL_AURELIEN_DEMBELE_CABOT(board p, card c, int coord) } - // Ensuite, en fonction de la valeur de count, on modifie ou non la valeur de f_owner_ptsddrs + // Ensuite, si count >= 3 alors faction_owner gagne 5 points DDRS if ( count >= 3) @@ -2506,9 +2613,13 @@ void effect_card_DJIBRIL_AURELIEN_DEMBELE_CABOT(board p, card c, int coord) * Thomas Lim, Julien Forest ou Dimitri Watel, mélangez les et placez les à gauche de la case la plus à gauche de la première ligne. * Les prochaines cartes à être retournées sont ces cartes là . Sinon, supprimez ces cartes du plateau." * - * Remarque : lIIEns - * - * + * Remarques : + Si parmi les 5 cartes placées en haut à gauche du plateau il y a la carte lIIEns, alors l'effet de la carte Éric Lejeune est prioritaire + * sur l'effet de la carte lIIEns qui sera de nouveau retournée et activée (à cause de la carte Éric Lejeune est prioritaire ) + * Autrement dit, si il y a une cartes lIIEns parmi les cartes mise en haut à gauche à la suite de l'effet d'une carte Éric Lejeune, + * les prochaines cartes à être retournées vont être celles qui ont été déplacées par la carte Éric Lejeune, + * et non celle qui ont été déplacées par la carte lIIEns. + * + Afin d'éviter les cas où une manche peut avoir une durée infinie, on décide de ne jamais prendre de carte de type Eric_Lejeune sur le plateau + * si il y en a au moins une qui est retournée *\return rien */ @@ -2516,15 +2627,12 @@ void effect_card_DJIBRIL_AURELIEN_DEMBELE_CABOT(board p, card c, int coord) void effect_card_ERIC_LEJEUNE(board p) { - // Remarque : afin d'éviter les cas où un round peut avoir une durée infinie, on décide de ne jamais prendre de carte de type Eric_Lejeune sur le plateau si il y en a au moins une qui est retournée - - Stack stack_card = empty_stack(); // stack_card représentera le paquet de 5 cartes au maximum, et de cartes qui étaient retournées sur le plateau, et qu'on a retirées du plateau bool indicator = false; // indicator indiquera si parmi les cartes choisies au hasard, il y en a au moins une de type Catherine_Dubois, Anne_Laure_Ligozat, Guillaume_Burel, Christophe_Mouilleron, Thomas_Lim, Julien_Forest ou Dimitri_Watel - // Détermination du nombre total de cartes retournées et n'ayant pas le type Eric_Lejeune restantes sur le plateau + // Tout d'abord, on détermine du nombre total de cartes retournées et n'ayant pas le type Eric_Lejeune restantes sur le plateau int count_card = 0; @@ -2552,7 +2660,7 @@ void effect_card_ERIC_LEJEUNE(board p) } - // Détermination au hasard de 5 cartes retournées sur le plateau + // Ensuite, on détermine au hasard 5 cartes retournées sur le plateau // n1, n2, n3, n4, n5 correspondent aux numéros des 5 cartes retournées choisies au hasard sur le plateau @@ -2922,7 +3030,7 @@ void effect_card_LUCIENNE_PACAVE(board p, card c, int coord) // Tout d'abord, on regarde si il y a au moins une carte FISA retournée sur la xième ligne ou sur la yième colonne du plateau - bool ind_fisa = false; // ind_fisa indique si il y a au moins une carte FISA retournée sur la xième ligne ou sur la yième colonne du plateau + bool ind_fisa = false; // ind_fisa indiquera si il y a au moins une carte FISA retournée sur la xième ligne ou sur la yième colonne du plateau int k = 0; @@ -2966,7 +3074,7 @@ void effect_card_LUCIENNE_PACAVE(board p, card c, int coord) } - // Ensuite, si ind_fisa == true, on modifie f_owner_ptsddrs + // Ensuite, si ind_fisa == true alors faction_owner gagne 5 points DDRS if ( ind_fisa ) @@ -3065,7 +3173,9 @@ void effect_card_KATRIN_SALHAB(board p, card c, int coord) } - // Ensuite, en fonction des valeurs de ind_d_a_d_c , ind_e_l et ind_l_p, soit la valeur de f_owner_ptsddrs est modifiée, soit on retourne les cartes étant sur la même ligne que c + // Ensuite, si les cartes Djibril-Aurélien Djembele-Cabeau, Eric Lejeune et Lucienne Pacavé sont retournées sur le plateau alors + // faction_owner gagne 10 points DDRS + // Sinon, on retourne les cartes étant sur la même ligne que c if ( ind_d_a_d_c && ind_e_l && ind_l_p ) @@ -3126,7 +3236,7 @@ void effect_card_LAURENT_PREVEL(board p, card c, int coord) // Tout d'abord, on vérifie si c est la dernière carte qui a été retournée du plateau - bool indicator = false; // indicator indique si il y a au moins une carte non retournée après c + bool indicator = false; // indicator indiquera si il y a au moins une carte non retournée après c int i = coord; @@ -3144,10 +3254,10 @@ void effect_card_LAURENT_PREVEL(board p, card c, int coord) } - // On applique ensuite l'effet de la carte c en fonction de la valeur de indicator + // Ensuite, si après c il n'y a pas de carte non retournée alors faction_owner gagne 1000000000 points DDRS afin de gagner la manche - if (!indicator) // Dans ce cas, après c, il n'y a pas de carte non retournée + if (!indicator) { set_faction_ptsDDRS(faction_owner, f_owner_ptsddrs + 1000000000); -- GitLab From 125358d4c15da275affe24164e1665e0a86cdeea Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Thu, 28 Apr 2022 23:37:59 +0200 Subject: [PATCH 108/163] =?UTF-8?q?Tache=20B.1=20:=20ajout=20de=20l'option?= =?UTF-8?q?=20:=20-o=20$@=20dans=20les=20commandes=20permettant=20de=20cr?= =?UTF-8?q?=C3=A9er=20les=20fichiers=20objets,=20afin=20que=20ceux-ci=20so?= =?UTF-8?q?ient=20dans=20le=20dossier=20obj.=20Modification=20du=20diagram?= =?UTF-8?q?me=20de=20Gantt=20par=20rapport=20=C3=A0=20la=20fin=20du=20lot?= =?UTF-8?q?=20B.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DiagrammeGantt.gan | 36 ++++++++++++++++++++++-------------- Makefile | 14 +++++++------- 2 files changed, 29 insertions(+), 21 deletions(-) diff --git a/DiagrammeGantt.gan b/DiagrammeGantt.gan index e171697..525a422 100644 --- a/DiagrammeGantt.gan +++ b/DiagrammeGantt.gan @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="UTF-8"?><project name="Le projet de qualité supérieure" company="L'organisation de qualité supérieure" webLink="http://Leprojetdequalitésupériores" view-date="2022-04-11" view-index="0" gantt-divider-location="297" resource-divider-location="300" version="3.2.3240" locale="fr_FR"> +<?xml version="1.0" encoding="UTF-8"?><project name="Le projet de qualité supérieure" company="L'organisation de qualité supérieure" webLink="http://Leprojetdequalitésupériores" view-date="2022-03-22" view-index="0" gantt-divider-location="297" resource-divider-location="300" version="3.2.3241" locale="fr_FR"> <description><![CDATA[Un jeu de carte fait en C de qualité supérieure, avec une équipe de qualité supérieure.]]></description> <view zooming-state="default:0" id="gantt-chart"> <field id="tpd3" name="Nom" width="155" order="0"/> @@ -46,46 +46,54 @@ <task id="0" name="A.1" color="#8cb6ce" meeting="false" start="2022-03-18" duration="2" complete="100" thirdDate="2022-03-23" thirdDate-constraint="0" expand="true"> <depend id="11" type="2" difference="0" hardness="Strong"/> </task> - <task id="11" name="B.1" color="#8cb6ce" meeting="false" start="2022-03-22" duration="9" complete="0" thirdDate="2022-03-11" thirdDate-constraint="0" expand="true"> + <task id="11" name="B.1" color="#8cb6ce" meeting="false" start="2022-03-22" duration="9" complete="100" thirdDate="2022-03-11" thirdDate-constraint="0" expand="true"> <depend id="12" type="2" difference="0" hardness="Strong"/> <depend id="13" type="2" difference="0" hardness="Strong"/> <depend id="14" type="2" difference="0" hardness="Strong"/> </task> - <task id="12" name="B.2" color="#8cb6ce" meeting="false" start="2022-04-04" duration="15" complete="0" thirdDate="2022-03-11" thirdDate-constraint="0" expand="true"/> - <task id="13" name="B.3" color="#8cb6ce" meeting="false" start="2022-04-04" duration="15" complete="0" thirdDate="2022-03-11" thirdDate-constraint="0" expand="true"> - <depend id="15" type="2" difference="0" hardness="Strong"/> + <task id="12" name="B.2" color="#8cb6ce" meeting="false" start="2022-04-04" duration="20" complete="100" thirdDate="2022-03-11" thirdDate-constraint="0" expand="true"> + <depend id="19" type="2" difference="0" hardness="Strong"/> + </task> + <task id="13" name="B.3" color="#8cb6ce" meeting="false" start="2022-04-04" duration="5" complete="100" thirdDate="2022-03-11" thirdDate-constraint="0" expand="true"> <depend id="16" type="2" difference="0" hardness="Strong"/> </task> - <task id="14" name="B.4" color="#8cb6ce" meeting="false" start="2022-04-04" duration="1" complete="0" thirdDate="2022-03-11" thirdDate-constraint="0" expand="true"> + <task id="14" name="B.4" color="#8cb6ce" meeting="false" start="2022-04-04" duration="1" complete="100" thirdDate="2022-03-11" thirdDate-constraint="0" expand="true"> <depend id="16" type="2" difference="0" hardness="Strong"/> </task> - <task id="15" name="B.5" color="#8cb6ce" meeting="false" start="2022-04-25" duration="15" complete="0" thirdDate="2022-03-11" thirdDate-constraint="0" expand="true"> + <task id="15" name="B.5" color="#8cb6ce" meeting="false" start="2022-04-21" duration="1" complete="100" thirdDate="2022-03-11" thirdDate-constraint="0" expand="true"> <depend id="17" type="2" difference="0" hardness="Strong"/> <depend id="18" type="2" difference="0" hardness="Strong"/> </task> - <task id="16" name="B.6" color="#8cb6ce" meeting="false" start="2022-04-25" duration="15" complete="0" thirdDate="2022-03-11" thirdDate-constraint="0" expand="true"/> - <task id="17" name="B.7" color="#8cb6ce" meeting="false" start="2022-05-16" duration="15" complete="0" thirdDate="2022-03-11" thirdDate-constraint="0" expand="true"/> - <task id="18" name="B.8" color="#8cb6ce" meeting="false" start="2022-05-16" duration="15" complete="0" thirdDate="2022-03-11" thirdDate-constraint="0" expand="true"/> + <task id="16" name="B.6" color="#8cb6ce" meeting="false" start="2022-04-11" duration="8" complete="100" thirdDate="2022-03-11" thirdDate-constraint="0" expand="true"> + <depend id="15" type="2" difference="0" hardness="Strong"/> + </task> + <task id="17" name="B.7" color="#8cb6ce" meeting="false" start="2022-04-22" duration="5" complete="100" thirdDate="2022-03-11" thirdDate-constraint="0" expand="true"> + <depend id="19" type="2" difference="0" hardness="Strong"/> + </task> + <task id="18" name="B.8" color="#8cb6ce" meeting="false" start="2022-04-22" duration="2" complete="100" thirdDate="2022-03-11" thirdDate-constraint="0" expand="true"> + <depend id="19" type="2" difference="0" hardness="Strong"/> + </task> + <task id="19" name="C.1" color="#8cb6ce" meeting="false" start="2022-05-02" duration="1" complete="0" thirdDate="2022-04-01" thirdDate-constraint="0" expand="true"/> </tasks> <resources> <resource id="0" name="Coreau Aurelien" function="Default:0" contacts="aurelien.coreau@ensiie.fr" phone=""/> - <resource id="1" name="Fond Martin" function="Default:0" contacts="martin.fond@ensiie.fr" phone=""/> <resource id="2" name="Desrumeaux Lucas" function="Default:0" contacts="lucas.desrumeaux@ensiie.fr" phone=""/> <resource id="3" name="Fiscus Félicien" function="Default:0" contacts="felicien.fiscus@ensiie.fr" phone=""/> + <resource id="1" name="Fond Martin" function="Default:0" contacts="martin.fond@ensiie.fr" phone=""/> </resources> <allocations> <allocation task-id="2" resource-id="0" function="Default:0" responsible="false" load="100.0"/> <allocation task-id="11" resource-id="0" function="Default:0" responsible="false" load="100.0"/> <allocation task-id="17" resource-id="0" function="Default:0" responsible="false" load="100.0"/> - <allocation task-id="1" resource-id="1" function="Default:0" responsible="false" load="100.0"/> - <allocation task-id="14" resource-id="1" function="Default:0" responsible="false" load="100.0"/> - <allocation task-id="16" resource-id="1" function="Default:0" responsible="false" load="100.0"/> <allocation task-id="3" resource-id="2" function="Default:0" responsible="false" load="100.0"/> <allocation task-id="15" resource-id="2" function="Default:0" responsible="false" load="100.0"/> <allocation task-id="12" resource-id="2" function="Default:0" responsible="false" load="100.0"/> <allocation task-id="0" resource-id="3" function="Default:0" responsible="false" load="100.0"/> <allocation task-id="13" resource-id="3" function="Default:0" responsible="false" load="100.0"/> <allocation task-id="18" resource-id="3" function="Default:0" responsible="false" load="100.0"/> + <allocation task-id="1" resource-id="1" function="Default:0" responsible="false" load="100.0"/> + <allocation task-id="14" resource-id="1" function="Default:0" responsible="false" load="100.0"/> + <allocation task-id="16" resource-id="1" function="Default:0" responsible="false" load="100.0"/> </allocations> <vacations/> <previous/> diff --git a/Makefile b/Makefile index ef0644c..c71d347 100644 --- a/Makefile +++ b/Makefile @@ -29,37 +29,37 @@ $(TARGET) : $(OBJS) ./obj/main.o : ./src/main.c ./headers/carte.h ./headers/faction.h ./headers/plateau.h ./headers/interface.h ./headers/OurRandom.h - $(CC) $(CFLAGS) -c $< + $(CC) $(CFLAGS) -c -o $@ $< ./obj/OurRandom.o : ./src/OurRandom.c ./headers/OurRandom.h - $(CC) $(CFLAGS) -c $< + $(CC) $(CFLAGS) -c -o $@ $< ./obj/structure.o : ./src/structure.c ./headers/structure.h - $(CC) $(CFLAGS) -c $< + $(CC) $(CFLAGS) -c -o $@ $< ./obj/carte.o : ./src/carte.c ./headers/carte.h ./headers/structure.h - $(CC) $(CFLAGS) -c $< + $(CC) $(CFLAGS) -c -o $@ $< ./obj/faction.o : ./src/faction.c ./headers/faction.h ./headers/structure.h - $(CC) $(CFLAGS) -c $< + $(CC) $(CFLAGS) -c -o $@ $< ./obj/plateau.o : ./src/plateau.c ./headers/plateau.h ./headers/structure.h ./headers/carte.h ./headers/faction.h - $(CC) $(CFLAGS) -c $< + $(CC) $(CFLAGS) -c -o $@ $< ./obj/interface.o : ./src/interface.c ./headers/interface.h ./headers/carte.h ./headers/faction.h ./headers/plateau.h - $(CC) $(CFLAGS) -c $< + $(CC) $(CFLAGS) -c -o $@ $< -- GitLab From 681f42bc6fe7f7428f92c9f15a835ead362b76cf Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Fri, 29 Apr 2022 00:09:31 +0200 Subject: [PATCH 109/163] Modification du 8 en 16 dans BOARD_SIZE --- headers/structure.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/headers/structure.h b/headers/structure.h index 7ff3cbc..7e4f678 100644 --- a/headers/structure.h +++ b/headers/structure.h @@ -9,7 +9,7 @@ #define HAND_SIZE 8 #define MAX_LEN 200 -#define BOARD_SIZE (2 * 8 - 1) /*obliger de hardcoder le 8, sinon probleme d'ordre de la compilation*/ +#define BOARD_SIZE (2 * 16 - 1) /*obliger de hardcoder le 16, sinon probleme d'ordre de la compilation*/ #include "carte.h" typedef struct card* card; -- GitLab From 8d6793dc15407dd92cfe2ed5826ec1d03f6c0e54 Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Fri, 29 Apr 2022 19:03:39 +0200 Subject: [PATCH 110/163] Tache B.7 : modification de la fonction effect_card_MASSINISSA_MERABET(). Ajout d'un type struct et d'une variable globale ayant ce nouveau type pour la fonction effect_card_MASSINISSA_MERABET() --- src/plateau.c | 589 ++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 451 insertions(+), 138 deletions(-) diff --git a/src/plateau.c b/src/plateau.c index 9c1c415..e4f8873 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -195,6 +195,42 @@ void put_card(board p, card c, int coord) +// Un type struct utilisé pour une variable globale afin de garder en mémoire la dernière carte et l'avant dernière carte dont les effets ont été activés +// Cette variable globale sera utile pour la procédure effect_card_MASSINISSA_MERABET() + + +/** + * \struct last_penultimate_card + * \brief Un objet ayant ce type correspond à un 4-uplet (last_card, last_card_coord, penultimate_card, penultimate_card_coord) + * où : last_card représente la dernière carte dont l'effet a été activé, cette carte est à la coordonnée 1D last_card_coord + * penultimate_card représente l'avant dernière carte dont l'effet a été activé, cette carte est à la coordonnée 1D penultimate_card_coord + */ + + +typedef struct last_penultimate_card +{ + card last_card; + + int last_card_coord; + + card penultimate_card; + + int penultimate_card_coord; + +} last_penultimate_card; + + +last_penultimate_card LPC = {NULL, -1, NULL, -1}; + + + + + + + + + + /** *\fn faction enemy_faction(board p, int num_faction_owner) *\param p de type board @@ -225,18 +261,27 @@ faction enemy_faction(board p, int num_faction_owner) /** - *\fn void effect_card_FISE(board p, card c) + *\fn void effect_card_FISE(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c, de type FISE, sur le plateau p : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type FISE, sur le plateau p : * "La faction qui a posé cette carte gagne 1 point DDRS." *\return rien */ -void effect_card_FISE(board p, card c) +void effect_card_FISE(board p, card c, int coord) { + // Modification de la variable globale LPC + + LPC.penultimate_card_coord = LPC.last_card_coord; + LPC.penultimate_card = LPC.last_card; + LPC.last_card_coord = coord; + LPC.last_card = c; + + int num_faction_owner = get_card_factionOwner(c); // num_faction_owner représente le numéro (0 ou 1) de la faction possédant la carte c venant d'être retournée faction faction_owner = p->factions[num_faction_owner]; // faction_owner représente la faction possédant la carte c venant d'être retournée @@ -257,18 +302,27 @@ void effect_card_FISE(board p, card c) /** - *\fn void effect_card_FISA(board p, card c) + *\fn void effect_card_FISA(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c de type FISA, sur le plateau p : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type FISA, sur le plateau p : * "La faction qui a posé cette carte gagne 2 points DDRS si le nombre de cartes retournées sur le plateau (y compris celle-ci) est pair, et 0 sinon." *\return rien */ -void effect_card_FISA(board p, card c) +void effect_card_FISA(board p, card c, int coord) { + // Modification de la variable globale LPC + + LPC.penultimate_card_coord = LPC.last_card_coord; + LPC.penultimate_card = LPC.last_card; + LPC.last_card_coord = coord; + LPC.last_card = c; + + int num_faction_owner = get_card_factionOwner(c); faction faction_owner = p->factions[num_faction_owner]; @@ -316,17 +370,27 @@ void effect_card_FISA(board p, card c) /** - *\fn void effect_card_FC(board p, card c) + *\fn void effect_card_FC(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c, de type FC, sur le plateau p : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type FC, sur le plateau p : * "La faction qui a posé cette carte gagne 4 points DDRS si au moins une autre carte FC est retournée sur le plateau et 0 sinon." *\return rien */ -void effect_card_FC(board p, card c) +void effect_card_FC(board p, card c, int coord) { + + // Modification de la variable globale LPC + + LPC.penultimate_card_coord = LPC.last_card_coord; + LPC.penultimate_card = LPC.last_card; + LPC.last_card_coord = coord; + LPC.last_card = c; + + int num_faction_owner = get_card_factionOwner(c); faction faction_owner = p->factions[num_faction_owner]; @@ -389,18 +453,27 @@ void effect_card_FC(board p, card c) /** - *\fn void effect_card_ECOLOGIIE(board p, card c) + *\fn void effect_card_ECOLOGIIE(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c de type EcologIIE, sur le plateau p : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type EcologIIE, sur le plateau p : * "La faction qui a posé cette carte gagne 1 point DDRS par carte FISE/FISA/FC retournée." *\return rien */ -void effect_card_ECOLOGIIE(board p, card c) +void effect_card_ECOLOGIIE(board p, card c, int coord) { + // Modification de la variable globale LPC + + LPC.penultimate_card_coord = LPC.last_card_coord; + LPC.penultimate_card = LPC.last_card; + LPC.last_card_coord = coord; + LPC.last_card = c; + + int num_faction_owner = get_card_factionOwner(c); faction faction_owner = p->factions[num_faction_owner]; @@ -459,9 +532,11 @@ void effect_card_ECOLOGIIE(board p, card c) /** - *\fn void effect_card_LIIENS(board p) + *\fn void effect_card_LIIENS(board p, card c, int coord) *\param p de type board - *\brief Procédure qui active l'effet d'une carte de type lIIEns, sur le plateau p : + *\param c de type card + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type lIIEns, sur le plateau p : * "Prenez toutes les cartes FISE/FISA/FC retournées, retirez les du plateau, mélangez les et * reposez les face cachées une par une sur la gauche de la carte la plus en haut à gauche du plateau, dans cet ordre. * Les prochaines cartes à être retournées sont ces cartes là ." @@ -469,9 +544,17 @@ void effect_card_ECOLOGIIE(board p, card c) */ -void effect_card_LIIENS(board p) +void effect_card_LIIENS(board p, card c, int coord) { + // Modification de la variable globale LPC + + LPC.penultimate_card_coord = LPC.last_card_coord; + LPC.penultimate_card = LPC.last_card; + LPC.last_card_coord = coord; + LPC.last_card = c; + + Stack card_FISE_FISA_FC = empty_stack(); // card_FISE_FISA_FC représentera le paquet de cartes de type FISE, FISA, ou FC qui sont retournées sur le plateau, et qui seront retirées du plateau CardType t; // t : type de la carte courante retournée de la boucle for @@ -543,10 +626,11 @@ void effect_card_LIIENS(board p) /** - *\fn void effect_card_SOIREE_SANS_ALCOOL(board p, card c) + *\fn void effect_card_SOIREE_SANS_ALCOOL(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c de type Soirée sans alcool, sur le plateau p : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Soirée sans alcool, sur le plateau p : * "Si au moins une carte alcool est retournée, supprimez toutes les cartes FISE/FISA/FC retournées du plateau. * Supprimez ensuite la première et la dernière ligne du plateau. * Sinon la faction qui a posé cette carte gagne 5 points DDRS." @@ -554,9 +638,17 @@ void effect_card_LIIENS(board p) */ -void effect_card_SOIREE_SANS_ALCOOL(board p, card c) +void effect_card_SOIREE_SANS_ALCOOL(board p, card c, int coord) { + // Modification de la variable globale LPC + + LPC.penultimate_card_coord = LPC.last_card_coord; + LPC.penultimate_card = LPC.last_card; + LPC.last_card_coord = coord; + LPC.last_card = c; + + int num_faction_owner = get_card_factionOwner(c); faction faction_owner = p->factions[num_faction_owner]; @@ -729,18 +821,27 @@ void effect_card_SOIREE_SANS_ALCOOL(board p, card c) /** - *\fn void effect_card_ALCOOL(board p, int coord) + *\fn void effect_card_ALCOOL(board p, card c, int coord) *\param p de type board + *\param c de type card *\param coord de type int - *\brief Procédure qui active l'effet d'une carte, de coordonnée 1D coord, de type Alcool, sur le plateau p : + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Alcool, sur le plateau p : * "Supprimez du plateau toutes les cartes qui touchent cette carte-ci (mais laissez la carte Alcool sur le plateau)." *\return rien */ -void effect_card_ALCOOL(board p, int coord) +void effect_card_ALCOOL(board p, card c, int coord) { + // Modification de la variable globale LPC + + LPC.penultimate_card_coord = LPC.last_card_coord; + LPC.penultimate_card = LPC.last_card; + LPC.last_card_coord = coord; + LPC.last_card = c; + + // En 2 dimensions, si c a pour coordonnées x (xième ligne) et y (yième colonne) alors : coord = x*BOARD_SIZE + y int x = coord/BOARD_SIZE; // car y/BOARD_SIZE == 0 car y < BOARD_SIZE et y est un entier @@ -870,19 +971,28 @@ void effect_card_ALCOOL(board p, int coord) /** - *\fn void effect_card_CAFE(board p, card c) + *\fn void effect_card_CAFE(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c de type Café, sur le plateau p : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Café, sur le plateau p : * "Supprimez toutes les cartes Thé et Alcool retournées sur le plateau. * Si une carte Ecocup est retournée sur le plateau, la faction qui a posé cette carte gagne 1 point DDRS. Sinon elle perd 1 point DDRS." *\return rien */ -void effect_card_CAFE(board p, card c) +void effect_card_CAFE(board p, card c, int coord) { + // Modification de la variable globale LPC + + LPC.penultimate_card_coord = LPC.last_card_coord; + LPC.penultimate_card = LPC.last_card; + LPC.last_card_coord = coord; + LPC.last_card = c; + + int num_faction_owner = get_card_factionOwner(c); faction faction_owner = p->factions[num_faction_owner]; @@ -958,19 +1068,28 @@ void effect_card_CAFE(board p, card c) /** - *\fn void effect_card_THE(board p, card c) + *\fn void effect_card_THE(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c de type Thé, sur le plateau p : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Thé, sur le plateau p : * "Supprimez toutes les cartes Café et Alcool retournées sur le plateau. * Si une carte Ecocup est retournée sur le plateau, la faction qui a posé cette carte gagne 1 point DDRS. Sinon elle perd 1 point DDRS." *\return rien */ -void effect_card_THE(board p, card c) +void effect_card_THE(board p, card c, int coord) { + // Modification de la variable globale LPC + + LPC.penultimate_card_coord = LPC.last_card_coord; + LPC.penultimate_card = LPC.last_card; + LPC.last_card_coord = coord; + LPC.last_card = c; + + int num_faction_owner = get_card_factionOwner(c); faction faction_owner = p->factions[num_faction_owner]; @@ -1046,15 +1165,26 @@ void effect_card_THE(board p, card c) /** - *\fn void effect_card_ECOCUP() - *\brief Procédure qui active l'effet d'une carte de type Ecocup : + *\fn void effect_card_ECOCUP(card c, int coord) + *\param c de type card + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Ecocup, sur le plateau : * "Cette carte est sans effet." *\return rien */ -void effect_card_ECOCUP() -{} +void effect_card_ECOCUP(card c, int coord) +{ + + // Modification de la variable globale LPC + + LPC.penultimate_card_coord = LPC.last_card_coord; + LPC.penultimate_card = LPC.last_card; + LPC.last_card_coord = coord; + LPC.last_card = c; + +} @@ -1126,19 +1256,28 @@ int binom(int k, int n) /** - *\fn void effect_card_REPROGRAPHIE(board p, card c) + *\fn void effect_card_REPROGRAPHIE(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c de type Reprographie, sur le plateau p : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Reprographie, sur le plateau p : * "La faction adverse de celle qui a posé cette carte perd 1 points DDRS pour chaque paire de cartes retournées et identiques sur le plateau. * (S'il y a 3 cartes identiques, cela fait 3 paires)." *\return rien */ -void effect_card_REPROGRAPHIE(board p, card c) +void effect_card_REPROGRAPHIE(board p, card c, int coord) { + // Modification de la variable globale LPC + + LPC.penultimate_card_coord = LPC.last_card_coord; + LPC.penultimate_card = LPC.last_card; + LPC.last_card_coord = coord; + LPC.last_card = c; + + int num_faction_owner = get_card_factionOwner(c); faction faction_enemy = enemy_faction(p, num_faction_owner); @@ -1226,6 +1365,14 @@ void effect_card_REPROGRAPHIE(board p, card c) void effect_card_ISOLATION_DU_BATIMENT(board p, card c, int coord) { + // Modification de la variable globale LPC + + LPC.penultimate_card_coord = LPC.last_card_coord; + LPC.penultimate_card = LPC.last_card; + LPC.last_card_coord = coord; + LPC.last_card = c; + + int num_faction_owner = get_card_factionOwner(c); faction faction_owner = p->factions[num_faction_owner]; @@ -1305,17 +1452,27 @@ void effect_card_ISOLATION_DU_BATIMENT(board p, card c, int coord) /** - *\fn void effect_card_PARCOURS_SOBRIETE_NUMERIQUE(board p) + *\fn void effect_card_PARCOURS_SOBRIETE_NUMERIQUE(board p, card c, int coord) *\param p de type board - *\brief Procédure qui active l'effet d'une carte de type Sobriété numérique, sur le plateau p : + *\param c de type card + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Sobriété numérique, sur le plateau p : * "Retournez toutes les cartes non retournées les plus à gauche et à droite de chaque ligne, sans appliquer leur effet." *\return rien */ -void effect_card_PARCOURS_SOBRIETE_NUMERIQUE(board p) +void effect_card_PARCOURS_SOBRIETE_NUMERIQUE(board p, card c, int coord) { + // Modification de la variable globale LPC + + LPC.penultimate_card_coord = LPC.last_card_coord; + LPC.penultimate_card = LPC.last_card; + LPC.last_card_coord = coord; + LPC.last_card = c; + + // x et y représenteront les coordonnées de la première carte courante non retournée des boucles while (celle la plus à gauche sur la ligne x) // x et (BOARD_SIZE - y - 1) représenteront les coordonnées de la deuxième carte courante non retournée des boucles while (celle la plus à droite sur la ligne x) @@ -1380,18 +1537,27 @@ void effect_card_PARCOURS_SOBRIETE_NUMERIQUE(board p) /** - *\fn void effect_card_HEURES_SUPPLEMENTAIRES(board p, card c) + *\fn void effect_card_HEURES_SUPPLEMENTAIRES(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c de type Heures supplémentaires, sur le plateau p : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Heures supplémentaires, sur le plateau p : * "La faction adverse de celle qui a posé cette carte perd 3 points DDRS par carte Heures supplémentaires retournée sur le plateau (y compris celle-ci)." *\return rien */ -void effect_card_HEURES_SUPPLEMENTAIRES(board p, card c) +void effect_card_HEURES_SUPPLEMENTAIRES(board p, card c, int coord) { + // Modification de la variable globale LPC + + LPC.penultimate_card_coord = LPC.last_card_coord; + LPC.penultimate_card = LPC.last_card; + LPC.last_card_coord = coord; + LPC.last_card = c; + + int num_faction_owner = get_card_factionOwner(c); faction faction_enemy = enemy_faction(p, num_faction_owner); @@ -1448,18 +1614,27 @@ void effect_card_HEURES_SUPPLEMENTAIRES(board p, card c) /** - *\fn void effect_card_KAHINA_BOUCHAMA(board p, int coord) + *\fn void effect_card_KAHINA_BOUCHAMA(board p, card c, int coord) *\param p de type board + *\param c de type card *\param coord de type int - *\brief Procédure qui active l'effet d'une carte, de coordonnée 1D coord, de type Kahina Bouchama, sur le plateau p : + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Kahina Bouchama, sur le plateau p : * "Supprimez une carte non retournée du plateau choisie au hasard." *\return rien */ -void effect_card_KAHINA_BOUCHAMA(board p, int coord) +void effect_card_KAHINA_BOUCHAMA(board p, card c, int coord) { + // Modification de la variable globale LPC + + LPC.penultimate_card_coord = LPC.last_card_coord; + LPC.penultimate_card = LPC.last_card; + LPC.last_card_coord = coord; + LPC.last_card = c; + + int count_card = 0; // count_card représentera le nombre de cartes non retournées sur le plateau @@ -1528,18 +1703,27 @@ void effect_card_KAHINA_BOUCHAMA(board p, int coord) /** - *\fn void effect_card_KEVIN_GOILARD(board p, card c) + *\fn void effect_card_KEVIN_GOILARD(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c, de type Kevin Goilard, sur le plateau p : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Kevin Goilard, sur le plateau p : * "Supprimez une ligne au hasard, la faction qui a posé cette carte gagne 2 points DDRS par carte supprimée ainsi." *\return rien */ -void effect_card_KEVIN_GOILARD(board p, card c) +void effect_card_KEVIN_GOILARD(board p, card c, int coord) { + // Modification de la variable globale LPC + + LPC.penultimate_card_coord = LPC.last_card_coord; + LPC.penultimate_card = LPC.last_card; + LPC.last_card_coord = coord; + LPC.last_card = c; + + int num_faction_owner = get_card_factionOwner(c); faction faction_owner = p->factions[num_faction_owner]; @@ -1669,81 +1853,75 @@ typedef struct pair_card_coord /** - *\fn pair_card_coord effect_card_MASSINISSA_MERABET(board p, card c, int coord) - *\param p de type board + *\fn pair_card_coord effect_card_MASSINISSA_MERABET(card c, int coord) *\param c de type card *\param coord de type int - *\brief Fonction qui permet d'activer l'effet d'une carte c, de coordonnée 1D coord, de type Massinissa Merabet, sur le plateau p : + *\brief Fonction qui permet d'activer l'effet d'une carte c, de coordonnée 1D coord, de type Massinissa Merabet, sur le plateau : * "La faction qui a posé cette carte réactive l'effet de la dernière carte retournée avant Massinissa Merabet, * en faisant comme si elle l'avait posée elle-même, même si ce n'est pas le cas." *\return la carte dont l'effet sera activé immédiatement après la fin de cette fonction si elle existe, ainsi que sa position sur le plateau */ -pair_card_coord effect_card_MASSINISSA_MERABET(board p, card c, int coord) +pair_card_coord effect_card_MASSINISSA_MERABET(card c, int coord) { int num_faction_owner = get_card_factionOwner(c); + + CardType t = get_card_type(LPC.last_card); + pair_card_coord pcc; - // Tout d'abord, on détermine la carte dont on souhaite réactiver l'effet + if (LPC.last_card == NULL) + { - bool indicator = false; // indicator indiquera si on a trouvé la dernière carte retournée + pcc.card_in_coord = NULL; - int i = coord; + pcc.coord_card = -1; // Si avant c, il n'y a pas de carte retournée, la valeur de pcc.coord_card est -1 - card new_c; // new_c sera la carte dont on réactivera l'effet + } - while (i > 0 && !indicator) + else if ( t == Massinissa_Merabet && LPC.penultimate_card == NULL ) { - i--; - - if ((p->tabBoard[i]).state == FaceUp ) - { + pcc.card_in_coord = NULL; - set_card_factionOwner((p->tabBoard[i]).cellCard, num_faction_owner); // On modifie le numéro de faction (représentant le numéro de la faction possédant la carte) de la dernière carte retournée sur le plateau + pcc.coord_card = -1; // Si avant LPC.last_card, il n'y a pas de carte retournée, la valeur de pcc.coord_card est -1 - new_c = (p->tabBoard[i]).cellCard; + } - indicator = true; + else if (t == Massinissa_Merabet && LPC.penultimate_card != NULL) + { - } + set_card_factionOwner(LPC.penultimate_card, num_faction_owner); // On modifie le numéro de faction (représentant le numéro de la faction possédant la carte) de l'avant dernière carte qu'on a retournée sur le plateau et dont on a appliqué l'effet - } + pcc.card_in_coord = LPC.penultimate_card; + pcc.coord_card = LPC.penultimate_card_coord; - // Ensuite, on regarde si il existe au moins une carte retournée sur le plateau - // new_c a pour coordonnée i + } - if (indicator) // Dans ce cas, avant la carte c, il y a au moins une carte retournée + else { - pair_card_coord pcc; - - pcc.card_in_coord = new_c; + set_card_factionOwner(LPC.penultimate_card, num_faction_owner); // On modifie le numéro de faction (représentant le numéro de la faction possédant la carte) de la dernière carte qu'on a retournée sur le plateau et dont on a appliqué l'effet - pcc.coord_card = i; + pcc.card_in_coord = LPC.last_card; - return(pcc); + pcc.coord_card = LPC.last_card_coord; } - else // Dans ce cas, avant la carte c, il n'y a pas de carte retournée - { - - pair_card_coord pcc; - pcc.card_in_coord = NULL; - - pcc.coord_card = -1; // Si avant c, il n'y a pas de carte retournée, la valeur de pcc.coord_card est -1 + LPC.penultimate_card_coord = LPC.last_card_coord; + LPC.penultimate_card = LPC.last_card; + LPC.last_card_coord = coord; + LPC.last_card = c; - return(pcc); - - } + return (pcc); } @@ -1757,18 +1935,27 @@ pair_card_coord effect_card_MASSINISSA_MERABET(board p, card c, int coord) /** - *\fn void effect_card_VITERA_Y(board p, card c) + *\fn void effect_card_VITERA_Y(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c, de type Vitera y, sur le plateau p : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Vitera y, sur le plateau p : * "La faction qui a le moins de points DDRS gagne 3 points DDRS." *\return rien */ -void effect_card_VITERA_Y(board p, card c) +void effect_card_VITERA_Y(board p, card c, int coord) { + // Modification de la variable globale LPC + + LPC.penultimate_card_coord = LPC.last_card_coord; + LPC.penultimate_card = LPC.last_card; + LPC.last_card_coord = coord; + LPC.last_card = c; + + int num_faction_owner = get_card_factionOwner(c); faction faction_owner = p->factions[num_faction_owner]; @@ -1807,17 +1994,27 @@ void effect_card_VITERA_Y(board p, card c) /** - *\fn void effect_card_JONAS_SENIZERGUES(board p) + *\fn void effect_card_JONAS_SENIZERGUES(board p, card c, int coord) *\param p de type board - *\brief Procédure qui active l'effet d'une carte de type Jonas Senizergues, sur le plateau p : + *\param c de type card + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Jonas Senizergues, sur le plateau p : * "Supprimez toutes les cartes Heures supplémentaires retournées du plateau." *\return rien */ -void effect_card_JONAS_SENIZERGUES(board p) +void effect_card_JONAS_SENIZERGUES(board p, card c, int coord) { + // Modification de la variable globale LPC + + LPC.penultimate_card_coord = LPC.last_card_coord; + LPC.penultimate_card = LPC.last_card; + LPC.last_card_coord = coord; + LPC.last_card = c; + + CardType t; // t : type de la carte courante retournée de la boucle for for (int i = 0; i < (BOARD_SIZE*BOARD_SIZE); i++) @@ -1867,6 +2064,14 @@ void effect_card_JONAS_SENIZERGUES(board p) void effect_card_FETIA_BANNOUR(board p, card c, int coord) { + // Modification de la variable globale LPC + + LPC.penultimate_card_coord = LPC.last_card_coord; + LPC.penultimate_card = LPC.last_card; + LPC.last_card_coord = coord; + LPC.last_card = c; + + int num_faction_owner = get_card_factionOwner(c); faction faction_owner = p->factions[num_faction_owner]; @@ -1990,18 +2195,27 @@ void effect_card_FETIA_BANNOUR(board p, card c, int coord) /** - *\fn void effect_card_CATHERINE_DUBOIS(board p, int coord) + *\fn void effect_card_CATHERINE_DUBOIS(board p, card c, int coord) *\param p de type board + *\param c de type card *\param coord de type int - *\brief Procédure qui active l'effet d'une carte de coordonnée 1D coord, de type Catherine Dubois, sur le plateau p : + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Catherine Dubois, sur le plateau p : * "Supprimez la première et la dernière cartes de la ligne et de la colonne où est posée cette carte." *\return rien */ -void effect_card_CATHERINE_DUBOIS(board p, int coord) +void effect_card_CATHERINE_DUBOIS(board p, card c, int coord) { + // Modification de la variable globale LPC + + LPC.penultimate_card_coord = LPC.last_card_coord; + LPC.penultimate_card = LPC.last_card; + LPC.last_card_coord = coord; + LPC.last_card = c; + + // x et y sont les coordonnées 2D de c int x = coord/BOARD_SIZE; // x : ligne sur laquelle est c @@ -2079,10 +2293,11 @@ void effect_card_CATHERINE_DUBOIS(board p, int coord) /** - *\fn void effect_card_ANNE_LAURE_LIGOZAT(board p, card c) + *\fn void effect_card_ANNE_LAURE_LIGOZAT(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c de type Anne-Laure Ligozat, sur le plateau p : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Anne-Laure Ligozat, sur le plateau p : * "Pour chaque carte EcologIIE, Ecocup, Isolation du bâtiment et parcours Sobriété numérique retournée, * la faction qui a posé cette carte gagne 3 points DDRS et la dernière carte non retournée du plateau est supprimée. * (L'effet continue même si Anne-Laure Ligozat ou une des 4 cartes précédemment mentionnées est supprimée)." @@ -2090,9 +2305,17 @@ void effect_card_CATHERINE_DUBOIS(board p, int coord) */ -void effect_card_ANNE_LAURE_LIGOZAT(board p, card c) +void effect_card_ANNE_LAURE_LIGOZAT(board p, card c, int coord) { + // Modification de la variable globale LPC + + LPC.penultimate_card_coord = LPC.last_card_coord; + LPC.penultimate_card = LPC.last_card; + LPC.last_card_coord = coord; + LPC.last_card = c; + + int num_faction_owner = get_card_factionOwner(c); faction faction_owner = p->factions[num_faction_owner]; @@ -2162,17 +2385,27 @@ void effect_card_ANNE_LAURE_LIGOZAT(board p, card c) /** - *\fn void effect_card_GUILLAUME_BUREL(board p, card c) + *\fn void effect_card_GUILLAUME_BUREL(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c, de type Guillaume Burel, sur le plateau p : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Guillaume Burel, sur le plateau p : * "Si la faction adverse de celle qui a posé cette carte a plus de points DDRS, la seconde lui vole 3 points DDRS." *\return rien */ -void effect_card_GUILLAUME_BUREL(board p, card c) +void effect_card_GUILLAUME_BUREL(board p, card c, int coord) { + + // Modification de la variable globale LPC + + LPC.penultimate_card_coord = LPC.last_card_coord; + LPC.penultimate_card = LPC.last_card; + LPC.last_card_coord = coord; + LPC.last_card = c; + + int num_faction_owner = get_card_factionOwner(c); faction faction_owner = p->factions[num_faction_owner]; @@ -2205,18 +2438,28 @@ void effect_card_GUILLAUME_BUREL(board p, card c) /** - *\fn void effect_card_CHRISTOPHE_MOUILLERON(board p) + *\fn void effect_card_CHRISTOPHE_MOUILLERON(board p, card c, int coord) *\param p de type board - *\brief Procédure qui active l'effet d'une carte de type Christophe Mouilleron, sur le plateau p : + *\param c de type card + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Christophe Mouilleron, sur le plateau p : * "Si la carte Heures supplémentaires est retournée sur le plateau, * supprimez toutes les cartes retournées du plateau sauf les cartes Christophe Mouilleron et Heures supplémentaires." *\return rien */ -void effect_card_CHRISTOPHE_MOUILLERON(board p) +void effect_card_CHRISTOPHE_MOUILLERON(board p, card c, int coord) { + // Modification de la variable globale LPC + + LPC.penultimate_card_coord = LPC.last_card_coord; + LPC.penultimate_card = LPC.last_card; + LPC.last_card_coord = coord; + LPC.last_card = c; + + // Tout d'abord, on regarde si la carte Heures supplémentaires est retournée sur le plateau @@ -2283,18 +2526,28 @@ void effect_card_CHRISTOPHE_MOUILLERON(board p) /** - *\fn void effect_card_THOMAS_LIM(board p, card c) + *\fn void effect_card_THOMAS_LIM(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c, de type Thomas Lim, sur le plateau p : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Thomas Lim, sur le plateau p : * "Si Julien Forest n'est par retourné sur le plateau, la faction qui a posé cette carte gagne 3 points DDRS par carte FISE retournée sur le plateau. * Sinon la faction adverse perd 1 point DDRS par carte FISE retournée sur le plateau." *\return rien */ -void effect_card_THOMAS_LIM(board p, card c) +void effect_card_THOMAS_LIM(board p, card c, int coord) { + + // Modification de la variable globale LPC + + LPC.penultimate_card_coord = LPC.last_card_coord; + LPC.penultimate_card = LPC.last_card; + LPC.last_card_coord = coord; + LPC.last_card = c; + + int num_faction_owner = get_card_factionOwner(c); faction faction_owner = p->factions[num_faction_owner]; @@ -2379,18 +2632,27 @@ void effect_card_THOMAS_LIM(board p, card c) /** - *\fn void effect_card_JULIEN_FOREST(board p, card c) + *\fn void effect_card_JULIEN_FOREST(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c, de type Julien Forest, sur le plateau p : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Julien Forest, sur le plateau p : * "La faction qui a posé cette carte gagne 6 points DDRS par carte FISE retournée sur le plateau si au moins une carte Café est retournée sur le plateau." *\return rien */ -void effect_card_JULIEN_FOREST(board p, card c) +void effect_card_JULIEN_FOREST(board p, card c, int coord) { + // Modification de la variable globale LPC + + LPC.penultimate_card_coord = LPC.last_card_coord; + LPC.penultimate_card = LPC.last_card; + LPC.last_card_coord = coord; + LPC.last_card = c; + + int num_faction_owner = get_card_factionOwner(c); faction faction_owner = p->factions[num_faction_owner]; @@ -2458,18 +2720,27 @@ void effect_card_JULIEN_FOREST(board p, card c) /** - *\fn void effect_card_DIMITRI_WATEL(board p, card c) + *\fn void effect_card_DIMITRI_WATEL(board p, card c, int coord) *\param p de type board *\param c de type card - *\brief Procédure qui active l'effet d'une carte c, de type Dimitri Watel, sur le plateau p : + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Dimitri Watel, sur le plateau p : * "La faction qui a posé cette carte gagne 3 points DDRS par carte FISA ou FC retournée sur le plateau si au moins une carte Thé est retournée sur le plateau." *\return rien */ -void effect_card_DIMITRI_WATEL(board p, card c) +void effect_card_DIMITRI_WATEL(board p, card c, int coord) { + // Modification de la variable globale LPC + + LPC.penultimate_card_coord = LPC.last_card_coord; + LPC.penultimate_card = LPC.last_card; + LPC.last_card_coord = coord; + LPC.last_card = c; + + int num_faction_owner = get_card_factionOwner(c); faction faction_owner = p->factions[num_faction_owner]; @@ -2551,6 +2822,14 @@ void effect_card_DIMITRI_WATEL(board p, card c) void effect_card_DJIBRIL_AURELIEN_DEMBELE_CABOT(board p, card c, int coord) { + // Modification de la variable globale LPC + + LPC.penultimate_card_coord = LPC.last_card_coord; + LPC.penultimate_card = LPC.last_card; + LPC.last_card_coord = coord; + LPC.last_card = c; + + int num_faction_owner = get_card_factionOwner(c); faction faction_owner = p->factions[num_faction_owner]; @@ -2605,9 +2884,11 @@ void effect_card_DJIBRIL_AURELIEN_DEMBELE_CABOT(board p, card c, int coord) /** - *\fn void effect_card_ERIC_LEJEUNE(board p) + *\fn void effect_card_ERIC_LEJEUNE(board p, card c, int coord) *\param p de type board - *\brief Procédure qui active l'effet d'une carte de type Éric Lejeune, sur le plateau p : + *\param c de type card + *\param coord de type int + *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Éric Lejeune, sur le plateau p : * "Prenez au hasard 5 cartes retournées du plateau qui ne sont pas Éric Lejeune (ou toutes les cartes retournées du plateau s'il y a moins de 5). * Si une de ces cartes est une carte Catherine Dubois, Anne-Laure Ligozat, Guillaume Burel, Christophe Mouilleron, * Thomas Lim, Julien Forest ou Dimitri Watel, mélangez les et placez les à gauche de la case la plus à gauche de la première ligne. @@ -2624,9 +2905,17 @@ void effect_card_DJIBRIL_AURELIEN_DEMBELE_CABOT(board p, card c, int coord) */ -void effect_card_ERIC_LEJEUNE(board p) +void effect_card_ERIC_LEJEUNE(board p, card c, int coord) { + // Modification de la variable globale LPC + + LPC.penultimate_card_coord = LPC.last_card_coord; + LPC.penultimate_card = LPC.last_card; + LPC.last_card_coord = coord; + LPC.last_card = c; + + Stack stack_card = empty_stack(); // stack_card représentera le paquet de 5 cartes au maximum, et de cartes qui étaient retournées sur le plateau, et qu'on a retirées du plateau bool indicator = false; // indicator indiquera si parmi les cartes choisies au hasard, il y en a au moins une de type Catherine_Dubois, Anne_Laure_Ligozat, Guillaume_Burel, Christophe_Mouilleron, Thomas_Lim, Julien_Forest ou Dimitri_Watel @@ -3016,6 +3305,14 @@ void effect_card_ERIC_LEJEUNE(board p) void effect_card_LUCIENNE_PACAVE(board p, card c, int coord) { + // Modification de la variable globale LPC + + LPC.penultimate_card_coord = LPC.last_card_coord; + LPC.penultimate_card = LPC.last_card; + LPC.last_card_coord = coord; + LPC.last_card = c; + + int num_faction_owner = get_card_factionOwner(c); faction faction_owner = p->factions[num_faction_owner]; @@ -3112,6 +3409,14 @@ void effect_card_LUCIENNE_PACAVE(board p, card c, int coord) void effect_card_KATRIN_SALHAB(board p, card c, int coord) { + // Modification de la variable globale LPC + + LPC.penultimate_card_coord = LPC.last_card_coord; + LPC.penultimate_card = LPC.last_card; + LPC.last_card_coord = coord; + LPC.last_card = c; + + int num_faction_owner = get_card_factionOwner(c); faction faction_owner = p->factions[num_faction_owner]; @@ -3226,6 +3531,14 @@ void effect_card_KATRIN_SALHAB(board p, card c, int coord) void effect_card_LAURENT_PREVEL(board p, card c, int coord) { + // Modification de la variable globale LPC + + LPC.penultimate_card_coord = LPC.last_card_coord; + LPC.penultimate_card = LPC.last_card; + LPC.last_card_coord = coord; + LPC.last_card = c; + + int num_faction_owner = get_card_factionOwner(c); faction faction_owner = p->factions[num_faction_owner]; @@ -3293,7 +3606,7 @@ void card_effect(board p, card c, int coord) case FISE : - effect_card_FISE(p, c); + effect_card_FISE(p, c, coord); break; @@ -3301,7 +3614,7 @@ void card_effect(board p, card c, int coord) case FISA : - effect_card_FISA(p, c); + effect_card_FISA(p, c, coord); break; @@ -3309,7 +3622,7 @@ void card_effect(board p, card c, int coord) case FC : - effect_card_FC(p, c); + effect_card_FC(p, c, coord); break; @@ -3317,7 +3630,7 @@ void card_effect(board p, card c, int coord) case EcologIIE : - effect_card_ECOLOGIIE(p, c); + effect_card_ECOLOGIIE(p, c, coord); break; @@ -3325,7 +3638,7 @@ void card_effect(board p, card c, int coord) case lIIEns : - effect_card_LIIENS(p); + effect_card_LIIENS(p, c, coord); break; @@ -3333,7 +3646,7 @@ void card_effect(board p, card c, int coord) case Soiree_sans_alcool : - effect_card_SOIREE_SANS_ALCOOL(p, c); + effect_card_SOIREE_SANS_ALCOOL(p, c, coord); break; @@ -3341,7 +3654,7 @@ void card_effect(board p, card c, int coord) case Alcool : - effect_card_ALCOOL(p, coord); + effect_card_ALCOOL(p, c, coord); break; @@ -3349,7 +3662,7 @@ void card_effect(board p, card c, int coord) case Cafe : - effect_card_CAFE(p, c); + effect_card_CAFE(p, c, coord); break; @@ -3357,7 +3670,7 @@ void card_effect(board p, card c, int coord) case The : - effect_card_THE(p, c); + effect_card_THE(p, c, coord); break; @@ -3365,7 +3678,7 @@ void card_effect(board p, card c, int coord) case Ecocup : - effect_card_ECOCUP(); + effect_card_ECOCUP(c, coord); break; @@ -3373,7 +3686,7 @@ void card_effect(board p, card c, int coord) case Reprographie : - effect_card_REPROGRAPHIE(p, c); + effect_card_REPROGRAPHIE(p, c, coord); break; @@ -3389,7 +3702,7 @@ void card_effect(board p, card c, int coord) case Parcours_sobriete_numerique : - effect_card_PARCOURS_SOBRIETE_NUMERIQUE(p); + effect_card_PARCOURS_SOBRIETE_NUMERIQUE(p, c, coord); break; @@ -3397,7 +3710,7 @@ void card_effect(board p, card c, int coord) case Heures_supplementaires : - effect_card_HEURES_SUPPLEMENTAIRES(p, c); + effect_card_HEURES_SUPPLEMENTAIRES(p, c, coord); break; @@ -3405,7 +3718,7 @@ void card_effect(board p, card c, int coord) case Kahina_Bouchama : - effect_card_KAHINA_BOUCHAMA(p, coord); + effect_card_KAHINA_BOUCHAMA(p, c, coord); break; @@ -3413,7 +3726,7 @@ void card_effect(board p, card c, int coord) case Kevin_Goilard : - effect_card_KEVIN_GOILARD(p, c); + effect_card_KEVIN_GOILARD(p, c, coord); break; @@ -3423,7 +3736,7 @@ void card_effect(board p, card c, int coord) { pair_card_coord pcc; - pcc = effect_card_MASSINISSA_MERABET(p, c, coord); + pcc = effect_card_MASSINISSA_MERABET(c, coord); if (pcc.coord_card != -1) // Si pcc.coord_card != -1, alors avant la carte c de type Massinissa_Merabet, il y a au moins une carte retournée, et donc on active l'effet de la dernière carte retournée avant c (qui est pcc.coord_card) { @@ -3439,7 +3752,7 @@ void card_effect(board p, card c, int coord) case Vitera_Y : - effect_card_VITERA_Y(p, c); + effect_card_VITERA_Y(p, c, coord); break; @@ -3447,7 +3760,7 @@ void card_effect(board p, card c, int coord) case Jonas_Senizergues : - effect_card_JONAS_SENIZERGUES(p); + effect_card_JONAS_SENIZERGUES(p, c, coord); break; @@ -3463,7 +3776,7 @@ void card_effect(board p, card c, int coord) case Catherine_Dubois : - effect_card_CATHERINE_DUBOIS(p, coord); + effect_card_CATHERINE_DUBOIS(p, c, coord); break; @@ -3471,7 +3784,7 @@ void card_effect(board p, card c, int coord) case Anne_Laure_Ligozat : - effect_card_ANNE_LAURE_LIGOZAT(p, c); + effect_card_ANNE_LAURE_LIGOZAT(p, c, coord); break; @@ -3479,7 +3792,7 @@ void card_effect(board p, card c, int coord) case Guillaume_Burel : - effect_card_GUILLAUME_BUREL(p, c); + effect_card_GUILLAUME_BUREL(p, c, coord); break; @@ -3487,7 +3800,7 @@ void card_effect(board p, card c, int coord) case Christophe_Mouilleron : - effect_card_CHRISTOPHE_MOUILLERON(p); + effect_card_CHRISTOPHE_MOUILLERON(p, c, coord); break; @@ -3495,7 +3808,7 @@ void card_effect(board p, card c, int coord) case Thomas_Lim : - effect_card_THOMAS_LIM(p, c); + effect_card_THOMAS_LIM(p, c, coord); break; @@ -3503,7 +3816,7 @@ void card_effect(board p, card c, int coord) case Julien_Forest : - effect_card_JULIEN_FOREST(p, c); + effect_card_JULIEN_FOREST(p, c, coord); break; @@ -3511,7 +3824,7 @@ void card_effect(board p, card c, int coord) case Dimitri_Watel : - effect_card_DIMITRI_WATEL(p, c); + effect_card_DIMITRI_WATEL(p, c, coord); break; @@ -3527,7 +3840,7 @@ void card_effect(board p, card c, int coord) case Eric_Lejeune : - effect_card_ERIC_LEJEUNE(p); + effect_card_ERIC_LEJEUNE(p, c, coord); break; -- GitLab From c20c2c004ce1818b880b5cbdec63409807a9588a Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Fri, 29 Apr 2022 19:11:59 +0200 Subject: [PATCH 111/163] =?UTF-8?q?Tache=20B.7=20:=20correction=20d'erreur?= =?UTF-8?q?s=20de=20fran=C3=A7ais?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plateau.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/plateau.c b/src/plateau.c index e4f8873..de80bb1 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -3399,7 +3399,7 @@ void effect_card_LUCIENNE_PACAVE(board p, card c, int coord) *\param c de type card *\param coord de type int *\brief Procédure qui active l'effet d'une carte c, de coordonnée 1D coord, de type Katrin Salhab, sur le plateau p : - * "Si les cartes Djibril-Aurélien Djembele-Cabeau, Eric Lejeune et Lucienne Pacavé sont retournées, + * "Si les cartes Djibril-Aurélien Dembele-Cabeau, Eric Lejeune et Lucienne Pacavé sont retournées, * la faction qui a posé cette carte gagne 10 points DDRS. * Sinon, retournez toutes les cartes dans la même ligne de cette carte sans appliquer leurs effets." *\return rien @@ -3424,10 +3424,10 @@ void effect_card_KATRIN_SALHAB(board p, card c, int coord) int f_owner_ptsddrs = get_faction_ptsDDRS(faction_owner); - // Tout d'abord, on regarde si les cartes Djibril-Aurélien Djembele-Cabeau, Eric Lejeune et Lucienne Pacavé sont retournées sur le plateau + // Tout d'abord, on regarde si les cartes Djibril-Aurélien Dembele-Cabeau, Eric Lejeune et Lucienne Pacavé sont retournées sur le plateau - bool ind_d_a_d_c = false; // ind_d_a_d_c indique si la carte Djibril-Aurélien Djembele-Cabeau est retournée sur le plateau + bool ind_d_a_d_c = false; // ind_d_a_d_c indique si la carte Djibril-Aurélien Dembele-Cabeau est retournée sur le plateau bool ind_e_l = false; // ind_e_l indique si la carte Eric Lejeune est retournée sur le plateau @@ -3478,7 +3478,7 @@ void effect_card_KATRIN_SALHAB(board p, card c, int coord) } - // Ensuite, si les cartes Djibril-Aurélien Djembele-Cabeau, Eric Lejeune et Lucienne Pacavé sont retournées sur le plateau alors + // Ensuite, si les cartes Djibril-Aurélien Dembele-Cabeau, Eric Lejeune et Lucienne Pacavé sont retournées sur le plateau alors // faction_owner gagne 10 points DDRS // Sinon, on retourne les cartes étant sur la même ligne que c -- GitLab From ad47845e300ab1cb25a2ed32d40db5480521a920 Mon Sep 17 00:00:00 2001 From: Lucas Desrumeaux <lucas@carjager.com> Date: Sat, 30 Apr 2022 15:35:29 +0200 Subject: [PATCH 112/163] [B.5] Correctif pour les warning de plateau et carte --- headers/carte.h | 4 ---- headers/plateau.h | 4 ++-- obj/fichier | 0 src/carte.c | 3 +++ src/plateau.c | 10 +++++----- 5 files changed, 10 insertions(+), 11 deletions(-) delete mode 100644 obj/fichier diff --git a/headers/carte.h b/headers/carte.h index 4855d5f..bc13208 100644 --- a/headers/carte.h +++ b/headers/carte.h @@ -56,10 +56,6 @@ typedef enum { FOREACH_CARDTYPE(GENERATE_ENUM) }CardType; -static const char *CARDTYPE_STRING[] = { - FOREACH_CARDTYPE(GENERATE_STRING) -}; - /** *\brief Creation d'un type carte contenant toutes les informations relatives a une carte independament du reste du jeu. *\struct card diff --git a/headers/plateau.h b/headers/plateau.h index 19b885e..8db738d 100644 --- a/headers/plateau.h +++ b/headers/plateau.h @@ -107,7 +107,7 @@ void set_board_faction(board b, faction f, int numFaction); * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) * \date 2022-04-15 */ -void set_cell_card(cell oneCell, card oneCard); +void set_cell_card(cell* oneCell, card oneCard); /** * \brief Set the cell state object @@ -116,7 +116,7 @@ void set_cell_card(cell oneCell, card oneCard); * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) * \date 2022-04-15 */ -void set_cell_state(cell oneCell, CellState oneState); +void set_cell_state(cell* oneCell, CellState oneState); /*** Fonctions Autres ***/ diff --git a/obj/fichier b/obj/fichier deleted file mode 100644 index e69de29..0000000 diff --git a/src/carte.c b/src/carte.c index fed899b..2f905bd 100644 --- a/src/carte.c +++ b/src/carte.c @@ -12,6 +12,9 @@ #include <string.h> #include "../headers/carte.h" +static const char *CARDTYPE_STRING[] = { + FOREACH_CARDTYPE(GENERATE_STRING) +}; /** * \struct card diff --git a/src/plateau.c b/src/plateau.c index de80bb1..0f0769f 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -59,7 +59,7 @@ cell* get_board_tabBoard(board b){ * \see plateau.h */ cell get_board_cell(board b, int coord){ - b->tabBoard[coord]; + return b->tabBoard[coord]; }; /** @@ -82,16 +82,16 @@ void set_board_faction(board b, faction f, int numFaction){ * \brief Implémentation de la fonction set_cell_card * \see plateau.h */ -void set_cell_card(cell oneCell, card oneCard){ - oneCell.cellCard = oneCard; +void set_cell_card(cell* oneCell, card oneCard){ + oneCell->cellCard = oneCard; }; /** * \brief Implémentation de la fonction set_cell_state * \see plateau.h */ -void set_cell_state(cell oneCell, CellState oneState){ - oneCell.state = oneState; +void set_cell_state(cell* oneCell, CellState oneState){ + oneCell->state = oneState; }; /*** Fonctions Autres ***/ -- GitLab From ed52107e0373abfd05779eef6bafc4333039bf09 Mon Sep 17 00:00:00 2001 From: Martin Fond <martin.fond@ensiie.fr> Date: Sat, 30 Apr 2022 17:46:00 +0200 Subject: [PATCH 113/163] B.6 Changement B -> b pour build_Deck et utilisation des fonction empty_stack et empty_Clist --- src/faction.c | 6 +++--- src/plateau.c | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/faction.c b/src/faction.c index c0b94ff..fee5b89 100644 --- a/src/faction.c +++ b/src/faction.c @@ -129,8 +129,8 @@ faction create_faction(){ faction new_faction = malloc(sizeof(struct faction)); new_faction->ptsDDRS = 0; new_faction->nbRoundWon = 0; - new_faction->hand = malloc(sizeof(CList)); - new_faction->deck = malloc(sizeof(Stack)); + new_faction->hand = empty_CList(); + new_faction->deck = empty_stack(); new_faction->hasMulligan = false; return new_faction; } @@ -188,7 +188,7 @@ bool hand_is_empty(faction fac) } -void Build_Deck(faction fac, unsigned int nbfac) +void build_Deck(faction fac, unsigned int nbfac) { int i; for ( i = 0; i < CardTypeCount; i +=1 ) diff --git a/src/plateau.c b/src/plateau.c index 0f0769f..2ae4a7f 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -108,6 +108,8 @@ board create_new_board() new_board->factions[0] = create_faction(); new_board->factions[1] = create_faction(); + build_Deck(new_board->factions[0]); + build_Deck(new_board->factions[1]); return new_board; } -- GitLab From b61582d3643f94a04d7f3f196cdb1fa883a28925 Mon Sep 17 00:00:00 2001 From: Martin Fond <martin.fond@ensiie.fr> Date: Sat, 30 Apr 2022 17:57:46 +0200 Subject: [PATCH 114/163] B.6 Modification de build_card --- src/carte.c | 12 ++++++++---- src/plateau.c | 4 ++-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/carte.c b/src/carte.c index 2f905bd..d3a24c6 100644 --- a/src/carte.c +++ b/src/carte.c @@ -114,11 +114,15 @@ const char* cardType_toString(CardType type){ */ card build_card(CardType mtype, unsigned int mnbOccurences, char* meffDesc, unsigned int mfactionOwner) { - card new_card = malloc(sizeof(card)); - new_card->type = mtype; - new_card->nbOccurences = mnbOccurences; + if (!(card new_card = malloc(sizeof(card)))) + { + printf("Unable to create card (malloc)"); + return NULL; + } + set_card_type(new_card, mtype); + set_card_nbOccurences(new_card, mnbOccurences); strncpy(new_card->effectDesc, meffDesc, MAX_LEN); - new_card->factionOwner = mfactionOwner; + set_card_factionOwner(new_card, mfactionOwner); return new_card; }; diff --git a/src/plateau.c b/src/plateau.c index 2ae4a7f..98bfb12 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -108,8 +108,8 @@ board create_new_board() new_board->factions[0] = create_faction(); new_board->factions[1] = create_faction(); - build_Deck(new_board->factions[0]); - build_Deck(new_board->factions[1]); + build_Deck(new_board->factions[0], 0); + build_Deck(new_board->factions[1], 1); return new_board; } -- GitLab From 1f40b03c54b2cb3f3064835c19065083eaddc29b Mon Sep 17 00:00:00 2001 From: Lucas Desrumeaux <lucas@carjager.com> Date: Sat, 30 Apr 2022 20:00:05 +0200 Subject: [PATCH 115/163] [B.2] Test pour l'initialisation des factions et du plateau --- headers/structure.h | 1 + src/faction.c | 2 +- test/example | Bin 17136 -> 0 bytes test/src/exempleCunitAutomatedInterface.c | 67 +++++++++++ .../exempleCunitBasicInterface.c} | 0 test/src/mainTest.c | 111 ++++++++++++++++++ 6 files changed, 180 insertions(+), 1 deletion(-) delete mode 100755 test/example create mode 100644 test/src/exempleCunitAutomatedInterface.c rename test/{example.c => src/exempleCunitBasicInterface.c} (100%) create mode 100644 test/src/mainTest.c diff --git a/headers/structure.h b/headers/structure.h index 7e4f678..8d546cc 100644 --- a/headers/structure.h +++ b/headers/structure.h @@ -12,6 +12,7 @@ #define BOARD_SIZE (2 * 16 - 1) /*obliger de hardcoder le 16, sinon probleme d'ordre de la compilation*/ #include "carte.h" + typedef struct card* card; /*pratique*/ typedef enum bool diff --git a/src/faction.c b/src/faction.c index c0b94ff..30ec76e 100644 --- a/src/faction.c +++ b/src/faction.c @@ -188,7 +188,7 @@ bool hand_is_empty(faction fac) } -void Build_Deck(faction fac, unsigned int nbfac) +void build_Deck(faction fac, unsigned int nbfac) { int i; for ( i = 0; i < CardTypeCount; i +=1 ) diff --git a/test/example b/test/example deleted file mode 100755 index efa37f40bc32e81e3e039147b109d8a64e7155f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17136 zcmeHOeQX@X6`%9v!-3>{Au%|Hl5I*PhsYN@bzGCk<<6h$)(JGR3sn=Avu|Uc@ZC9g zd&Q<eT^Ud;Ff~XmL2acFDFRebQ&p9Ke&96aqvAtJMXOL$HKj$IOA5i1)&-L5d$aHD z?e5(HMOD>5cBH#E@Ap1t=FQID&h5N!boO>t_<VwkUwmF57hY*1VG=ZKqY99)Xb~&m zd#$)sECGIz#7ueEBp@}*$qFZ}B-{@a?P{=6f?i_6f+_b9DcY4Q!_)v%5i~W?ZZTGg zchkev52h@)+EdUNiXy))dIlAsFtyuZY)0#)Sd6wh=|PIi5u$8|EZR+w-2~Y&6|7H` z<B2iBPYaF1O%;$~QRKG}Zo6yA&P_W=pDDJ1W!Gy)?31*2HQCiE(v5J_-6kxUa(iC_ zJB-W6Ej-OTsl9UZFhg-<O4BJejl>6<n>LNa>PO<q>{$I+OLKj5Qz(-PZI)fYeqkGU zO?B_+$7z{GjKV1AVm0w7|7GP%-}(LaRX^MO)_dK9YoB{={qfy#_JM7p4i>cMDQ12J zR8R-Uzd!r{Rx1(XF}8L7_Vg2fzW3%6`iqH|_g%|N1~iJx!vI}S42!-pcopDE3H=w# z=-*HV|7jWgwletpW$=xFEAVlbdjKdkuCX%sR=^ebxXTKNZcwZd!LU=JNW4}kF8nm8 zt#hhMZZ+w<{Rp_O2D8byftOOF(0cl|YcV~o55+Tvp6=V;K9Wl6ebIptU1-`+B9+uK zMl@|`nyFe+vAti5gU5JuBz}{wnJVdV0dO=H(=yq(p)+IX83XG>x}oXmbSf<cnT(z` zdJ>}}dO}YcQ6rv8B0dn!#0Rwus3uY|>B2<P*`$V!GN?2-qDPb2(L%F0Kpb2%3}A39 zs_l&@WygR;5sfDijVFbs$D&3Q1Ou6ji3603iSFK>wsviEXme;wacB#x!zX;ORv^$& zu>LAgUK82c_%d8c>rJtB|K<ChLKn*z-Cr3$MZbHMVf0$KPcnb<N)yMm$ZH*uQ#PD^ zA)d40&>^dwvEj=tREPx|j%$z00m7F8KtqzEgEqVn86h6B;dr0na>Rzq-$N2SX2b3G z*;yNoZF70nhM&hE(Bn4zd>igny$E;_@FL(vz>9zvf&ZTfyi;}Qd+OxrO7+ggFK-e; zy?xfG$RAfHe^q%*b~3+Z0O0xj`avL7YX#~Lqhx;WPx*X)M)LSTGCz01;_*Rbe(tEn z<Ac)t+>b0CA4uls9<X?P5SgF5$Kvq;WPa|O7LN}e^K<){hu*Zx-gF4rAK+gIVebn3 zQ!f7JF8(Jj{!tfy*u{U}#edt*H~y_>>cn;G)T`>`U(Q_J*E_wq86u!guXqvyqfWQt zULaqc29v+f0DC`F)ak|dBDrG0sD{w*z&eC}S^iYj+6fq~I7Sro<5GXi0Fn*o)TuM- z(KoMDk1qIC-_z=ebH-|Lu$~-L=1=XFabSC#pNUo!i|odJb+WYrtLoHi#&Y$})+NB? z9zK`P=VB1trx%}ve;s^#z}9LX?dNU;Ay)dq?lJ7$o?~U$$m1x62s{KEREWSKNvaP6 z`Go=!jEKlR2rbSOe8BY=RG;Zw0FlUT0~thOX)X<wH?rz<HC`9$^p>wn(z+X5<(fgJ zPIWG*lea90?DE`&z~>@p(4pQ5@O1SJrcn#FKlMzm6Af;k1=Tmsf-362vF1s<PIFHn z@GgEG$FKL{>(|F1h__*P<n<M~rgyrv{c<59U+$UuU8KKf>fK0RWa@){b-KO@;9b2N z&f*%%{qO^5<>*<zv9|FQn!nzu`QE8FJEmTb<X8Vuojm4KulPguueiRxx+k(bvL|v~ zL_4;3Z^+&rt~`vdT$k2Ll-=>Zya;#^@FL(vz>9zv0WShx1iT1%5%41Li6ek-P=r1f z#g{*!LD497;p?KlbXFJmibqN9RSaZ&7yGy2J6Zg%f8j0Iz5(5TCZEUc-~ph=f!4g8 z&*S?x-#qN2fChn9!iH}x&^n-fKvkd%K!<@2zmv}&0g46Rm16PTv{U%Tg1(EFFRh#b z8RGat6Wf42zYrZu<tv`cpxOkV>!~jy5bO%ne4*<68!IQom9<+h|LkS!P#x{D-_L>` zzZ+uQfXXc369`bjw(f$@N*GHOVx58D9Tn{>mUKaffJONuh<}Luc@Vz^{gp4T*nXs7 ze;VYA!2Y}FhvgObN(J}}LoA1J?+3Y#@~%MeTNOQln!Ej-0cCnoXQ1w`#T|i$JC>+{ zmdT~vfp9X=5(zX!0(ETxr7cj?76`TlD&>2yKJaq{{Mg^~pi8fK5%415MZk-I7XdE< zUIe@dcoFa-@V|)wpF87oX0-jW&U7*VDs^W$cZ)VJ@IFhH1FKBBhIl?-d@=ES2CbHO zKIew}7c4A)_gp@O{6RX*#(RZPs_<E`lO*S}UX9dIKI2t`PM}nq#QG*PF+u0T@Rb{u zS@~Vq_wm`XiwJ*+0LF9F5$-qJ^O-ts|5CDNz4!Cx_@KKIf){^syw8$9cugpIjyr7I zB!7tH|015pLGJ%+#5&jQ^4LK09VU7;(d&th5}hDAL-Zg~m%EQ-E5oKrcYFI*rLKP< zn>4b@6``h3Lw#dba*elcZU{9rg&H@Q_(!^g^N~L5e7{}W5C1vv`E)1l7kvKQi7yg2 zmzV%QoWADk)~UZl@b&7%mkPeFop`0-`F7&V1Yajk{5-+eqZ2=0@OA6NVHKB{7e8cC zC?)ZLI8qX?60;@opp~!TY<H#L`-BsR!>@`RG3$P@$~up4m-^vfl>H_3tF3djPW=l7 z-*24wMWWR8?iV%I{lTdZcek(|G3$O&TXa4fC4Rwozk&^}>qYQqO#v}$cweo6Ng1W{ zzAO(Ae$a(~nsB~vv;OCx;<NRK?;~9jFOEZk{P6Dp`x%$|#qm4<c&Yv$lKQoxCJYrQ ze7`F<-bX;k2lIFu2jVKF{68Ues*C3FIlz6QcphIOef}NdCSI47;_K=?>8E(!x4;iX zg(zMxK^WKtFkdtDyT`v%ip06K0^M8&?*UvXs9CiaC0=~J>1F(km%;BSgWnH$sl0+( z)UPOBrw7aUd9)1vJo$I8mzSk}P;8*{?o~A69N?wm@K334g~h5=!Mv=jSR?p%f(4f# z4l~2f7Li~h;5c6j&6iI2Ho{w6{dpSXL0Cshm=uZpM)s$0f7?X(7o{JkE^^lZj(&n+ zr)-egy_wpT|Gk3BFyY;VbHc$sz;V28Keqs`I9*HbKET(Nz{OzN$QW5T;WH=-c^;aP zfW!&N^vFQ+LoB5Yjid&mBU;Qzr88PIJ0=EG_=miq$3iU)&5$NiN(nP7;#xGFj*dgt zgaH{Jd(+W`uEny6#5kDPIGG>fP%ZrBZ|I3pa3vE?x^_mkcWRwGIxyeFX%rJ$$5(bl zw)eC<B{Dq)AV^@+I#tc|pmyvOT6gbNZINE>s;;hGoqbwgq^-9Ty~-qz!Aw?mzjT^O zsce=H%akdVh60!)`^BBQLb)fPR>*}Z%1{Z1?Wrg*3y`iti7MDfGq*;*EO904VC$u_ zYQRM%r42`uF^qT5Rp2ZZPionW4)HC72AvC;Sz~L0MkG^s>?t!cl?GAj2qY2l6k>K! z$&?{yYL0W5B9s|V7|{WsM%tvqT#F|mOKDVuk|{$E4JEUo(R6AQl844^&_Fg0X>;)y zL6NqedLud{r223)Gb}=}@gy{1QX_3jzNV)$n0F-Ah|xfn)<>dfK()~kLxf~_LQoA2 zrGUjsMjsR*LmvYcmj!62WNuMNAEt#c90PC6nLf-FVOnq<nu;dk;LJ3K%p?(l)rg5v zrIz=9is2Iq+|uAT&MY<bT+5XAXC#)oTu1sD_~4$1?OVv6sRA;4;pYOznxSI1zn1Ko z;(IlF;rlsbJy5aR^K&^<g%ydq?XLm+AF!w5{`2!Y(<ZW`?U(gj!)~Kc!96G2pQQdX zJ%GW5f_=m)kDvF4alp`o?Rh`Il=rouA`7`=R_ucs?ityh_YF+fktX+_^_boYa@>P5 z&-)9e3fa5+Pq3JV3dWS}c^|@bmK3>t_xSH4`!>?!{R&gNJ;uy!{{UbZ6ZQ{3wq_yf zegb#T|My(>3fVE8A$Lq%?!|*Hd)_B8W&LvYM_l%^WWaQS4T-WprjNVq!?aIe+Rqc? zvS+tXy6ky>#+3ixVSRV}o+5jz8HF^7))C9ZZT|uYaQ@i7PBAr^?lxKL+im{}NbL6e z6;qWdzSp-GzJ3^c4Jx?DqGfCCA2~nUt<OBux4{;lVcDMdnPc?;LSa3VEAWh;1p!{W zY|r~q&bQ~l;QGVDc0B(-01Ss{+0*}86ZBv@0Wy1Gd!|dk*lsVvq}^arZijua9rJiL z05NW#pHG7y(|#qjPwMPeu>D30F)P?tEOyG*jwvy}!{kt*z<ml}3<>w2@4w3c<G!1g h=J)luk%sbPmve5{l;U2awEe2BrUve(?8U{3e*=&R+TZ{H diff --git a/test/src/exempleCunitAutomatedInterface.c b/test/src/exempleCunitAutomatedInterface.c new file mode 100644 index 0000000..ec029f1 --- /dev/null +++ b/test/src/exempleCunitAutomatedInterface.c @@ -0,0 +1,67 @@ +#include <stdio.h> +#include <string.h> +#include <CUnit/CUnit.h> +#include "CUnit/Automated.h" +//#include "../headers/structure.h" + +/* Pointer to the file used by the tests. */ +static FILE* temp_file = NULL; + +/* The suite initialization function. + * Opens the temporary file used by the tests. + * Returns zero on success, non-zero otherwise. + */ +int init_suiteTrue(void) +{ + return 0; +} + +/* The suite cleanup function. + * Closes the temporary file used by the tests. + * Returns zero on success, non-zero otherwise. + */ +int clean_suiteTrue(void){ + return 0; +} + +/* Simple test of fprintf(). + * Writes test data to the temporary file and checks + * whether the expected number of bytes were written. + */ +void testTrue(void){ + CU_ASSERT(1); +} + +/* The main() function for setting up and running the tests. + * Returns a CUE_SUCCESS on successful running, another + * CUnit error code on failure. + */ +int main() +{ + CU_pSuite pSuite = NULL; + + /* initialize the CUnit test registry */ + if (CUE_SUCCESS != CU_initialize_registry()) + return CU_get_error(); + + /* add a suite to the registry */ + pSuite = CU_add_suite("SuiteTrue", init_suiteTrue, clean_suiteTrue); + if (NULL == pSuite) { + CU_cleanup_registry(); + return CU_get_error(); + } + + /* add the tests to the suite */ + /* NOTE - ORDER IS IMPORTANT - MUST TEST fread() AFTER fprintf() */ + if (NULL == CU_add_test(pSuite, "test of true", testTrue)) { + CU_cleanup_registry(); + return CU_get_error(); + } + + /* Run all tests using the CUnit Basic interface */ + CU_set_output_filename("exempleCunitAutomatedInterface"); + CU_list_tests_to_file(); + CU_automated_run_tests(); + CU_cleanup_registry(); + return CU_get_error(); +} diff --git a/test/example.c b/test/src/exempleCunitBasicInterface.c similarity index 100% rename from test/example.c rename to test/src/exempleCunitBasicInterface.c diff --git a/test/src/mainTest.c b/test/src/mainTest.c new file mode 100644 index 0000000..315dc82 --- /dev/null +++ b/test/src/mainTest.c @@ -0,0 +1,111 @@ +#include <stdio.h> +#include <string.h> +#include <CUnit/CUnit.h> +#include "CUnit/Basic.h" +#include "../../headers/structure.h" +#include "../../headers/faction.h" +#include "../../headers/plateau.h" + +/* Pour compiler seulement les tests */ +/* gcc -o test/exe/mainTest test/src/mainTest.c src/faction.c src/structure.c src/carte.c src/plateau.c src/OurRandom.c -lcunit */ + +static faction fac = NULL; +static board brd = NULL; + +/* The suite initialization function. + * Opens the temporary file used by the tests. + * Returns zero on success, non-zero otherwise. + */ +int init_suiteInitialisation(void) +{ + if (NULL != (fac = create_faction()) && NULL != (brd = create_new_board())){ + return 0; + }else{ + return 1; + } +} + +/* The suite cleanup function. + * Closes the temporary file used by the tests. + * Returns zero on success, non-zero otherwise. + */ +int clean_suiteInitialisation(void){ + delete_faction(fac); + free_board(brd); + return 0; +} + +/** + * \brief Test simple de l'initialisation d'une faction à sa création + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-04-30 + */ +void test_InitialisationFaction(void){ + CU_ASSERT(0 == get_faction_ptsDDRS(fac)); + CU_ASSERT(0 == get_faction_nbRoundWon(fac)); + CU_ASSERT(NULL == get_faction_hand(fac)); + CU_ASSERT(is_stack_empty(get_faction_deck(fac))); + CU_ASSERT(false == get_faction_hasMulligan(fac)); +} + +/** + * \brief Test simple de l'initialisation du plateau à sa création + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-04-30 + */ +void test_InitialisationPlateau(void){ + + /* On verifie que toute les cases du tableau sont bien vides*/ + for (int i=0; i < BOARD_SIZE * BOARD_SIZE; i++){ + CU_ASSERT(get_board_cell(brd, i).cellCard == NULL); + CU_ASSERT(get_board_cell(brd, i).state == Empty); + } + + /* On vérifie l'initialisation des factions dans le plateau */ + // première faction + CU_ASSERT(0 == get_faction_ptsDDRS(get_board_factions(brd)[0])); + CU_ASSERT(0 == get_faction_nbRoundWon(get_board_factions(brd)[0])); + CU_ASSERT(NULL == get_faction_hand(get_board_factions(brd)[0])); + CU_ASSERT(NULL == get_faction_deck(get_board_factions(brd)[0])); + CU_ASSERT(false == get_faction_hasMulligan(get_board_factions(brd)[0])); + // première faction + CU_ASSERT(0 == get_faction_ptsDDRS(get_board_factions(brd)[1])); + CU_ASSERT(0 == get_faction_nbRoundWon(get_board_factions(brd)[1])); + CU_ASSERT(NULL == get_faction_hand(get_board_factions(brd)[1])); + CU_ASSERT(NULL == get_faction_deck(get_board_factions(brd)[1])); + CU_ASSERT(false == get_faction_hasMulligan(get_board_factions(brd)[1])); +} + +/* The main() function for setting up and running the tests. + * Returns a CUE_SUCCESS on successful running, another + * CUnit error code on failure. + */ +int main() +{ + CU_pSuite psuiteInitialisation = NULL; + + /* initialize the CUnit test registry */ + if (CUE_SUCCESS != CU_initialize_registry()) + return CU_get_error(); + + /* add a suite to the registry */ + psuiteInitialisation = CU_add_suite("suiteInitialisation", init_suiteInitialisation, clean_suiteInitialisation); + if (NULL == psuiteInitialisation) { + CU_cleanup_registry(); + return CU_get_error(); + } + + /* add the tests to the suite */ + /* NOTE - ORDER IS IMPORTANT - MUST TEST fread() AFTER fprintf() */ + if ((NULL == CU_add_test(psuiteInitialisation, "test of faction initialisation after creation", test_InitialisationFaction)) || + (NULL == CU_add_test(psuiteInitialisation, "test of board initialisation after creation", test_InitialisationPlateau))) { + CU_cleanup_registry(); + return CU_get_error(); + } + + /* Run all tests using the CUnit Basic interface */ + CU_basic_set_mode(CU_BRM_VERBOSE); + CU_basic_run_tests(); + CU_cleanup_registry(); + return CU_get_error(); +} -- GitLab From 4411b48a5ea113794b91643667b260e69815b773 Mon Sep 17 00:00:00 2001 From: Martin Fond <martin.fond@ensiie.fr> Date: Sat, 30 Apr 2022 20:22:39 +0200 Subject: [PATCH 116/163] B.7 Correction de build_card --- src/carte.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/carte.c b/src/carte.c index d3a24c6..13e88ef 100644 --- a/src/carte.c +++ b/src/carte.c @@ -114,9 +114,10 @@ const char* cardType_toString(CardType type){ */ card build_card(CardType mtype, unsigned int mnbOccurences, char* meffDesc, unsigned int mfactionOwner) { - if (!(card new_card = malloc(sizeof(card)))) + (card new_card = malloc(sizeof(struct card))) + if (new_card == NULL) { - printf("Unable to create card (malloc)"); + printf("Création de carte impossible (malloc)"); return NULL; } set_card_type(new_card, mtype); -- GitLab From 6d57e0a74f6544679ddfef906f9a75e7ea90a67d Mon Sep 17 00:00:00 2001 From: Martin Fond <martin.fond@ensiie.fr> Date: Sat, 30 Apr 2022 20:27:37 +0200 Subject: [PATCH 117/163] B.7 Correction build_card --- src/carte.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/carte.c b/src/carte.c index 13e88ef..e66ff46 100644 --- a/src/carte.c +++ b/src/carte.c @@ -114,7 +114,7 @@ const char* cardType_toString(CardType type){ */ card build_card(CardType mtype, unsigned int mnbOccurences, char* meffDesc, unsigned int mfactionOwner) { - (card new_card = malloc(sizeof(struct card))) + card new_card = malloc(sizeof(struct card)); if (new_card == NULL) { printf("Création de carte impossible (malloc)"); -- GitLab From 89c722eb14488b85f249cd405dd1dd51294d12ad Mon Sep 17 00:00:00 2001 From: Martin Fond <martin.fond@ensiie.fr> Date: Sat, 30 Apr 2022 20:29:53 +0200 Subject: [PATCH 118/163] B.7 ajout de stdio.h --- src/carte.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/carte.c b/src/carte.c index e66ff46..41c6e9b 100644 --- a/src/carte.c +++ b/src/carte.c @@ -8,6 +8,8 @@ * @copyright Copyright (c) 2022 * */ + +#include <stdio.h> #include <stdlib.h> #include <string.h> #include "../headers/carte.h" -- GitLab From ddf92514a9a8072df13915ac06d33b1caf443ac5 Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Sun, 1 May 2022 00:25:47 +0200 Subject: [PATCH 119/163] Tache B.1 : modification du makefile dans la branche de tests afin de simplifier les compilations pour les tests --- Makefile | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index c71d347..f51fbb2 100644 --- a/Makefile +++ b/Makefile @@ -1,30 +1,48 @@ # Déclaration de constantes + # Par rapport au compilateur gcc + CC = gcc CFLAGS = -Wall -Wextra -std=c99 - # Cible de toutes les compilations, fichier où se trouve la fonction main() -TARGET = ./bin/testmain + # Cibles de toutes les compilations : un fichier exécutable main de l'ensemble du projet, et un autre avec l'ensemble des tests du projet + + +TARGET = ./bin/main +TARGET2 = ./bin/mainTest + + + # Ensembles des fichiers objets qui vont être générés - # Ensemble des fichiers objets qui vont être générés OBJS = ./obj/main.o ./obj/OurRandom.o ./obj/structure.o ./obj/carte.o ./obj/faction.o ./obj/plateau.o ./obj/interface.o -OBJSTEST = ./obj/OurRandom.o ./obj/structure.o ./obj/carte.o ./obj/faction.o ./obj/plateau.o ./obj/interface.o +OBJSTEST = ./obj/mainTest.o ./obj/OurRandom.o ./obj/structure.o ./obj/carte.o ./obj/faction.o ./obj/plateau.o ./obj/interface.o + + +# Commande permettant de créer en priorité la cible TARGET -# Commande permettant de réaliser toutes les compilations nécessaires en même temps pour la cible all : $(TARGET) -# Création d'un fichier objet associé à la cible + +# Création du fichier exécutable TARGET + $(TARGET) : $(OBJS) $(CC) $(CFLAGS) -o $@ $(OBJS) +# Création du fichier exécutable TARGET2 + + +$(TARGET2) : $(OBJSTEST) + $(CC) $(CFLAGS) -o $@ $(OBJSTEST) + + # Création des fichiers objets en fonction des dépendances, pour chaque source @@ -32,6 +50,9 @@ $(TARGET) : $(OBJS) $(CC) $(CFLAGS) -c -o $@ $< +./obj/mainTest.o : ./test/src/mainTest.c ./headers/carte.h ./headers/faction.h ./headers/plateau.h ./headers/interface.h ./headers/OurRandom.h + $(CC) $(CFLAGS) -c -o $@ $< + ./obj/OurRandom.o : ./src/OurRandom.c ./headers/OurRandom.h $(CC) $(CFLAGS) -c -o $@ $< -- GitLab From 502a36b4d29adf110ed65eb12b775d5eabdcde8c Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Sun, 1 May 2022 00:31:20 +0200 Subject: [PATCH 120/163] Tache B.1 : ajout d'une commande test --- Makefile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index f51fbb2..abef118 100644 --- a/Makefile +++ b/Makefile @@ -23,11 +23,13 @@ OBJS = ./obj/main.o ./obj/OurRandom.o ./obj/structure.o ./obj/carte.o ./obj/fact OBJSTEST = ./obj/mainTest.o ./obj/OurRandom.o ./obj/structure.o ./obj/carte.o ./obj/faction.o ./obj/plateau.o ./obj/interface.o -# Commande permettant de créer en priorité la cible TARGET +# Deux commandes dont la première permet de créer la cible TARGET, et la deuxième permet de créer la cible TARGET2 all : $(TARGET) +test : $(TARGET2) + # Création du fichier exécutable TARGET -- GitLab From c77e6b8156988cce477485d3eebff2bcf7e9d8cf Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Sun, 1 May 2022 00:43:09 +0200 Subject: [PATCH 121/163] Tache B.1 : modification de commentaires --- Makefile | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index c71d347..0547beb 100644 --- a/Makefile +++ b/Makefile @@ -1,25 +1,33 @@ # Déclaration de constantes + # Par rapport au compilateur gcc + CC = gcc CFLAGS = -Wall -Wextra -std=c99 - # Cible de toutes les compilations, fichier où se trouve la fonction main() -TARGET = ./bin/testmain + # Cible de toutes les compilations : fichier exécutable main de l'ensemble du projet + + +TARGET = ./bin/main + + + # Ensemble des fichiers objets qui vont être générés et qui seront utiles pour l'ensemble du projet - # Ensemble des fichiers objets qui vont être générés OBJS = ./obj/main.o ./obj/OurRandom.o ./obj/structure.o ./obj/carte.o ./obj/faction.o ./obj/plateau.o ./obj/interface.o -OBJSTEST = ./obj/OurRandom.o ./obj/structure.o ./obj/carte.o ./obj/faction.o ./obj/plateau.o ./obj/interface.o -# Commande permettant de réaliser toutes les compilations nécessaires en même temps pour la cible +# Commande permettant de créer la cible TARGET + all : $(TARGET) -# Création d'un fichier objet associé à la cible + +# Création du fichier exécutable TARGET + $(TARGET) : $(OBJS) $(CC) $(CFLAGS) -o $@ $(OBJS) -- GitLab From 49dd460397a8d08cfd164cdb9a670129deed7b48 Mon Sep 17 00:00:00 2001 From: Lucas Desrumeaux <lucas@carjager.com> Date: Sun, 1 May 2022 00:45:47 +0200 Subject: [PATCH 122/163] =?UTF-8?q?[B.2]=20Test=20pour=20l'initialisation?= =?UTF-8?q?=20plateau,=20probl=C3=A8me=20de=20free=5Fboard?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/src/mainTest.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/src/mainTest.c b/test/src/mainTest.c index 315dc82..4a7803c 100644 --- a/test/src/mainTest.c +++ b/test/src/mainTest.c @@ -31,7 +31,7 @@ int init_suiteInitialisation(void) */ int clean_suiteInitialisation(void){ delete_faction(fac); - free_board(brd); + //free_board(brd); // le free pose problème, il provoque un segment fault return 0; } @@ -66,13 +66,13 @@ void test_InitialisationPlateau(void){ CU_ASSERT(0 == get_faction_ptsDDRS(get_board_factions(brd)[0])); CU_ASSERT(0 == get_faction_nbRoundWon(get_board_factions(brd)[0])); CU_ASSERT(NULL == get_faction_hand(get_board_factions(brd)[0])); - CU_ASSERT(NULL == get_faction_deck(get_board_factions(brd)[0])); + CU_ASSERT(is_stack_empty(get_faction_deck(get_board_factions(brd)[0]))); CU_ASSERT(false == get_faction_hasMulligan(get_board_factions(brd)[0])); // première faction CU_ASSERT(0 == get_faction_ptsDDRS(get_board_factions(brd)[1])); CU_ASSERT(0 == get_faction_nbRoundWon(get_board_factions(brd)[1])); CU_ASSERT(NULL == get_faction_hand(get_board_factions(brd)[1])); - CU_ASSERT(NULL == get_faction_deck(get_board_factions(brd)[1])); + CU_ASSERT(is_stack_empty(get_faction_deck(get_board_factions(brd)[1]))); CU_ASSERT(false == get_faction_hasMulligan(get_board_factions(brd)[1])); } -- GitLab From 46cd85070567b95eb7783ff3f98661303b0dfeeb Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Sun, 1 May 2022 00:49:54 +0200 Subject: [PATCH 123/163] Tache B.1 : modification de commentaires --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 0547beb..d2b33ad 100644 --- a/Makefile +++ b/Makefile @@ -33,7 +33,7 @@ $(TARGET) : $(OBJS) $(CC) $(CFLAGS) -o $@ $(OBJS) -# Création des fichiers objets en fonction des dépendances, pour chaque source +# Pour chaque ficher source, chaque module : Création du fichier objet correspondant en fonction des dépendances ./obj/main.o : ./src/main.c ./headers/carte.h ./headers/faction.h ./headers/plateau.h ./headers/interface.h ./headers/OurRandom.h -- GitLab From 0d6870aaeae79bb8e07aa164053bfa2dba3d48c3 Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Sun, 1 May 2022 01:03:45 +0200 Subject: [PATCH 124/163] Tache B.1 : modification de commentaires et ajout de l'option -lcunit pour une commande --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index abef118..7eeeb01 100644 --- a/Makefile +++ b/Makefile @@ -42,10 +42,10 @@ $(TARGET) : $(OBJS) $(TARGET2) : $(OBJSTEST) - $(CC) $(CFLAGS) -o $@ $(OBJSTEST) + $(CC) $(CFLAGS) -o $@ $(OBJSTEST) -lcunit -# Création des fichiers objets en fonction des dépendances, pour chaque source +# Pour chaque fichier source, chaque module : Création des fichiers objets en fonction des dépendances ./obj/main.o : ./src/main.c ./headers/carte.h ./headers/faction.h ./headers/plateau.h ./headers/interface.h ./headers/OurRandom.h -- GitLab From a81955652d90c0a04bea3f1028bc77f6d3f3b442 Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Sun, 1 May 2022 01:07:16 +0200 Subject: [PATCH 125/163] =?UTF-8?q?Tache=20B.1=20:=20dans=20le=20makefile,?= =?UTF-8?q?=20correction=20de=20fautes=20de=20fran=C3=A7ais?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 7eeeb01..cfed128 100644 --- a/Makefile +++ b/Makefile @@ -45,7 +45,7 @@ $(TARGET2) : $(OBJSTEST) $(CC) $(CFLAGS) -o $@ $(OBJSTEST) -lcunit -# Pour chaque fichier source, chaque module : Création des fichiers objets en fonction des dépendances +# Pour chaque fichier source, chaque module : Création du fichier objet correspondant en fonction des dépendances ./obj/main.o : ./src/main.c ./headers/carte.h ./headers/faction.h ./headers/plateau.h ./headers/interface.h ./headers/OurRandom.h -- GitLab From 53c33648e63bfe1a203084511d15a8df1079959d Mon Sep 17 00:00:00 2001 From: Lucas Desrumeaux <lucas@carjager.com> Date: Sun, 1 May 2022 01:11:37 +0200 Subject: [PATCH 126/163] =?UTF-8?q?[B.2]=20Test=20pour=20l'ordre=20des=20f?= =?UTF-8?q?action=20et=20README=20compl=C3=A9ter=20pour=20les=20test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 16 +++++++++++++++- test/src/mainTest.c | 41 ++++++++++++++++++++++++++++++++++++++++- 2 files changed, 55 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a44b0d7..9a64267 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,17 @@ # Le projet de qualité supérieure -Le projet qui est tout simplement supérieure en qualité. Jeu de cartes en C. \ No newline at end of file +Le projet qui est tout simplement supérieure en qualité. Jeu de cartes en C. + +# Fonctionnement des tests + +## Installation de CUnit + +Nous installons ici uniquement le nécessaire pour la BasicInterface de CUnit + +Sur linux : + sudo apt-get install libcunit1 libcunit1-doc libcunit1-dev + +## Lancer les test + +Entrez dans en ligne de commande dans le projet : + make test diff --git a/test/src/mainTest.c b/test/src/mainTest.c index 4a7803c..55cfba5 100644 --- a/test/src/mainTest.c +++ b/test/src/mainTest.c @@ -76,6 +76,39 @@ void test_InitialisationPlateau(void){ CU_ASSERT(false == get_faction_hasMulligan(get_board_factions(brd)[1])); } +/* The suite initialization function. + * Opens the temporary file used by the tests. + * Returns zero on success, non-zero otherwise. + */ +int init_suiteOrder(void) +{ + return 0; +} + +void test_OrderByRound(void){ + /* Testing how it works in teh main */ + unsigned int lehmerSeed = clock(); + + faction fFirst_faction = 0; + faction fSecond_faction = 0; + + /*check si on est au tour 1 ou au tour 3*/ + if((++fRound) % 2 == 1) /*je sais c'est complique pour rien, mais c'est drole hehe et puis les modulos c'est la vie*/ + { + /*choisis de maniere aleatoire une faction qui commence la premiere phase*/ + int first = Lehmer32(&lehmerSeed) % 2; + fFirst_faction = fFactions[first]; + fSecond_faction = fFactions[1 - first]; + } + else /*echange les deux factions de place 1ere = 2eme et 2eme = 1ere*/ + { + faction buff = fFirst_faction; + fFirst_faction = fSecond_faction; + fSecond_faction = buff; + } + +} + /* The main() function for setting up and running the tests. * Returns a CUE_SUCCESS on successful running, another * CUnit error code on failure. @@ -83,6 +116,7 @@ void test_InitialisationPlateau(void){ int main() { CU_pSuite psuiteInitialisation = NULL; + CU_pSuite psuiteOrder = NULL; /* initialize the CUnit test registry */ if (CUE_SUCCESS != CU_initialize_registry()) @@ -95,8 +129,13 @@ int main() return CU_get_error(); } + psuiteOrder = CU_add_suite("suiteOrder", init_suiteOrder, NULL); + if (NULL == psuiteInitialisation) { + CU_cleanup_registry(); + return CU_get_error(); + } + /* add the tests to the suite */ - /* NOTE - ORDER IS IMPORTANT - MUST TEST fread() AFTER fprintf() */ if ((NULL == CU_add_test(psuiteInitialisation, "test of faction initialisation after creation", test_InitialisationFaction)) || (NULL == CU_add_test(psuiteInitialisation, "test of board initialisation after creation", test_InitialisationPlateau))) { CU_cleanup_registry(); -- GitLab From 624c8e56f0c67e597d1f34b08d706802778efbec Mon Sep 17 00:00:00 2001 From: aurelien coreau <aurelien.coreau@ensiie.fr> Date: Sun, 1 May 2022 01:12:25 +0200 Subject: [PATCH 127/163] =?UTF-8?q?Tache=20B.1=20:=20correction=20d'une=20?= =?UTF-8?q?faute=20de=20fran=C3=A7ais?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index d2b33ad..5ee5ade 100644 --- a/Makefile +++ b/Makefile @@ -33,7 +33,7 @@ $(TARGET) : $(OBJS) $(CC) $(CFLAGS) -o $@ $(OBJS) -# Pour chaque ficher source, chaque module : Création du fichier objet correspondant en fonction des dépendances +# Pour chaque fichier source, chaque module : Création du fichier objet correspondant en fonction des dépendances ./obj/main.o : ./src/main.c ./headers/carte.h ./headers/faction.h ./headers/plateau.h ./headers/interface.h ./headers/OurRandom.h -- GitLab From 6a8ac1197d92133073874d5fc9134d816c63caa1 Mon Sep 17 00:00:00 2001 From: alphoenix <felicien.fiscus@ensiie.fr> Date: Sun, 1 May 2022 01:37:48 +0200 Subject: [PATCH 128/163] =?UTF-8?q?[B.8]remplacement=20de=20l'appel=20?= =?UTF-8?q?=C3=A0=20display=5Ffaction=20en=20l'appel=20=C3=A0=20get=5Fboar?= =?UTF-8?q?d=5Ffactions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/interface.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/interface.c b/src/interface.c index 4d00f6b..1569482 100644 --- a/src/interface.c +++ b/src/interface.c @@ -136,7 +136,7 @@ int where_to_place_card(faction fac, card crd) void display_winner(board brd) { - faction* facs = display_faction(brd); + faction* facs = get_board_factions(brd); printf("And the winner is...\n"); bool result = get_faction_nbRoundWon(facs[0]) > get_faction_nbRoundWon(facs[1]); -- GitLab From c8d3622de4f3a91c5f82ce8ec23a219e8274b445 Mon Sep 17 00:00:00 2001 From: Lucas Desrumeaux <lucas@carjager.com> Date: Sun, 1 May 2022 02:05:38 +0200 Subject: [PATCH 129/163] =?UTF-8?q?[B.2]=20Test=20pour=20l'ordre=20des=20f?= =?UTF-8?q?action=20au=20premier=20et=20deuxi=C3=A8me=20round=20finis?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/src/mainTest.c | 90 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 75 insertions(+), 15 deletions(-) diff --git a/test/src/mainTest.c b/test/src/mainTest.c index 55cfba5..5141dd5 100644 --- a/test/src/mainTest.c +++ b/test/src/mainTest.c @@ -85,26 +85,80 @@ int init_suiteOrder(void) return 0; } +/** + * \brief On va tester nbEchantillon fois l'odre appliqué sur 2 round + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-05-01 + */ void test_OrderByRound(void){ /* Testing how it works in teh main */ unsigned int lehmerSeed = clock(); + /* Nombre d'essai effectués pour avoir un échantillon de valeur alétoire comme une simulation de nbEchantillon fois une partie de 2 round */ + int nbEchantillon = 10; + int fRound = 0; + /*init le plateau et le jeu */ + board board = create_new_board(); + faction* factions = get_board_factions(board); + faction first_faction = 0; + faction second_faction = 0; + faction checkFirstRound[nbEchantillon]; + faction checkSecondRound[nbEchantillon]; + //int checkRandom[nbEchantillon]; + + for (int i = 0; i < nbEchantillon; i++){ + fRound = 0; + for(int j = 0; j < 2; j++){ + /*check si on est au tour 1 ou au tour 3*/ + if((++fRound) % 2 == 1) /*je sais c'est complique pour rien, mais c'est drole hehe et puis les modulos c'est la vie*/ + { + /*choisis de maniere aleatoire une faction qui commence la premiere phase*/ + int first = Lehmer32(&lehmerSeed) % 2; + first_faction = factions[first]; + second_faction = factions[1 - first]; + checkFirstRound[i] = factions[first]; + //checkRandom[i] = first; + } + else /*echange les deux factions de place 1ere = 2eme et 2eme = 1ere*/ + { + faction buff = first_faction; + first_faction = second_faction; + second_faction = buff; + checkSecondRound[i] = first_faction; + } + } + } - faction fFirst_faction = 0; - faction fSecond_faction = 0; - - /*check si on est au tour 1 ou au tour 3*/ - if((++fRound) % 2 == 1) /*je sais c'est complique pour rien, mais c'est drole hehe et puis les modulos c'est la vie*/ - { - /*choisis de maniere aleatoire une faction qui commence la premiere phase*/ - int first = Lehmer32(&lehmerSeed) % 2; - fFirst_faction = fFactions[first]; - fSecond_faction = fFactions[1 - first]; + faction temoin = checkFirstRound[0]; + int nbIdentique = 0; + for (int i = 1; i < nbEchantillon; i++){ + if (checkFirstRound[i] == temoin){ + nbIdentique++; + //printf("checkFirstRound[%i] = %u <==> %u = temoin\n ",i, checkFirstRound[i], temoin); + } } - else /*echange les deux factions de place 1ere = 2eme et 2eme = 1ere*/ - { - faction buff = fFirst_faction; - fFirst_faction = fSecond_faction; - fSecond_faction = buff; + /*for (int i = 0; i < nbEchantillon; i++){ + printf("\n numéro[%i] = %i\n", i, checkRandom[i]); + }*/ + if (nbIdentique != nbEchantillon){ + CU_PASS("L'ordre de la première faction à jouer au 1er round est supposé aléatoire"); + }else { + CU_FAIL("L'ordre de la première faction à jouer au 1er round n'est pas supposé aléatoire"); + } + + bool identique = false; + for (int i = 1; i < nbEchantillon; i++){ + if (checkFirstRound[i] == checkSecondRound[i]){ + identique = true; + //printf("checkFirstRound[%i] = %u <==> %u = temoin\n ",i, checkFirstRound[i], temoin); + } + } + /*for (int i = 0; i < nbEchantillon; i++){ + printf("\n numéro[%i] = %i\n", i, checkRandom[i]); + }*/ + if (identique){ + CU_FAIL("L'ordre de la première faction à jouer au 2eme round n'est pas déterministe"); + }else { + CU_PASS("L'ordre de la première faction à jouer au 2eme round est déterministe"); } } @@ -142,6 +196,12 @@ int main() return CU_get_error(); } + /* add the tests to the suite */ + if ((NULL == CU_add_test(psuiteOrder, "test order during rounds of the game", test_OrderByRound))){ + CU_cleanup_registry(); + return CU_get_error(); + } + /* Run all tests using the CUnit Basic interface */ CU_basic_set_mode(CU_BRM_VERBOSE); CU_basic_run_tests(); -- GitLab From 8c96f907ce562fd1cd9ff69543cc99823b0c549e Mon Sep 17 00:00:00 2001 From: Martin Fond <martin.fond@ensiie.fr> Date: Sun, 1 May 2022 18:15:09 +0200 Subject: [PATCH 130/163] B.6 Ajout commentaitairesB.6 Ajout commentaitairesB.6 Ajout commentaitairesB.6 Ajout commentaitairesB.6 Ajout commentaitairesB.6 Ajout commentaitaires --- src/plateau.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/plateau.c b/src/plateau.c index 98bfb12..f3ab3f0 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -122,6 +122,8 @@ void free_board(board p) int new_round(board p) { + + /* Comparaison des points DDRS */ int ptsDDRS0 = get_faction_ptsDDRS(p->factions[0]); int ptsDDRS1 = get_faction_ptsDDRS(p->factions[1]); if ( ptsDDRS0 > ptsDDRS1) -- GitLab From 505f88ebf2d17b6e6d1c07f23edca084391a3927 Mon Sep 17 00:00:00 2001 From: Martin Fond <martin.fond@ensiie.fr> Date: Sun, 1 May 2022 22:36:53 +0200 Subject: [PATCH 131/163] B.6 Ajout de commentaires et modification de free_board et has_mulligan --- headers/faction.h | 2 +- src/carte.c | 5 ++--- src/faction.c | 34 +++++++++++++++++----------------- src/plateau.c | 17 ++++++++++++----- 4 files changed, 32 insertions(+), 26 deletions(-) diff --git a/headers/faction.h b/headers/faction.h index f2098ce..71a0efd 100644 --- a/headers/faction.h +++ b/headers/faction.h @@ -151,7 +151,7 @@ faction create_faction(); void delete_faction(faction); /** -*\brief Retourne vrai si la faction a relancee sa main et repiochee +*\brief Retourne vrai si la faction a une chance de relancer sa main et repiochee et faux si elle l'a deja fait *\fn bool has_mulligan(faction) *\param param1 faction dont on verifie l'utilisation de la repioche *\return un booleen indiquant si la faction a mulligan diff --git a/src/carte.c b/src/carte.c index 41c6e9b..a818e41 100644 --- a/src/carte.c +++ b/src/carte.c @@ -116,10 +116,10 @@ const char* cardType_toString(CardType type){ */ card build_card(CardType mtype, unsigned int mnbOccurences, char* meffDesc, unsigned int mfactionOwner) { - card new_card = malloc(sizeof(struct card)); + card new_card = malloc(sizeof(struct card)); /* Initialisation de la nouvelle carte */ if (new_card == NULL) { - printf("Création de carte impossible (malloc)"); + printf("Création de carte impossible (malloc)"); /* Message d'erreur et arret de la fonction si le malloc echoue */ return NULL; } set_card_type(new_card, mtype); @@ -129,4 +129,3 @@ card build_card(CardType mtype, unsigned int mnbOccurences, char* meffDesc, unsi return new_card; }; - diff --git a/src/faction.c b/src/faction.c index fee5b89..50b2ad9 100644 --- a/src/faction.c +++ b/src/faction.c @@ -126,23 +126,24 @@ void set_faction_hasMulligan(faction f, bool hasMull){ /*** Fonction Autres ***/ faction create_faction(){ + /* Initialisation de la nouvelle faction */ faction new_faction = malloc(sizeof(struct faction)); - new_faction->ptsDDRS = 0; + new_faction->ptsDDRS = 0; /* Les points et round gagnes commencent a 0 */ new_faction->nbRoundWon = 0; - new_faction->hand = empty_CList(); - new_faction->deck = empty_stack(); - new_faction->hasMulligan = false; + new_faction->hand = empty_CList(); /* Initialisation de la main sous la forme d'une CList vide */ + new_faction->deck = empty_stack(); /* Initialisation du deck sous la forme d'une stacke vide (il est remplie lors de la construction du plateau ) */ + new_faction->hasMulligan = true; /* On indique que la faction a encore une chance de relancer sa main */ return new_faction; } void delete_faction(faction fac_to_del){ - free_CList(&fac_to_del->hand); - free_stack(fac_to_del->deck); - free(fac_to_del); + free_CList(&fac_to_del->hand); /* Liberation de la main */ + free_stack(fac_to_del->deck); /* Liberation du deck */ + free(fac_to_del); /* Liberation de la faction */ } bool has_mulligan(faction fac_to_test){ - return fac_to_test->hasMulligan; + return get_faction_hasMulligan(fac_to_test); } @@ -153,12 +154,12 @@ void shuffle_deck(faction fac) void declare_mulligan(faction fac){ - if (has_mulligan(fac)){return;} - - empty_hand(fac); + if (!has_mulligan(fac)){return;} /* Verification de la permition pour relancer la main, ce cas ne doit pas arriver car il est teste dans main */ + /* On vide la main de la faction, on melange le deck puis on repioche une nouvelle main */ + empty_hand(fac); shuffle_deck(fac); redraw(fac); - fac->hasMulligan = true; + fac->hasMulligan = false; } void empty_hand(faction fac){ @@ -172,6 +173,7 @@ void empty_hand(faction fac){ void redraw(faction fac) { int i; + /* On ajoute des cartes à la main jusqu'a atteindre la taille maximal */ for (i=0; i < HAND_SIZE; i += 1) { add_card(fac->hand, pop(fac->deck)); @@ -180,17 +182,15 @@ void redraw(faction fac) bool hand_is_empty(faction fac) { - if (fac->hand == NULL) - { - return true; - } - return false; + return is_empty(fac->hand); } void build_Deck(faction fac, unsigned int nbfac) { int i; + + /* Pour chaque type de carte on cree le nombre de carte necessaire pour une faction et on les empile dans le deck */ for ( i = 0; i < CardTypeCount; i +=1 ) { int index; diff --git a/src/plateau.c b/src/plateau.c index f3ab3f0..4c032d2 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -98,16 +98,19 @@ void set_cell_state(cell* oneCell, CellState oneState){ board create_new_board() { + /* Initialisation du nouveau plateau */ board new_board = malloc(sizeof(struct board)); int i; + /* Remplissage du plateau avec des cases vides */ for (i=0; i < BOARD_SIZE* BOARD_SIZE; i += 1) { (new_board->tabBoard[i]).state = Empty; (new_board->tabBoard[i]).cellCard = NULL; } - + /* Creation des factions */ new_board->factions[0] = create_faction(); new_board->factions[1] = create_faction(); + /*Remplissage initiale des decks des factions */ build_Deck(new_board->factions[0], 0); build_Deck(new_board->factions[1], 1); return new_board; @@ -115,8 +118,10 @@ board create_new_board() void free_board(board p) { + /* Libération des factions */ delete_faction(p->factions[0]); delete_faction(p->factions[1]); + /* Libération du plateau */ free(p); } @@ -134,21 +139,21 @@ int new_round(board p) { set_faction_nbRoundWon(p->factions[1], get_faction_nbRoundWon(p->factions[1]) + 1); } - + /* Cas d'egalitee */ if (ptsDDRS1 == ptsDDRS0) { int index = 0; card current = ((p->tabBoard[0]).cellCard); - while ((p->tabBoard[0]).state == Empty && index < BOARD_SIZE) + while ((p->tabBoard[0]).state == Empty && index < BOARD_SIZE) /* On recherche la première carte du plateau */ { index += 1; current = (p->tabBoard[index]).cellCard; } - if (get_card_factionOwner(current) == 0) + if (get_card_factionOwner(current) == 0) /* Si la carte appartient au premier joueur il gagne la manche */ { set_faction_nbRoundWon(p->factions[0], get_faction_nbRoundWon(p->factions[0]) + 1); } - else + else /* Sinon le second gagne */ { set_faction_nbRoundWon(p->factions[1], get_faction_nbRoundWon(p->factions[1]) + 1); } @@ -177,7 +182,9 @@ faction* display_faction(board p) void put_card(board p, card c, int coord) { + /*On remplace la carte (a l'origine NULL) par une nouvelle carte */ (p->tabBoard[coord]).cellCard = c; + /*On passe l'etat de la carte de Empty a FaceDown */ (p->tabBoard[coord]).state = FaceDown; } -- GitLab From 563eaab1229cef49b3cdb186aee60773b6e02b63 Mon Sep 17 00:00:00 2001 From: Martin Fond <martin.fond@ensiie.fr> Date: Sun, 1 May 2022 23:07:54 +0200 Subject: [PATCH 132/163] B.6 Modification de create_new_board --- headers/faction.h | 9 +++++++++ src/plateau.c | 8 ++++++++ 2 files changed, 17 insertions(+) diff --git a/headers/faction.h b/headers/faction.h index 71a0efd..55c88c8 100644 --- a/headers/faction.h +++ b/headers/faction.h @@ -158,6 +158,15 @@ void delete_faction(faction); */ bool has_mulligan(faction); + +/** +*\brief Melange le deck de la faction fac +*\fn bool has_mulligan(faction) +*\param fac faction dont on melange le deck +*\return rien +*/ +void shuffle_deck(faction fac); + /** *\brief Remelange la main et la pioche de la faction, repioche 8 cartes *\fn void declare_mulligan(faction) diff --git a/src/plateau.c b/src/plateau.c index 4c032d2..0c257ff 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -110,9 +110,17 @@ board create_new_board() /* Creation des factions */ new_board->factions[0] = create_faction(); new_board->factions[1] = create_faction(); + set_faction_nom(new_board->factions[0], "Player 1"); + set_faction_nom(new_board->factions[1], "Player 2"); /*Remplissage initiale des decks des factions */ build_Deck(new_board->factions[0], 0); build_Deck(new_board->factions[1], 1); + /* Melange des decks */ + shuffle_deck(new_board->factions[0]); + shuffle_deck(new_board->factions[1]); + /* Pioche des premieres mains */ + redraw(new_board->factions[0]); + redraw(new_board->factions[1]); return new_board; } -- GitLab From d78c661332bed88752f2507b3e4081897ebe0a1d Mon Sep 17 00:00:00 2001 From: Martin Fond <martin.fond@ensiie.fr> Date: Sun, 1 May 2022 23:46:07 +0200 Subject: [PATCH 133/163] =?UTF-8?q?B.6=20Changement=20de=20redraw=20en=20d?= =?UTF-8?q?raw=20pour=20plus=20de=20claret=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- headers/faction.h | 4 ++-- headers/structure.h | 6 ++++-- src/faction.c | 4 ++-- src/plateau.c | 4 ++-- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/headers/faction.h b/headers/faction.h index 55c88c8..6e3febb 100644 --- a/headers/faction.h +++ b/headers/faction.h @@ -192,11 +192,11 @@ void empty_hand(faction); /** *\brief Pioche 8 cartes -*\fn redraw(faction) +*\fn draw(faction) *\param param1 faction qui repioche *\return rien */ -void redraw(faction); +void draw(faction); /** * \brief Fonction renvoie \b true si la main de la faction est vide, \b false sinon diff --git a/headers/structure.h b/headers/structure.h index 8d546cc..9adfbbe 100644 --- a/headers/structure.h +++ b/headers/structure.h @@ -150,8 +150,10 @@ typedef struct Stack* Stack; */ Stack empty_stack(); -/** - * \param stck doit être une adresse valide +/**/** + * @brief + * + */ * \return whether the stack is empty * */ diff --git a/src/faction.c b/src/faction.c index 50b2ad9..088e94a 100644 --- a/src/faction.c +++ b/src/faction.c @@ -158,7 +158,7 @@ void declare_mulligan(faction fac){ /* On vide la main de la faction, on melange le deck puis on repioche une nouvelle main */ empty_hand(fac); shuffle_deck(fac); - redraw(fac); + draw(fac); fac->hasMulligan = false; } @@ -170,7 +170,7 @@ void empty_hand(faction fac){ } } -void redraw(faction fac) +void draw(faction fac) { int i; /* On ajoute des cartes à la main jusqu'a atteindre la taille maximal */ diff --git a/src/plateau.c b/src/plateau.c index 0c257ff..ba1f4df 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -119,8 +119,8 @@ board create_new_board() shuffle_deck(new_board->factions[0]); shuffle_deck(new_board->factions[1]); /* Pioche des premieres mains */ - redraw(new_board->factions[0]); - redraw(new_board->factions[1]); + draw(new_board->factions[0]); + draw(new_board->factions[1]); return new_board; } -- GitLab From c6991ed6260081eddafc868ef4846d3feefb1fe3 Mon Sep 17 00:00:00 2001 From: Martin Fond <martin.fond@ensiie.fr> Date: Sun, 1 May 2022 23:48:45 +0200 Subject: [PATCH 134/163] retour en arriere apres un bug --- headers/structure.h | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/headers/structure.h b/headers/structure.h index 9adfbbe..8d546cc 100644 --- a/headers/structure.h +++ b/headers/structure.h @@ -150,10 +150,8 @@ typedef struct Stack* Stack; */ Stack empty_stack(); -/**/** - * @brief - * - */ +/** + * \param stck doit être une adresse valide * \return whether the stack is empty * */ -- GitLab From 0216229919e520c614d6f63b2f69752ba19b73dd Mon Sep 17 00:00:00 2001 From: Martin Fond <martin.fond@ensiie.fr> Date: Mon, 2 May 2022 02:07:03 +0200 Subject: [PATCH 135/163] B.6 Modif de new roun (reset decks) --- src/plateau.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/plateau.c b/src/plateau.c index ba1f4df..e221163 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -172,6 +172,7 @@ int new_round(board p) { /* Reinitialisation des cases du tableau */ (p->tabBoard[i]).state = Empty; + free((p->tabBoard[i]).cellCard); (p->tabBoard[i]).cellCard = NULL; } if (get_faction_nbRoundWon(p->factions[0]) == WIN_NUMBER || get_faction_nbRoundWon(p->factions[1])== WIN_NUMBER) @@ -179,7 +180,15 @@ int new_round(board p) /* Si un joeur a gagne on renvoi false */ return false; } - /* Si aucun joueur n'a gagne on renvoi true et la partie continue */ + /* Si aucun joueur n'a gagne, on reset les decks, on renvoi true et la partie continue */ + build_Deck(p->factions[0], 0); + build_Deck(p->factions[1], 1); + /* Melange des decks */ + shuffle_deck(p->factions[0]); + shuffle_deck(p->factions[1]); + /* Pioche des premieres mains */ + draw(p->factions[0]); + draw(p->factions[1]); return true; } -- GitLab From d5db82fb4ae511b7da8149d8f3de2d046872edca Mon Sep 17 00:00:00 2001 From: Martin Fond <martin.fond@ensiie.fr> Date: Mon, 2 May 2022 07:55:06 +0200 Subject: [PATCH 136/163] B.6 Correction de draw --- src/faction.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/faction.c b/src/faction.c index 088e94a..fd8ffd8 100644 --- a/src/faction.c +++ b/src/faction.c @@ -176,7 +176,7 @@ void draw(faction fac) /* On ajoute des cartes à la main jusqu'a atteindre la taille maximal */ for (i=0; i < HAND_SIZE; i += 1) { - add_card(fac->hand, pop(fac->deck)); + set_faction_hand(fac, add_card(fac->hand, pop(fac->deck))); } } -- GitLab From 7967ab5cc796ca3272d407c93cf17e98c527a506 Mon Sep 17 00:00:00 2001 From: Martin Fond <martin.fond@ensiie.fr> Date: Mon, 2 May 2022 08:38:10 +0200 Subject: [PATCH 137/163] B.6 Modif de turn_over_card pour que la carte soit FaceUp + correction de bug --- src/plateau.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plateau.c b/src/plateau.c index e221163..5f5bb8d 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -3914,7 +3914,7 @@ card turn_over_card(board p) { card current = ((p->tabBoard[0]).cellCard); int index =0; - while ( ((p->tabBoard[0]).state == Empty || (p->tabBoard[0]).state == FaceUp) && index < BOARD_SIZE) /* S'arrête quand on tombe sur une carte FaceDown*/ + while ( ((p->tabBoard[index]).state == Empty || (p->tabBoard[index]).state == FaceUp) && index < BOARD_SIZE) /* S'arrête quand on tombe sur une carte FaceDown*/ { index += 1; current = (p->tabBoard[index]).cellCard; @@ -3926,6 +3926,7 @@ card turn_over_card(board p) if (current != NULL) { card_effect(p, current, index); + set_cell_state(&(p->tabBoard[index]), FaceUp); } return current; } -- GitLab From 2f83c148098eb0c4f1d8bb46e21cf2afab435bf5 Mon Sep 17 00:00:00 2001 From: alphoenix <felicien.fiscus@ensiie.fr> Date: Mon, 2 May 2022 10:03:46 +0200 Subject: [PATCH 138/163] [B.3]fixing du bug pour size CList et pour la seed de Lehmer --- headers/faction.h | 6 ++++-- headers/plateau.h | 7 ++++--- headers/structure.h | 3 ++- src/faction.c | 8 ++++---- src/main.c | 13 ++++++------- src/plateau.c | 26 +++++++++++++------------- src/structure.c | 8 +++----- 7 files changed, 36 insertions(+), 35 deletions(-) diff --git a/headers/faction.h b/headers/faction.h index 55c88c8..b84d046 100644 --- a/headers/faction.h +++ b/headers/faction.h @@ -163,17 +163,19 @@ bool has_mulligan(faction); *\brief Melange le deck de la faction fac *\fn bool has_mulligan(faction) *\param fac faction dont on melange le deck +*\param nLehmer la seed utilisée *\return rien */ -void shuffle_deck(faction fac); +void shuffle_deck(faction fac, unsigned int* nLehmer); /** *\brief Remelange la main et la pioche de la faction, repioche 8 cartes *\fn void declare_mulligan(faction) *\param param1 faction qui desire repiocher +*\param nLehmer la seed utilisée pour mélanger le jeu *\return rien */ -void declare_mulligan(faction); +void declare_mulligan(faction, unsigned int* nLehmer); /** *\brief Vide la main de la faction dans sa pioche diff --git a/headers/plateau.h b/headers/plateau.h index 8db738d..e2aad82 100644 --- a/headers/plateau.h +++ b/headers/plateau.h @@ -122,11 +122,11 @@ void set_cell_state(cell* oneCell, CellState oneState); /** *\fn board create_new_board() - *\param aucun + *\param nLehmer la seed pour mélanger le jeu *\brief Fonction de création d'un objet de type board, avec un support de jeu vide et les deux factions qui vont jouer *\return un nouvel objet de type board (avec les éléments des deux factions) */ -board create_new_board(); +board create_new_board(unsigned int* nLehmer); /** *\fn void free_board(board p) @@ -166,11 +166,12 @@ void put_card(board p, card c, int coord); /** *\fn card turn_over_card(board p) *\param p de type board + *\param nLehmer la seed utiliser pour *\brief Fonction permettant de retourner une carte visible du plateau si c'est possible (celle la plus en haut à gauche) et active son effet. * Si cette fonction ne trouve pas de carte à retourner, elle renvoit le pointeur NULL *\return la carte qui a été retournée ou le pointeur NULL */ -card turn_over_card(board p); +card turn_over_card(board p, unsigned int* nLehmer); #endif /*PLATEAU_H*/ \ No newline at end of file diff --git a/headers/structure.h b/headers/structure.h index 7e4f678..c894d58 100644 --- a/headers/structure.h +++ b/headers/structure.h @@ -191,10 +191,11 @@ card head(Stack stck); * \brief utiliser pour mélanger la pile rapidement, * utilise la structure interne de la pile via l'algorithme de Fisher-Yates * cf: https://fr.wikipedia.org/wiki/Mélange_de_Fisher-Yates + * Note: la seed pour Lehmer doit être set avant d'appeler la fonction * \param stck Valid Stack pointer * \return rien */ -void shuffle_stack(Stack stck); +void shuffle_stack(Stack stck, unsigned int* nLehmer); /** * \brief libere la mémoire allouer par la pile ainsi que celle des cartes s'il en reste diff --git a/src/faction.c b/src/faction.c index 50b2ad9..83004f0 100644 --- a/src/faction.c +++ b/src/faction.c @@ -147,17 +147,17 @@ bool has_mulligan(faction fac_to_test){ } -void shuffle_deck(faction fac) +void shuffle_deck(faction fac, unsigned int* nLehmer) { - shuffle_stack(fac->deck); + shuffle_stack(fac->deck, nLehmer); } -void declare_mulligan(faction fac){ +void declare_mulligan(faction fac, unsigned int* nLehmer){ if (!has_mulligan(fac)){return;} /* Verification de la permition pour relancer la main, ce cas ne doit pas arriver car il est teste dans main */ /* On vide la main de la faction, on melange le deck puis on repioche une nouvelle main */ empty_hand(fac); - shuffle_deck(fac); + shuffle_deck(fac, nLehmer); redraw(fac); fac->hasMulligan = false; } diff --git a/src/main.c b/src/main.c index 6df0531..288862b 100644 --- a/src/main.c +++ b/src/main.c @@ -17,12 +17,11 @@ int main(/*int argc, char** argv*/) { /**initialisations pre-manche*/ - - unsigned int lehmerSeed = clock(); + unsigned int nLehmer = clock(); /*le jeu se joue en 3 manches maximum avec 2 phases par manche*/ int fRound = 0; /*init le plateau et le jeu */ - board fBoard = create_new_board(); + board fBoard = create_new_board(&nLehmer); faction* fFactions = display_faction(fBoard); card fTurnedCard = 0; /*servira de stockage pour chaque carte qui sera retournee*/ faction fFirst_faction = 0; @@ -35,7 +34,7 @@ int main(/*int argc, char** argv*/) if((++fRound) % 2 == 1) /*je sais c'est complique pour rien, mais c'est drole hehe et puis les modulos c'est la vie*/ { /*choisis de maniere aleatoire une faction qui commence la premiere phase*/ - int first = Lehmer32(&lehmerSeed) % 2; + int first = Lehmer32(&nLehmer) % 2; fFirst_faction = fFactions[first]; fSecond_faction = fFactions[1 - first]; } @@ -51,14 +50,14 @@ int main(/*int argc, char** argv*/) display_hand(fFirst_faction); if(has_mulligan(fFirst_faction) && want_to_redraw(fFirst_faction)) { - declare_mulligan(fFirst_faction); + declare_mulligan(fFirst_faction, &nLehmer); display_hand(fFirst_faction); } display_hand(fSecond_faction); if(has_mulligan(fSecond_faction) && want_to_redraw(fSecond_faction)) { - declare_mulligan(fSecond_faction); + declare_mulligan(fSecond_faction, &nLehmer); display_hand(fSecond_faction); } /*phase 1: chacun son tour, les factions pose une carte sur la table, en commençant par la premiere faction*/ @@ -85,7 +84,7 @@ int main(/*int argc, char** argv*/) /*phase 2: on retourne toute les cartes posées sur le plateau et active leur effet*/ /*douteux je sais, mais l'affectation retourne le membre de gauche, ici fTurnedCard qui est bien ce qu'on veut tester*/ - while((fTurnedCard = turn_over_card(fBoard))) /*equivalent à fTurnedCard = turn_over_card; while(fTurnedCard){...} sauf qu'ici on le fait à chaque tour de boucle*/ + while((fTurnedCard = turn_over_card(fBoard, &nLehmer))) /*equivalent à fTurnedCard = turn_over_card; while(fTurnedCard){...} sauf qu'ici on le fait à chaque tour de boucle*/ { /*d'abord on montre quelle est la nouvelle carte retournée*/ display_board(fBoard); diff --git a/src/plateau.c b/src/plateau.c index 0c257ff..ae908b1 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -96,7 +96,7 @@ void set_cell_state(cell* oneCell, CellState oneState){ /*** Fonctions Autres ***/ -board create_new_board() +board create_new_board(unsigned int* nLehmer) { /* Initialisation du nouveau plateau */ board new_board = malloc(sizeof(struct board)); @@ -116,8 +116,8 @@ board create_new_board() build_Deck(new_board->factions[0], 0); build_Deck(new_board->factions[1], 1); /* Melange des decks */ - shuffle_deck(new_board->factions[0]); - shuffle_deck(new_board->factions[1]); + shuffle_deck(new_board->factions[0], nLehmer); + shuffle_deck(new_board->factions[1], nLehmer); /* Pioche des premieres mains */ redraw(new_board->factions[0]); redraw(new_board->factions[1]); @@ -563,7 +563,7 @@ void effect_card_ECOLOGIIE(board p, card c, int coord) */ -void effect_card_LIIENS(board p, card c, int coord) +void effect_card_LIIENS(board p, card c, int coord, unsigned int* nLehmer) { // Modification de la variable globale LPC @@ -610,7 +610,7 @@ void effect_card_LIIENS(board p, card c, int coord) // Ensuite, on mélange card_FISE_FISA_FC - shuffle_stack(card_FISE_FISA_FC); + shuffle_stack(card_FISE_FISA_FC, nLehmer); // Enfin, on place les cartes de card_FISE_FISA_FC tout en haut à gauche du plateau, dans le même ordre que l'ordre des cartes que l'on retire de card_FISE_FISA_FC @@ -2924,7 +2924,7 @@ void effect_card_DJIBRIL_AURELIEN_DEMBELE_CABOT(board p, card c, int coord) */ -void effect_card_ERIC_LEJEUNE(board p, card c, int coord) +void effect_card_ERIC_LEJEUNE(board p, card c, int coord, unsigned int* nLehmer) { // Modification de la variable globale LPC @@ -3277,7 +3277,7 @@ void effect_card_ERIC_LEJEUNE(board p, card c, int coord) if (indicator) { - shuffle_stack(stack_card); + shuffle_stack(stack_card, nLehmer); int i = 0; @@ -3616,7 +3616,7 @@ void effect_card_LAURENT_PREVEL(board p, card c, int coord) *\return rien */ -void card_effect(board p, card c, int coord) +void card_effect(board p, card c, int coord, unsigned int* nLehmer) { CardType type = get_card_type(c); @@ -3657,7 +3657,7 @@ void card_effect(board p, card c, int coord) case lIIEns : - effect_card_LIIENS(p, c, coord); + effect_card_LIIENS(p, c, coord, nLehmer); break; @@ -3760,7 +3760,7 @@ void card_effect(board p, card c, int coord) if (pcc.coord_card != -1) // Si pcc.coord_card != -1, alors avant la carte c de type Massinissa_Merabet, il y a au moins une carte retournée, et donc on active l'effet de la dernière carte retournée avant c (qui est pcc.coord_card) { - card_effect(p, pcc.card_in_coord, pcc.coord_card); + card_effect(p, pcc.card_in_coord, pcc.coord_card, nLehmer); } @@ -3859,7 +3859,7 @@ void card_effect(board p, card c, int coord) case Eric_Lejeune : - effect_card_ERIC_LEJEUNE(p, c, coord); + effect_card_ERIC_LEJEUNE(p, c, coord, nLehmer); break; @@ -3901,7 +3901,7 @@ void card_effect(board p, card c, int coord) -card turn_over_card(board p) +card turn_over_card(board p, unsigned int* nLehmer) { card current = ((p->tabBoard[0]).cellCard); int index =0; @@ -3916,7 +3916,7 @@ card turn_over_card(board p) } if (current != NULL) { - card_effect(p, current, index); + card_effect(p, current, index, nLehmer); } return current; } diff --git a/src/structure.c b/src/structure.c index a505326..6c49f15 100644 --- a/src/structure.c +++ b/src/structure.c @@ -26,7 +26,7 @@ bool is_empty(CList lst) unsigned int size(CList lst) { unsigned int res = 0; - if(is_empty(lst)) + if(!is_empty(lst)) { struct Node* curr = lst; while(curr) @@ -328,15 +328,13 @@ void push(Stack stck, card crd) } -void shuffle_stack(Stack stck) +void shuffle_stack(Stack stck, unsigned int* nLehmer) { if(is_stack_empty(stck)) return; - unsigned int lehmer_seed = clock(); - for(int i = stck->fSize - 1; i > 0; --i) { - int j = Lehmer32(&lehmer_seed) % (i+1); + int j = Lehmer32(nLehmer) % (i+1); card buff_i = stck->fStack[i]; stck->fStack[i] = stck->fStack[j]; stck->fStack[j] = buff_i; -- GitLab From 2d1286b83f3abb2446aa1e6ceae92d79014b4e20 Mon Sep 17 00:00:00 2001 From: "martin.fond" <martin.fond@ensiie.fr> Date: Mon, 2 May 2022 11:29:31 +0200 Subject: [PATCH 139/163] B.6 Egalisation pour LotB et LotB-Test --- headers/plateau.h | 2 +- src/main.c | 2 +- src/plateau.c | 16 ++++++---------- 3 files changed, 8 insertions(+), 12 deletions(-) diff --git a/headers/plateau.h b/headers/plateau.h index e2aad82..c9268b6 100644 --- a/headers/plateau.h +++ b/headers/plateau.h @@ -143,7 +143,7 @@ void free_board(board p); * et aumenter le nombre de victoires du gagnant *\return un booléen indiquant si le jeu est terminé ou non */ -int new_round(board p); +int new_round(board p, unsigned int* nLehmer); /** *\fn faction* display_faction(board p) diff --git a/src/main.c b/src/main.c index 288862b..56dd2e8 100644 --- a/src/main.c +++ b/src/main.c @@ -93,7 +93,7 @@ int main(/*int argc, char** argv*/) } /********************/ - }while(new_round(fBoard)); + }while(new_round(fBoard, &nLehmer)); /*LE GAGNANT !! C'EEEST POUUUR GAGNEEEER !!! oui.*/ display_winner(fBoard); diff --git a/src/plateau.c b/src/plateau.c index 21f0022..bc1900b 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -116,8 +116,8 @@ board create_new_board(unsigned int* nLehmer) build_Deck(new_board->factions[0], 0); build_Deck(new_board->factions[1], 1); /* Melange des decks */ - shuffle_deck(new_board->factions[0], nLehmer); - shuffle_deck(new_board->factions[1], nLehmer); + shuffle_deck(new_board->factions[0], &nLehmer); + shuffle_deck(new_board->factions[1], &nLehmer); /* Pioche des premieres mains */ draw(new_board->factions[0]); draw(new_board->factions[1]); @@ -133,7 +133,7 @@ void free_board(board p) free(p); } -int new_round(board p,int nLehmer) +int new_round(board p,unsigned int *nLehmer) { /* Comparaison des points DDRS */ @@ -184,8 +184,8 @@ int new_round(board p,int nLehmer) build_Deck(p->factions[0], 0); build_Deck(p->factions[1], 1); /* Melange des decks */ - shuffle_deck(p->factions[0], nLehmer); - shuffle_deck(p->factions[1], nLehmer); + shuffle_deck(p->factions[0], &nLehmer); + shuffle_deck(p->factions[1], &nLehmer); /* Pioche des premieres mains */ draw(p->factions[0]); draw(p->factions[1]); @@ -3925,12 +3925,8 @@ card turn_over_card(board p, unsigned int* nLehmer) } if (current != NULL) { -<<<<<<< HEAD - card_effect(p, current, index); + card_effect(p, current, index, &nLehmer); set_cell_state(&(p->tabBoard[index]), FaceUp); -======= - card_effect(p, current, index, nLehmer); ->>>>>>> LotB } return current; } -- GitLab From 0247a6b642aad4b208e58f8acb52d7faa69ef935 Mon Sep 17 00:00:00 2001 From: "martin.fond" <martin.fond@ensiie.fr> Date: Mon, 2 May 2022 11:45:38 +0200 Subject: [PATCH 140/163] B.6 Correction Lehmer --- src/plateau.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/plateau.c b/src/plateau.c index bc1900b..4ceaa65 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -116,8 +116,8 @@ board create_new_board(unsigned int* nLehmer) build_Deck(new_board->factions[0], 0); build_Deck(new_board->factions[1], 1); /* Melange des decks */ - shuffle_deck(new_board->factions[0], &nLehmer); - shuffle_deck(new_board->factions[1], &nLehmer); + shuffle_deck(new_board->factions[0], nLehmer); + shuffle_deck(new_board->factions[1], nLehmer); /* Pioche des premieres mains */ draw(new_board->factions[0]); draw(new_board->factions[1]); @@ -184,8 +184,8 @@ int new_round(board p,unsigned int *nLehmer) build_Deck(p->factions[0], 0); build_Deck(p->factions[1], 1); /* Melange des decks */ - shuffle_deck(p->factions[0], &nLehmer); - shuffle_deck(p->factions[1], &nLehmer); + shuffle_deck(p->factions[0], nLehmer); + shuffle_deck(p->factions[1], nLehmer); /* Pioche des premieres mains */ draw(p->factions[0]); draw(p->factions[1]); @@ -3925,7 +3925,7 @@ card turn_over_card(board p, unsigned int* nLehmer) } if (current != NULL) { - card_effect(p, current, index, &nLehmer); + card_effect(p, current, index, nLehmer); set_cell_state(&(p->tabBoard[index]), FaceUp); } return current; -- GitLab From 7ccc20888a1398a81e601666299d547a9e00024f Mon Sep 17 00:00:00 2001 From: alphoenix <felicien.fiscus@ensiie.fr> Date: Mon, 2 May 2022 11:51:37 +0200 Subject: [PATCH 141/163] [B.8]ajout du posage de carte automatique pour la premiere carte de la manche poser --- headers/interface.h | 2 +- src/interface.c | 20 ++++++++++++++++++-- src/main.c | 4 ++-- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/headers/interface.h b/headers/interface.h index 06c47d8..a2b9f45 100644 --- a/headers/interface.h +++ b/headers/interface.h @@ -57,7 +57,7 @@ card choose_card_to_place(faction); * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) * \date 2022-03-18 */ -int where_to_place_card(faction, card); +int where_to_place_card(board brd, faction, card); /** * \brief Fonction affiche les effets de la carte retournée diff --git a/src/interface.c b/src/interface.c index 1569482..9b4ac6d 100644 --- a/src/interface.c +++ b/src/interface.c @@ -111,8 +111,20 @@ card choose_card_to_place(faction fac) return NULL; } +int is_board_empty(board brd) +{ + cell* tab = get_board_tabBoard(brd); + for(int i = 0;i<BOARD_SIZE * BOARD_SIZE;++i) + { + if(tab[i].state != Empty) + { + return 0; + } + } + return 1; +} -int where_to_place_card(faction fac, card crd) +int where_to_place_card(board brd, faction fac, card crd) { while(true) { @@ -124,9 +136,13 @@ int where_to_place_card(faction fac, card crd) { printf("wrong input (coords need to be between 1 and %i)\n", BOARD_SIZE); } + else if(is_board_empty(brd)) + { + return BOARD_SIZE / 2 + (BOARD_SIZE / 2) * BOARD_SIZE; + } else { - return (x - 1) + (y - 1) * BOARD_SIZE; + return (x - 1) + (y - 1) * BOARD_SIZE; } } diff --git a/src/main.c b/src/main.c index 288862b..152844c 100644 --- a/src/main.c +++ b/src/main.c @@ -67,14 +67,14 @@ int main(/*int argc, char** argv*/) { /*pour la premiere faction*/ card card_to_place = choose_card_to_place(fFirst_faction); - int card_coords = where_to_place_card(fFirst_faction, card_to_place); + int card_coords = where_to_place_card(fBoard, fFirst_faction, card_to_place); put_card(fBoard, card_to_place, card_coords); display_board(fBoard); /*afficher le plateau à chaque mise à jour de celui-ci*/ /*pour la deuxieme faction*/ card_to_place = choose_card_to_place(fSecond_faction); - card_coords = where_to_place_card(fSecond_faction, card_to_place); + card_coords = where_to_place_card(fBoard, fSecond_faction, card_to_place); put_card(fBoard, card_to_place, card_coords); display_board(fBoard); -- GitLab From f2822aef5ce6eb5fe10ddedd14777183d3316115 Mon Sep 17 00:00:00 2001 From: alphoenix <felicien.fiscus@ensiie.fr> Date: Mon, 2 May 2022 12:20:49 +0200 Subject: [PATCH 142/163] [B.8]fixing de bug mineurs --- src/interface.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/interface.c b/src/interface.c index 9b4ac6d..685fb11 100644 --- a/src/interface.c +++ b/src/interface.c @@ -140,10 +140,19 @@ int where_to_place_card(board brd, faction fac, card crd) { return BOARD_SIZE / 2 + (BOARD_SIZE / 2) * BOARD_SIZE; } - else + else if(get_board_tabBoard(brd)[x + (y-1)*BOARD_SIZE].state != Empty + || get_board_tabBoard(brd)[x-1 + (y-2)*BOARD_SIZE].state != Empty + || get_board_tabBoard(brd)[x-1 + y*BOARD_SIZE].state != Empty + || get_board_tabBoard(brd)[x-2 + (y-1)*BOARD_SIZE].state != Empty) { return (x - 1) + (y - 1) * BOARD_SIZE; } + else + { + printf("wrong input, the card needs to be next to another card\n"); + } + + fflush(stdout); } return -1; -- GitLab From 74869d96598c1674a646785b2d1a86ecd5c5dea5 Mon Sep 17 00:00:00 2001 From: "martin.fond" <martin.fond@ensiie.fr> Date: Mon, 2 May 2022 12:42:12 +0200 Subject: [PATCH 143/163] =?UTF-8?q?B.6=20Rajout=20d'=C3=A9l=C3=A9ments=20m?= =?UTF-8?q?anquants=20par=20rapport=20=C3=A0=20LotB-Test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- headers/faction.h | 4 ++-- headers/plateau.h | 2 +- src/faction.c | 6 +++--- src/main.c | 2 +- src/plateau.c | 19 +++++++++++++++---- 5 files changed, 22 insertions(+), 11 deletions(-) diff --git a/headers/faction.h b/headers/faction.h index b84d046..15fe5ee 100644 --- a/headers/faction.h +++ b/headers/faction.h @@ -194,11 +194,11 @@ void empty_hand(faction); /** *\brief Pioche 8 cartes -*\fn redraw(faction) +*\fn draw(faction) *\param param1 faction qui repioche *\return rien */ -void redraw(faction); +void draw(faction); /** * \brief Fonction renvoie \b true si la main de la faction est vide, \b false sinon diff --git a/headers/plateau.h b/headers/plateau.h index e2aad82..c9268b6 100644 --- a/headers/plateau.h +++ b/headers/plateau.h @@ -143,7 +143,7 @@ void free_board(board p); * et aumenter le nombre de victoires du gagnant *\return un booléen indiquant si le jeu est terminé ou non */ -int new_round(board p); +int new_round(board p, unsigned int* nLehmer); /** *\fn faction* display_faction(board p) diff --git a/src/faction.c b/src/faction.c index 83004f0..7edc1bb 100644 --- a/src/faction.c +++ b/src/faction.c @@ -158,7 +158,7 @@ void declare_mulligan(faction fac, unsigned int* nLehmer){ /* On vide la main de la faction, on melange le deck puis on repioche une nouvelle main */ empty_hand(fac); shuffle_deck(fac, nLehmer); - redraw(fac); + draw(fac); fac->hasMulligan = false; } @@ -170,13 +170,13 @@ void empty_hand(faction fac){ } } -void redraw(faction fac) +void draw(faction fac) { int i; /* On ajoute des cartes à la main jusqu'a atteindre la taille maximal */ for (i=0; i < HAND_SIZE; i += 1) { - add_card(fac->hand, pop(fac->deck)); + set_faction_hand(fac, add_card(fac->hand, pop(fac->deck))); } } diff --git a/src/main.c b/src/main.c index 288862b..56dd2e8 100644 --- a/src/main.c +++ b/src/main.c @@ -93,7 +93,7 @@ int main(/*int argc, char** argv*/) } /********************/ - }while(new_round(fBoard)); + }while(new_round(fBoard, &nLehmer)); /*LE GAGNANT !! C'EEEST POUUUR GAGNEEEER !!! oui.*/ display_winner(fBoard); diff --git a/src/plateau.c b/src/plateau.c index ae908b1..b559fca 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -119,8 +119,8 @@ board create_new_board(unsigned int* nLehmer) shuffle_deck(new_board->factions[0], nLehmer); shuffle_deck(new_board->factions[1], nLehmer); /* Pioche des premieres mains */ - redraw(new_board->factions[0]); - redraw(new_board->factions[1]); + draw(new_board->factions[0]); + draw(new_board->factions[1]); return new_board; } @@ -133,7 +133,7 @@ void free_board(board p) free(p); } -int new_round(board p) +int new_round(board p, unsigned int* nLehmer) { /* Comparaison des points DDRS */ @@ -179,6 +179,16 @@ int new_round(board p) /* Si un joeur a gagne on renvoi false */ return false; } + + build_Deck(new_board->factions[0], 0); + build_Deck(new_board->factions[1], 1); + /* Melange des decks */ + shuffle_deck(new_board->factions[0], nLehmer); + shuffle_deck(new_board->factions[1], nLehmer); + /* Pioche des premieres mains */ + draw(new_board->factions[0]); + draw(new_board->factions[1]); + /* Si aucun joueur n'a gagne on renvoi true et la partie continue */ return true; } @@ -3905,7 +3915,7 @@ card turn_over_card(board p, unsigned int* nLehmer) { card current = ((p->tabBoard[0]).cellCard); int index =0; - while ( ((p->tabBoard[0]).state == Empty || (p->tabBoard[0]).state == FaceUp) && index < BOARD_SIZE) /* S'arrête quand on tombe sur une carte FaceDown*/ + while ( ((p->tabBoard[index]).state == Empty || (p->tabBoard[index]).state == FaceUp) && index < BOARD_SIZE) /* S'arrête quand on tombe sur une carte FaceDown*/ { index += 1; current = (p->tabBoard[index]).cellCard; @@ -3917,6 +3927,7 @@ card turn_over_card(board p, unsigned int* nLehmer) if (current != NULL) { card_effect(p, current, index, nLehmer); + set_cell_state(&(p->tabBoard[index]), FaceUp); } return current; } -- GitLab From 584a20e7e4c3b22cb93872711207fb1864df9e00 Mon Sep 17 00:00:00 2001 From: alphoenix <felicien.fiscus@ensiie.fr> Date: Mon, 2 May 2022 12:48:54 +0200 Subject: [PATCH 144/163] [B.3]fixing bug --- src/plateau.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/plateau.c b/src/plateau.c index b559fca..e19c5fc 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -180,14 +180,14 @@ int new_round(board p, unsigned int* nLehmer) return false; } - build_Deck(new_board->factions[0], 0); - build_Deck(new_board->factions[1], 1); + build_Deck(p->factions[0], 0); + build_Deck(p->factions[1], 1); /* Melange des decks */ - shuffle_deck(new_board->factions[0], nLehmer); - shuffle_deck(new_board->factions[1], nLehmer); + shuffle_deck(p->factions[0], nLehmer); + shuffle_deck(p->factions[1], nLehmer); /* Pioche des premieres mains */ - draw(new_board->factions[0]); - draw(new_board->factions[1]); + draw(p->factions[0]); + draw(p->factions[1]); /* Si aucun joueur n'a gagne on renvoi true et la partie continue */ return true; -- GitLab From a58f1368cc88a3e2a4c2368a7aa1e3ee648aa84a Mon Sep 17 00:00:00 2001 From: "martin.fond" <martin.fond@ensiie.fr> Date: Mon, 2 May 2022 12:50:57 +0200 Subject: [PATCH 145/163] B.6 Egalisation LotB-Test --- src/main.c | 94 +++++---------------------------------------------- src/plateau.c | 1 + 2 files changed, 9 insertions(+), 86 deletions(-) diff --git a/src/main.c b/src/main.c index dc1a309..26079c1 100644 --- a/src/main.c +++ b/src/main.c @@ -16,90 +16,12 @@ int main(/*int argc, char** argv*/) { - /**initialisations pre-manche*/ - unsigned int nLehmer = clock(); - /*le jeu se joue en 3 manches maximum avec 2 phases par manche*/ - int fRound = 0; - /*init le plateau et le jeu */ - board fBoard = create_new_board(&nLehmer); - faction* fFactions = display_faction(fBoard); - card fTurnedCard = 0; /*servira de stockage pour chaque carte qui sera retournee*/ - faction fFirst_faction = 0; - faction fSecond_faction = 0; - - /********************************/ - do - { - /*check si on est au tour 1 ou au tour 3*/ - if((++fRound) % 2 == 1) /*je sais c'est complique pour rien, mais c'est drole hehe et puis les modulos c'est la vie*/ - { - /*choisis de maniere aleatoire une faction qui commence la premiere phase*/ - int first = Lehmer32(&nLehmer) % 2; - fFirst_faction = fFactions[first]; - fSecond_faction = fFactions[1 - first]; - } - else /*echange les deux factions de place 1ere = 2eme et 2eme = 1ere*/ - { - faction buff = fFirst_faction; - fFirst_faction = fSecond_faction; - fSecond_faction = buff; - } - - - /*au début chaque tour, on demande si les factions veulent repiocher (s'il le peuvent)*/ - display_hand(fFirst_faction); - if(has_mulligan(fFirst_faction) && want_to_redraw(fFirst_faction)) - { - declare_mulligan(fFirst_faction, &nLehmer); - display_hand(fFirst_faction); - } - - display_hand(fSecond_faction); - if(has_mulligan(fSecond_faction) && want_to_redraw(fSecond_faction)) - { - declare_mulligan(fSecond_faction, &nLehmer); - display_hand(fSecond_faction); - } - /*phase 1: chacun son tour, les factions pose une carte sur la table, en commençant par la premiere faction*/ - - display_board(fBoard); - while(!hand_is_empty(fFirst_faction) && !hand_is_empty(fSecond_faction)) - { - /*pour la premiere faction*/ - card card_to_place = choose_card_to_place(fFirst_faction); - int card_coords = where_to_place_card(fBoard, fFirst_faction, card_to_place); - put_card(fBoard, card_to_place, card_coords); - - display_board(fBoard); /*afficher le plateau à chaque mise à jour de celui-ci*/ - - /*pour la deuxieme faction*/ - card_to_place = choose_card_to_place(fSecond_faction); - card_coords = where_to_place_card(fBoard, fSecond_faction, card_to_place); - put_card(fBoard, card_to_place, card_coords); - - display_board(fBoard); - - } - /***************/ - - /*phase 2: on retourne toute les cartes posées sur le plateau et active leur effet*/ - /*douteux je sais, mais l'affectation retourne le membre de gauche, ici fTurnedCard qui est bien ce qu'on veut tester*/ - while((fTurnedCard = turn_over_card(fBoard, &nLehmer))) /*equivalent à fTurnedCard = turn_over_card; while(fTurnedCard){...} sauf qu'ici on le fait à chaque tour de boucle*/ - { - /*d'abord on montre quelle est la nouvelle carte retournée*/ - display_board(fBoard); - /*et après on montre les effets qu'elle a fait*/ - display_card_effects(fTurnedCard); - } - /********************/ - - }while(new_round(fBoard, &nLehmer)); - - /*LE GAGNANT !! C'EEEST POUUUR GAGNEEEER !!! oui.*/ - display_winner(fBoard); - - /*liberation de la memoire*/ - free_board(fBoard); - /*************************/ - return 0; + build_Deck(new_board->factions[0], 0); + build_Deck(new_board->factions[1], 1); + /* Melange des decks */ + shuffle_deck(new_board->factions[0], nLehmer); + shuffle_deck(new_board->factions[1], nLehmer); + /* Pioche des premieres mains */ + draw(new_board->factions[0]); + draw(new_board->factions[1]); } \ No newline at end of file diff --git a/src/plateau.c b/src/plateau.c index b559fca..24cb08d 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -172,6 +172,7 @@ int new_round(board p, unsigned int* nLehmer) { /* Reinitialisation des cases du tableau */ (p->tabBoard[i]).state = Empty; + free((p->tabBoard[i]).cellCard); (p->tabBoard[i]).cellCard = NULL; } if (get_faction_nbRoundWon(p->factions[0]) == WIN_NUMBER || get_faction_nbRoundWon(p->factions[1])== WIN_NUMBER) -- GitLab From 514a78fd9a8a81229736bc2ffab8f195cb27dbe3 Mon Sep 17 00:00:00 2001 From: "martin.fond" <martin.fond@ensiie.fr> Date: Mon, 2 May 2022 15:43:57 +0200 Subject: [PATCH 146/163] B.6 Correction segfault new_round --- src/plateau.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/plateau.c b/src/plateau.c index 0322bbc..831698a 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -171,9 +171,12 @@ int new_round(board p, unsigned int* nLehmer) for (i=0; i < BOARD_SIZE* BOARD_SIZE; i += 1) { /* Reinitialisation des cases du tableau */ - (p->tabBoard[i]).state = Empty; - free((p->tabBoard[i]).cellCard); - (p->tabBoard[i]).cellCard = NULL; + if (get_cell_state(get_board_cell(p,i)) != Empty) + { + free((p->tabBoard[i]).cellCard); + (p->tabBoard[i]).state = Empty; + (p->tabBoard[i]).cellCard = NULL; + } } if (get_faction_nbRoundWon(p->factions[0]) == WIN_NUMBER || get_faction_nbRoundWon(p->factions[1])== WIN_NUMBER) { -- GitLab From 30939dd0956e1954fcea3e1d8c181f1ecb309c69 Mon Sep 17 00:00:00 2001 From: Martin Fond <martin.fond@ensiie.fr> Date: Mon, 2 May 2022 16:42:05 +0200 Subject: [PATCH 147/163] Restoration main --- src/main.c | 95 +++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 87 insertions(+), 8 deletions(-) diff --git a/src/main.c b/src/main.c index 26079c1..29f6e78 100644 --- a/src/main.c +++ b/src/main.c @@ -16,12 +16,91 @@ int main(/*int argc, char** argv*/) { - build_Deck(new_board->factions[0], 0); - build_Deck(new_board->factions[1], 1); - /* Melange des decks */ - shuffle_deck(new_board->factions[0], nLehmer); - shuffle_deck(new_board->factions[1], nLehmer); - /* Pioche des premieres mains */ - draw(new_board->factions[0]); - draw(new_board->factions[1]); + /**initialisations pre-manche*/ + unsigned int nLehmer = clock(); + /*le jeu se joue en 3 manches maximum avec 2 phases par manche*/ + int fRound = 0; + /*init le plateau et le jeu */ + board fBoard = create_new_board(&nLehmer); + faction* fFactions = display_faction(fBoard); + card fTurnedCard = 0; /*servira de stockage pour chaque carte qui sera retournee*/ + faction fFirst_faction = 0; + faction fSecond_faction = 0; + + /********************************/ + do + { + /*check si on est au tour 1 ou au tour 3*/ + if((++fRound) % 2 == 1) /*je sais c'est complique pour rien, mais c'est drole hehe et puis les modulos c'est la vie*/ + { + /*choisis de maniere aleatoire une faction qui commence la premiere phase*/ + int first = Lehmer32(&nLehmer) % 2; + fFirst_faction = fFactions[first]; + fSecond_faction = fFactions[1 - first]; + } + else /*echange les deux factions de place 1ere = 2eme et 2eme = 1ere*/ + { + faction buff = fFirst_faction; + fFirst_faction = fSecond_faction; + fSecond_faction = buff; + } + + + /*au début chaque tour, on demande si les factions veulent repiocher (s'il le peuvent)*/ + display_hand(fFirst_faction); + if(has_mulligan(fFirst_faction) && want_to_redraw(fFirst_faction)) + { + declare_mulligan(fFirst_faction, &nLehmer); + display_hand(fFirst_faction); + } + + display_hand(fSecond_faction); + if(has_mulligan(fSecond_faction) && want_to_redraw(fSecond_faction)) + { + declare_mulligan(fSecond_faction, &nLehmer); + display_hand(fSecond_faction); + } + /*phase 1: chacun son tour, les factions pose une carte sur la table, en commençant par la premiere faction*/ + + display_board(fBoard); + while(!hand_is_empty(fFirst_faction) && !hand_is_empty(fSecond_faction)) + { + /*pour la premiere faction*/ + card card_to_place = choose_card_to_place(fFirst_faction); + int card_coords = where_to_place_card(fBoard, fFirst_faction, card_to_place); + put_card(fBoard, card_to_place, card_coords); + + display_board(fBoard); /*afficher le plateau à chaque mise à jour de celui-ci*/ + + /*pour la deuxieme faction*/ + card_to_place = choose_card_to_place(fSecond_faction); + card_coords = where_to_place_card(fBoard, fSecond_faction, card_to_place); + put_card(fBoard, card_to_place, card_coords); + + display_board(fBoard); + + } + /***************/ + + /*phase 2: on retourne toute les cartes posées sur le plateau et active leur effet*/ + /*douteux je sais, mais l'affectation retourne le membre de gauche, ici fTurnedCard qui est bien ce qu'on veut tester*/ + while((fTurnedCard = turn_over_card(fBoard, &nLehmer))) /*equivalent à fTurnedCard = turn_over_card; while(fTurnedCard){...} sauf qu'ici on le fait à chaque tour de boucle*/ + { + /*d'abord on montre quelle est la nouvelle carte retournée*/ + display_board(fBoard); + /*et après on montre les effets qu'elle a fait*/ + display_card_effects(fTurnedCard); + } + /********************/ + + }while(new_round(fBoard, &nLehmer)); + + /*LE GAGNANT !! C'EEEST POUUUR GAGNEEEER !!! oui.*/ + display_winner(fBoard); + + /*liberation de la memoire*/ + free_board(fBoard); + /*************************/ + return 0; + } \ No newline at end of file -- GitLab From d938e80426ba571db8408b881dc50ec40b45d77e Mon Sep 17 00:00:00 2001 From: alphoenix <felicien.fiscus@ensiie.fr> Date: Mon, 2 May 2022 16:56:59 +0200 Subject: [PATCH 148/163] [B.3]fixing de bug dans remove_where --- src/interface.c | 4 ++-- src/main.c | 2 ++ src/structure.c | 6 +++--- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/interface.c b/src/interface.c index 685fb11..7a73b0b 100644 --- a/src/interface.c +++ b/src/interface.c @@ -140,10 +140,10 @@ int where_to_place_card(board brd, faction fac, card crd) { return BOARD_SIZE / 2 + (BOARD_SIZE / 2) * BOARD_SIZE; } - else if(get_board_tabBoard(brd)[x + (y-1)*BOARD_SIZE].state != Empty + else if((get_board_tabBoard(brd)[x + (y-1)*BOARD_SIZE].state != Empty || get_board_tabBoard(brd)[x-1 + (y-2)*BOARD_SIZE].state != Empty || get_board_tabBoard(brd)[x-1 + y*BOARD_SIZE].state != Empty - || get_board_tabBoard(brd)[x-2 + (y-1)*BOARD_SIZE].state != Empty) + || get_board_tabBoard(brd)[x-2 + (y-1)*BOARD_SIZE].state != Empty) && get_board_tabBoard(brd)[x-1 + (y-1) * BOARD_SIZE].state == Empty) { return (x - 1) + (y - 1) * BOARD_SIZE; } diff --git a/src/main.c b/src/main.c index dc1a309..a88c7c8 100644 --- a/src/main.c +++ b/src/main.c @@ -66,6 +66,7 @@ int main(/*int argc, char** argv*/) while(!hand_is_empty(fFirst_faction) && !hand_is_empty(fSecond_faction)) { /*pour la premiere faction*/ + display_hand(fFirst_faction); card card_to_place = choose_card_to_place(fFirst_faction); int card_coords = where_to_place_card(fBoard, fFirst_faction, card_to_place); put_card(fBoard, card_to_place, card_coords); @@ -73,6 +74,7 @@ int main(/*int argc, char** argv*/) display_board(fBoard); /*afficher le plateau à chaque mise à jour de celui-ci*/ /*pour la deuxieme faction*/ + display_hand(fSecond_faction); card_to_place = choose_card_to_place(fSecond_faction); card_coords = where_to_place_card(fBoard, fSecond_faction, card_to_place); put_card(fBoard, card_to_place, card_coords); diff --git a/src/structure.c b/src/structure.c index 6c49f15..88393cf 100644 --- a/src/structure.c +++ b/src/structure.c @@ -163,7 +163,7 @@ card remove_card(CList* lst, card crd) card remove_where(CList* lst, int index_pos, struct Node* node_pos) { - if(index_pos == -1 && node_pos) + if(index_pos <= -1 && node_pos) { return remove_card(lst, node_pos->nodeCard); } @@ -190,7 +190,7 @@ card remove_where(CList* lst, int index_pos, struct Node* node_pos) curr = (*lst)->nodeNext; - while(curr && index < index_pos) + while(curr && index < index_pos - 1) { index++; last = curr; @@ -208,7 +208,7 @@ card remove_where(CList* lst, int index_pos, struct Node* node_pos) last->nodeNext = curr->nodeNext; free(curr); - + return res; -- GitLab From aec2520b06ce49e5c3e15211de3481e405afe7c9 Mon Sep 17 00:00:00 2001 From: Martin Fond <martin.fond@ensiie.fr> Date: Mon, 2 May 2022 17:14:20 +0200 Subject: [PATCH 149/163] B.6 Correction de new round pour eviter une segment fault en cas de plateau vide --- src/plateau.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/plateau.c b/src/plateau.c index 831698a..4dfed58 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -151,11 +151,22 @@ int new_round(board p, unsigned int* nLehmer) if (ptsDDRS1 == ptsDDRS0) { int index = 0; - card current = ((p->tabBoard[0]).cellCard); - while ((p->tabBoard[0]).state == Empty && index < BOARD_SIZE) /* On recherche la première carte du plateau */ + card current = get_cell_card(get_board_cell(p, 0)); + + while ((get_cell_state(get_board_cell(p, index))) == Empty && index < BOARD_SIZE) /* On recherche la première carte du plateau */ + { + index += 1; + } + + if (index < BOARD_SIZE) /* Si on se trouve toujours dans le plateau on enregistre la premiere carte du plateau */ { index += 1; - current = (p->tabBoard[index]).cellCard; + current = get_cell_card(get_board_cell(p, index)); + } + if (current == NULL) /* Si aucune carte n'est presente sur la plateau (ce qui ne doit pas arriver apres un round) on arrete la partie et on affiche une erreur*/ + { + printf("Erreur lors du compte des points (Egalite mais plateau vide)"); + return false; } if (get_card_factionOwner(current) == 0) /* Si la carte appartient au premier joueur il gagne la manche */ { -- GitLab From 3efe9af4a81bb2262be7e5cbc0f9461914289f03 Mon Sep 17 00:00:00 2001 From: Lucas Desrumeaux <lucas@carjager.com> Date: Mon, 2 May 2022 17:16:51 +0200 Subject: [PATCH 150/163] [B.2] Tests pour le 3eme round, fin du jeu, demarrage du jeu --- src/main.c | 10 ---- test/src/mainTest.c | 128 +++++++++++++++++++++++++++++++------------- 2 files changed, 91 insertions(+), 47 deletions(-) diff --git a/src/main.c b/src/main.c index fefa37f..a88c7c8 100644 --- a/src/main.c +++ b/src/main.c @@ -66,10 +66,7 @@ int main(/*int argc, char** argv*/) while(!hand_is_empty(fFirst_faction) && !hand_is_empty(fSecond_faction)) { /*pour la premiere faction*/ -<<<<<<< HEAD -======= display_hand(fFirst_faction); ->>>>>>> LotB card card_to_place = choose_card_to_place(fFirst_faction); int card_coords = where_to_place_card(fBoard, fFirst_faction, card_to_place); put_card(fBoard, card_to_place, card_coords); @@ -77,10 +74,7 @@ int main(/*int argc, char** argv*/) display_board(fBoard); /*afficher le plateau à chaque mise à jour de celui-ci*/ /*pour la deuxieme faction*/ -<<<<<<< HEAD -======= display_hand(fSecond_faction); ->>>>>>> LotB card_to_place = choose_card_to_place(fSecond_faction); card_coords = where_to_place_card(fBoard, fSecond_faction, card_to_place); put_card(fBoard, card_to_place, card_coords); @@ -110,8 +104,4 @@ int main(/*int argc, char** argv*/) free_board(fBoard); /*************************/ return 0; -<<<<<<< HEAD -======= - ->>>>>>> LotB } \ No newline at end of file diff --git a/test/src/mainTest.c b/test/src/mainTest.c index 104036d..d29b683 100644 --- a/test/src/mainTest.c +++ b/test/src/mainTest.c @@ -17,7 +17,7 @@ static board brd = NULL; * Opens the temporary file used by the tests. * Returns zero on success, non-zero otherwise. */ -int init_suiteInitialisation(void) +int init_suitePremierTest(void) { unsigned int lehmerSeed = clock(); if (NULL != (fac = create_faction()) && NULL != (brd = create_new_board(&lehmerSeed))){ @@ -31,9 +31,9 @@ int init_suiteInitialisation(void) * Closes the temporary file used by the tests. * Returns zero on success, non-zero otherwise. */ -int clean_suiteInitialisation(void){ +int clean_suitePremierTest(void){ delete_faction(fac); - //free_board(brd); // le free pose problème, il provoque un segment fault + //free_board(brd); // @ free_board() pose problème, il provoque un segment fault return 0; } @@ -47,7 +47,7 @@ void test_InitialisationFaction(void){ CU_ASSERT(0 == get_faction_nbRoundWon(fac)); CU_ASSERT(NULL == get_faction_hand(fac)); CU_ASSERT(is_stack_empty(get_faction_deck(fac))); - CU_ASSERT(false == get_faction_hasMulligan(fac)); + CU_ASSERT(true == get_faction_hasMulligan(fac)); } /** @@ -67,24 +67,15 @@ void test_InitialisationPlateau(void){ // première faction CU_ASSERT(0 == get_faction_ptsDDRS(get_board_factions(brd)[0])); CU_ASSERT(0 == get_faction_nbRoundWon(get_board_factions(brd)[0])); - CU_ASSERT(NULL == get_faction_hand(get_board_factions(brd)[0])); - CU_ASSERT(is_stack_empty(get_faction_deck(get_board_factions(brd)[0]))); - CU_ASSERT(false == get_faction_hasMulligan(get_board_factions(brd)[0])); + CU_ASSERT(NULL != get_faction_hand(get_board_factions(brd)[0])); + CU_ASSERT(!is_stack_empty(get_faction_deck(get_board_factions(brd)[0]))); + CU_ASSERT(true == get_faction_hasMulligan(get_board_factions(brd)[0])); // première faction CU_ASSERT(0 == get_faction_ptsDDRS(get_board_factions(brd)[1])); CU_ASSERT(0 == get_faction_nbRoundWon(get_board_factions(brd)[1])); - CU_ASSERT(NULL == get_faction_hand(get_board_factions(brd)[1])); - CU_ASSERT(is_stack_empty(get_faction_deck(get_board_factions(brd)[1]))); - CU_ASSERT(false == get_faction_hasMulligan(get_board_factions(brd)[1])); -} - -/* The suite initialization function. - * Opens the temporary file used by the tests. - * Returns zero on success, non-zero otherwise. - */ -int init_suiteOrder(void) -{ - return 0; + CU_ASSERT(NULL != get_faction_hand(get_board_factions(brd)[1])); + CU_ASSERT(!is_stack_empty(get_faction_deck(get_board_factions(brd)[1]))); + CU_ASSERT(true == get_faction_hasMulligan(get_board_factions(brd)[1])); } /** @@ -166,41 +157,104 @@ void test_OrderByRound(void){ } +void test_ThirdRound(void){ + unsigned int lehmerSeed = clock(); + board new_board = create_new_board(&lehmerSeed); + + /* Test pour une faction qui a déjà gagné 2 round, expected -> false (partie terminé, pas de 3eme round) */ + set_faction_nbRoundWon(get_board_factions(new_board)[0], 2); + //CU_ASSERT(false == new_round(new_board, &lehmerSeed)); // @TODO new_round() Pose problème, segment fault + + /* Test pour une égalité entre les deux factions, expected -> true (partie pas terminé)*/ + set_faction_nbRoundWon(get_board_factions(new_board)[0], 1); + set_faction_nbRoundWon(get_board_factions(new_board)[1], 1); + //CU_ASSERT(true == new_round(new_board, &lehmerSeed)); // @TODO new_round() Pose problème, segment fault +} + +void test_GameWinner(void) { + unsigned int lehmerSeed = clock(); + board new_board = create_new_board(&lehmerSeed); + + set_faction_nbRoundWon(get_board_factions(new_board)[0], 2); + + faction* facs = get_board_factions(brd); + faction winner = NULL; + + bool result = get_faction_nbRoundWon(facs[0]) > get_faction_nbRoundWon(facs[1]); + switch(result) + { + case true: + winner = facs[0]; + break; + case false: + winner = facs[1]; + break; + default: + break; + } + CU_ASSERT(winner == facs[0]); +} + +/** + * \brief Test du démarrage du jeu déja effectué puisque le jeu démarre par l'initialisation du plateau et des factions, avec leur deck et leur main + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-05-02 + */ +void test_GameLaunch(void){ + CU_PASS("Démarrage du jeu correct puisque le jeu démarre par l'initialisation du plateau et des factions testés plus haut"); +} + +/** + * \brief Tests de fin du jeu fait au 3eme round, pour le 2eme round ils ont été fait plus haut + * \see test_OrderByRound + * \author Lucas Desrumeaux (lucas.desrumeaux@ensiie.fr) + * \date 2022-05-02 + */ +void test_GameEnd(void){ + unsigned int lehmerSeed = clock(); + board new_board = create_new_board(&lehmerSeed); + + /* Test fin du jeu au bout de la 3eme manche, p1 2 - 1 p2 */ + set_faction_nbRoundWon(get_board_factions(new_board)[0], 2); + set_faction_nbRoundWon(get_board_factions(new_board)[1], 1); + //CU_ASSERT(false == new_round(new_board, &lehmerSeed)); + + /* Test fin du jeu au bout de la 3eme manche, p1 1 - 2 p2 */ + set_faction_nbRoundWon(get_board_factions(new_board)[1], 1); + set_faction_nbRoundWon(get_board_factions(new_board)[0], 2); + //CU_ASSERT(false == new_round(new_board, &lehmerSeed)); + + /* Test de fin du jeu au bout de la deuxième manche fait dans test_OrderByRound */ + CU_PASS("Fin du jeu correct puisque le jeu se termine par new_round qui renvoie false testé plus haut pour le cas ou une faction a gagné les deux premières manches"); +} + + /* The main() function for setting up and running the tests. * Returns a CUE_SUCCESS on successful running, another * CUnit error code on failure. */ int main() { - CU_pSuite psuiteInitialisation = NULL; - CU_pSuite psuiteOrder = NULL; + CU_pSuite psuitePremierTest = NULL; /* initialize the CUnit test registry */ if (CUE_SUCCESS != CU_initialize_registry()) return CU_get_error(); /* add a suite to the registry */ - psuiteInitialisation = CU_add_suite("suiteInitialisation", init_suiteInitialisation, clean_suiteInitialisation); - if (NULL == psuiteInitialisation) { - CU_cleanup_registry(); - return CU_get_error(); - } - - psuiteOrder = CU_add_suite("suiteOrder", init_suiteOrder, NULL); - if (NULL == psuiteInitialisation) { + psuitePremierTest = CU_add_suite("suitePremierTest", init_suitePremierTest, clean_suitePremierTest); + if (NULL == psuitePremierTest) { CU_cleanup_registry(); return CU_get_error(); } /* add the tests to the suite */ - if ((NULL == CU_add_test(psuiteInitialisation, "test of faction initialisation after creation", test_InitialisationFaction)) || - (NULL == CU_add_test(psuiteInitialisation, "test of board initialisation after creation", test_InitialisationPlateau))) { - CU_cleanup_registry(); - return CU_get_error(); - } - - /* add the tests to the suite */ - if ((NULL == CU_add_test(psuiteOrder, "test order during rounds of the game", test_OrderByRound))){ + if ((NULL == CU_add_test(psuitePremierTest, "Test - Initialisation d'une faction", test_InitialisationFaction)) || + (NULL == CU_add_test(psuitePremierTest, "Test - Initialisation du plateau", test_InitialisationPlateau)) || + (NULL == CU_add_test(psuitePremierTest, "Test - Ordre aléatoire des factions à la première manche & Ordre déterministe des factions à la deuxième manche ", test_OrderByRound)) || + (NULL == CU_add_test(psuitePremierTest, "Test - Présence ou non d'une troisième manche", test_ThirdRound)) || + (NULL == CU_add_test(psuitePremierTest, "Test - Démarrage du jeu", test_GameLaunch)) || + (NULL == CU_add_test(psuitePremierTest, "Test - Fin du jeu", test_GameEnd))) { CU_cleanup_registry(); return CU_get_error(); } -- GitLab From e319d6df2b08632874741b02af0b99314e5b61c6 Mon Sep 17 00:00:00 2001 From: alphoenix <felicien.fiscus@ensiie.fr> Date: Mon, 2 May 2022 17:29:14 +0200 Subject: [PATCH 151/163] [B.3]fixing de bug provoquant un segfault dans plateau.c --- src/plateau.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/plateau.c b/src/plateau.c index d082eda..ead32a6 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -152,7 +152,7 @@ int new_round(board p, unsigned int* nLehmer) { int index = 0; card current = ((p->tabBoard[0]).cellCard); - while ((p->tabBoard[0]).state == Empty && index < BOARD_SIZE) /* On recherche la première carte du plateau */ + while ((p->tabBoard[0]).state == Empty && index < BOARD_SIZE*BOARD_SIZE) /* On recherche la première carte du plateau */ { index += 1; current = (p->tabBoard[index]).cellCard; @@ -3918,12 +3918,12 @@ card turn_over_card(board p, unsigned int* nLehmer) { card current = ((p->tabBoard[0]).cellCard); int index =0; - while ( ((p->tabBoard[index]).state == Empty || (p->tabBoard[index]).state == FaceUp) && index < BOARD_SIZE) /* S'arrête quand on tombe sur une carte FaceDown*/ + while ( ((p->tabBoard[index]).state == Empty || (p->tabBoard[index]).state == FaceUp) && index < BOARD_SIZE*BOARD_SIZE) /* S'arrête quand on tombe sur une carte FaceDown*/ { index += 1; current = (p->tabBoard[index]).cellCard; } - if (index == BOARD_SIZE) + if (index == BOARD_SIZE*BOARD_SIZE) { return NULL; } -- GitLab From 6b9604c59b48b8eab5ccbf4b15906010ad7a950c Mon Sep 17 00:00:00 2001 From: alphoenix <felicien.fiscus@ensiie.fr> Date: Mon, 2 May 2022 17:31:48 +0200 Subject: [PATCH 152/163] [B.3]fixing bug provoquant un segfault dans plateau.c --- src/plateau.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/plateau.c b/src/plateau.c index 831698a..98738d7 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -152,7 +152,7 @@ int new_round(board p, unsigned int* nLehmer) { int index = 0; card current = ((p->tabBoard[0]).cellCard); - while ((p->tabBoard[0]).state == Empty && index < BOARD_SIZE) /* On recherche la première carte du plateau */ + while ((p->tabBoard[0]).state == Empty && index < BOARD_SIZE*BOARD_SIZE) /* On recherche la première carte du plateau */ { index += 1; current = (p->tabBoard[index]).cellCard; @@ -3919,12 +3919,12 @@ card turn_over_card(board p, unsigned int* nLehmer) { card current = ((p->tabBoard[0]).cellCard); int index =0; - while ( ((p->tabBoard[index]).state == Empty || (p->tabBoard[index]).state == FaceUp) && index < BOARD_SIZE) /* S'arrête quand on tombe sur une carte FaceDown*/ + while ( ((p->tabBoard[index]).state == Empty || (p->tabBoard[index]).state == FaceUp) && index < BOARD_SIZE*BOARD_SIZE) /* S'arrête quand on tombe sur une carte FaceDown*/ { index += 1; current = (p->tabBoard[index]).cellCard; } - if (index == BOARD_SIZE) + if (index == BOARD_SIZE*BOARD_SIZE) { return NULL; } -- GitLab From 1e02938638093dbacc34e6b99fc1d41353561338 Mon Sep 17 00:00:00 2001 From: Martin Fond <martin.fond@ensiie.fr> Date: Mon, 2 May 2022 17:38:56 +0200 Subject: [PATCH 153/163] B.6 Precision commentaire plateau.h et fixing Board_size -> Board_size *Board_size --- headers/plateau.h | 2 +- src/plateau.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/headers/plateau.h b/headers/plateau.h index c9268b6..ecd6288 100644 --- a/headers/plateau.h +++ b/headers/plateau.h @@ -141,7 +141,7 @@ void free_board(board p); *\param p de type board *\brief Fonction permettant de réinitialiser le support de jeu pointé par p (sans faire de modification sur les factions) si la partie n'est pas terminée * et aumenter le nombre de victoires du gagnant - *\return un booléen indiquant si le jeu est terminé ou non + *\return un booléen indiquant si le jeu est terminé ou non (true si le jeu continue, false si il s'arrete) */ int new_round(board p, unsigned int* nLehmer); diff --git a/src/plateau.c b/src/plateau.c index 4dfed58..bf46fa2 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -158,7 +158,7 @@ int new_round(board p, unsigned int* nLehmer) index += 1; } - if (index < BOARD_SIZE) /* Si on se trouve toujours dans le plateau on enregistre la premiere carte du plateau */ + if (index < BOARD_SIZE * BOARD_SIZE) /* Si on se trouve toujours dans le plateau on enregistre la premiere carte du plateau */ { index += 1; current = get_cell_card(get_board_cell(p, index)); @@ -166,7 +166,7 @@ int new_round(board p, unsigned int* nLehmer) if (current == NULL) /* Si aucune carte n'est presente sur la plateau (ce qui ne doit pas arriver apres un round) on arrete la partie et on affiche une erreur*/ { printf("Erreur lors du compte des points (Egalite mais plateau vide)"); - return false; + //return false; } if (get_card_factionOwner(current) == 0) /* Si la carte appartient au premier joueur il gagne la manche */ { @@ -3930,7 +3930,7 @@ card turn_over_card(board p, unsigned int* nLehmer) { card current = ((p->tabBoard[0]).cellCard); int index =0; - while ( ((p->tabBoard[index]).state == Empty || (p->tabBoard[index]).state == FaceUp) && index < BOARD_SIZE) /* S'arrête quand on tombe sur une carte FaceDown*/ + while ( ((p->tabBoard[index]).state == Empty || (p->tabBoard[index]).state == FaceUp) && index < BOARD_SIZE * BOARD_SIZE) /* S'arrête quand on tombe sur une carte FaceDown*/ { index += 1; current = (p->tabBoard[index]).cellCard; -- GitLab From c6639cd398d6e5b981eb5cad4a8fc35b84d5a5ad Mon Sep 17 00:00:00 2001 From: Martin Fond <martin.fond@ensiie.fr> Date: Mon, 2 May 2022 17:55:15 +0200 Subject: [PATCH 154/163] B.6 Validation fixing new_round --- src/plateau.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plateau.c b/src/plateau.c index 4924ad8..756ddc9 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -166,7 +166,7 @@ int new_round(board p, unsigned int* nLehmer) if (current == NULL) /* Si aucune carte n'est presente sur la plateau (ce qui ne doit pas arriver apres un round) on arrete la partie et on affiche une erreur*/ { printf("Erreur lors du compte des points (Egalite mais plateau vide)"); - //return false; + return false; } if (get_card_factionOwner(current) == 0) /* Si la carte appartient au premier joueur il gagne la manche */ { -- GitLab From 3d8f7f5ebc52b178d2aad79f6a73d7c4291e750d Mon Sep 17 00:00:00 2001 From: alphoenix <felicien.fiscus@ensiie.fr> Date: Mon, 2 May 2022 18:16:27 +0200 Subject: [PATCH 155/163] [B.3]fixing des derniers bugs causant un segfault dans free_stack --- src/structure.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/structure.c b/src/structure.c index 88393cf..7148299 100644 --- a/src/structure.c +++ b/src/structure.c @@ -283,7 +283,7 @@ Stack empty_stack() bool is_stack_empty(Stack stck) { - return stck->fSize == 0; + return stck->fSize <= 0; } @@ -308,7 +308,15 @@ card pop(Stack stck) card hd = head(stck); stck->fStack[(--stck->fSize)] = NULL; - stck->fTop = stck->fStack[stck->fSize - 1]; + if(!is_stack_empty(stck)) + { + stck->fTop = stck->fStack[stck->fSize - 1]; + } + else + { + stck->fTop = stck->fStack[stck->fSize]; + + } return hd; @@ -347,11 +355,15 @@ void shuffle_stack(Stack stck, unsigned int* nLehmer) void free_stack(Stack stck) { + int i = 0; + int s = stack_size(stck); while(!is_stack_empty(stck)) { card hd = pop(stck); if(hd) free(hd); + printf("debug002 %i/%i\n", ++i, s); + fflush(stdout); } free(stck); -- GitLab From 1e5a0eb05c7984ffb00e75d2533b4c8ec81699e5 Mon Sep 17 00:00:00 2001 From: Martin Fond <martin.fond@ensiie.fr> Date: Mon, 2 May 2022 18:27:15 +0200 Subject: [PATCH 156/163] B.6 Ajout d'un BOARD_SIZE --- src/plateau.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plateau.c b/src/plateau.c index 756ddc9..a72b170 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -153,7 +153,7 @@ int new_round(board p, unsigned int* nLehmer) int index = 0; card current = get_cell_card(get_board_cell(p, 0)); - while ((get_cell_state(get_board_cell(p, index))) == Empty && index < BOARD_SIZE) /* On recherche la première carte du plateau */ + while ((get_cell_state(get_board_cell(p, index))) == Empty && index < BOARD_SIZE * BOARD_SIZE) /* On recherche la première carte du plateau */ { index += 1; } -- GitLab From 9e2684d9f1f2eeee7c259526e64681f4d5ce02b6 Mon Sep 17 00:00:00 2001 From: Lucas Desrumeaux <lucas@carjager.com> Date: Mon, 2 May 2022 20:04:06 +0200 Subject: [PATCH 157/163] [B.2] Tests pour le vainqueur du jeu, vainqueur d'une manche, et rectification 3eme round --- test/src/mainTest.c | 94 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 74 insertions(+), 20 deletions(-) diff --git a/test/src/mainTest.c b/test/src/mainTest.c index d29b683..a85b038 100644 --- a/test/src/mainTest.c +++ b/test/src/mainTest.c @@ -159,23 +159,75 @@ void test_OrderByRound(void){ void test_ThirdRound(void){ unsigned int lehmerSeed = clock(); - board new_board = create_new_board(&lehmerSeed); - - /* Test pour une faction qui a déjà gagné 2 round, expected -> false (partie terminé, pas de 3eme round) */ - set_faction_nbRoundWon(get_board_factions(new_board)[0], 2); - //CU_ASSERT(false == new_round(new_board, &lehmerSeed)); // @TODO new_round() Pose problème, segment fault + brd = create_new_board(&lehmerSeed); + + /* Test pour manche 0 - 0 entre les deux factions et 12 - 22, expected -> true (partie n'est pas terminé, manches 0 - 1)*/ + set_faction_nbRoundWon(get_board_factions(brd)[0], 0); + set_faction_ptsDDRS(get_board_factions(brd)[0], 12); + set_faction_nbRoundWon(get_board_factions(brd)[1], 0); + set_faction_ptsDDRS(get_board_factions(brd)[1], 22); + CU_ASSERT(true == new_round(brd, &lehmerSeed)); + + /* Test pour manche 0 - 1 entre les deux factions et 22 - 12, expected -> true (partie n'est pas terminé, manches 1 - 1)*/ + set_faction_nbRoundWon(get_board_factions(brd)[0], 0); + set_faction_ptsDDRS(get_board_factions(brd)[0], 22); + set_faction_nbRoundWon(get_board_factions(brd)[1], 1); + set_faction_ptsDDRS(get_board_factions(brd)[1], 12); + CU_ASSERT(true == new_round(brd, &lehmerSeed)); + + /* Test pour manche 0 - 1 entre les deux factions et 12 - 22, expected -> false (partie terminé, p2 a gagné)*/ + set_faction_nbRoundWon(get_board_factions(brd)[0], 0); + set_faction_ptsDDRS(get_board_factions(brd)[0], 12); + set_faction_nbRoundWon(get_board_factions(brd)[1], 1); + set_faction_ptsDDRS(get_board_factions(brd)[1], 22); + CU_ASSERT(false == new_round(brd, &lehmerSeed)); + + /* Test pour une égalité de manche 1 - 1 entre les deux factions et 12 - 22, expected -> false (partie terminé, p2 a gagné)*/ + set_faction_nbRoundWon(get_board_factions(brd)[0], 1); + set_faction_ptsDDRS(get_board_factions(brd)[0], 12); + set_faction_nbRoundWon(get_board_factions(brd)[1], 1); + set_faction_ptsDDRS(get_board_factions(brd)[1], 22); + CU_ASSERT(false == new_round(brd, &lehmerSeed)); + + /* Test pour une faction qui a déjà gagné 2 round, expected -> false (partie terminé, pas de 3eme round) */ + set_faction_nbRoundWon(get_board_factions(brd)[0], 2); + CU_ASSERT(false == new_round(brd, &lehmerSeed)); +} - /* Test pour une égalité entre les deux factions, expected -> true (partie pas terminé)*/ - set_faction_nbRoundWon(get_board_factions(new_board)[0], 1); - set_faction_nbRoundWon(get_board_factions(new_board)[1], 1); - //CU_ASSERT(true == new_round(new_board, &lehmerSeed)); // @TODO new_round() Pose problème, segment fault +void test_RoundWinner(void){ + unsigned int lehmerSeed = clock(); + brd = create_new_board(&lehmerSeed); + + /* Test entre deux factions 12 - 22, expected -> manche 0 - 1 */ + set_faction_nbRoundWon(get_board_factions(brd)[0], 0); + set_faction_ptsDDRS(get_board_factions(brd)[0], 12); + set_faction_nbRoundWon(get_board_factions(brd)[1], 0); + set_faction_ptsDDRS(get_board_factions(brd)[1], 22); + new_round(brd, &lehmerSeed); + CU_ASSERT(0 == get_faction_nbRoundWon(get_board_factions(brd)[0]) && 1 == get_faction_nbRoundWon(get_board_factions(brd)[1])); + + /* Test entre deux deux factions 22 - 12, expected -> manche 1 - 0 */ + set_faction_nbRoundWon(get_board_factions(brd)[0], 0); + set_faction_ptsDDRS(get_board_factions(brd)[0], 22); + set_faction_nbRoundWon(get_board_factions(brd)[1], 0); + set_faction_ptsDDRS(get_board_factions(brd)[1], 12); + new_round(brd, &lehmerSeed); + CU_ASSERT(1 == get_faction_nbRoundWon(get_board_factions(brd)[0]) && 0 == get_faction_nbRoundWon(get_board_factions(brd)[1])); + + /* Test entre deux factions 11 - 11 et la 1ere carte la plus en haut à gauche est a la faction 0 (p1), expected -> manche 1 - 0 */ + set_faction_nbRoundWon(get_board_factions(brd)[0], 0); + set_faction_ptsDDRS(get_board_factions(brd)[0], 11); + set_faction_nbRoundWon(get_board_factions(brd)[1], 0); + set_faction_ptsDDRS(get_board_factions(brd)[1], 11); + put_card(brd, get_first(get_faction_hand(get_board_factions(brd)[0])), 0); + new_round(brd, &lehmerSeed); + CU_ASSERT(1 == get_faction_nbRoundWon(get_board_factions(brd)[0]) && 0 == get_faction_nbRoundWon(get_board_factions(brd)[1])); } void test_GameWinner(void) { - unsigned int lehmerSeed = clock(); - board new_board = create_new_board(&lehmerSeed); - set_faction_nbRoundWon(get_board_factions(new_board)[0], 2); + set_faction_nbRoundWon(get_board_factions(brd)[0], 2); + set_faction_nbRoundWon(get_board_factions(brd)[1], 0); faction* facs = get_board_factions(brd); faction winner = NULL; @@ -217,12 +269,12 @@ void test_GameEnd(void){ /* Test fin du jeu au bout de la 3eme manche, p1 2 - 1 p2 */ set_faction_nbRoundWon(get_board_factions(new_board)[0], 2); set_faction_nbRoundWon(get_board_factions(new_board)[1], 1); - //CU_ASSERT(false == new_round(new_board, &lehmerSeed)); + CU_ASSERT(false == new_round(new_board, &lehmerSeed)); /* Test fin du jeu au bout de la 3eme manche, p1 1 - 2 p2 */ set_faction_nbRoundWon(get_board_factions(new_board)[1], 1); set_faction_nbRoundWon(get_board_factions(new_board)[0], 2); - //CU_ASSERT(false == new_round(new_board, &lehmerSeed)); + CU_ASSERT(false == new_round(new_board, &lehmerSeed)); /* Test de fin du jeu au bout de la deuxième manche fait dans test_OrderByRound */ CU_PASS("Fin du jeu correct puisque le jeu se termine par new_round qui renvoie false testé plus haut pour le cas ou une faction a gagné les deux premières manches"); @@ -249,12 +301,14 @@ int main() } /* add the tests to the suite */ - if ((NULL == CU_add_test(psuitePremierTest, "Test - Initialisation d'une faction", test_InitialisationFaction)) || - (NULL == CU_add_test(psuitePremierTest, "Test - Initialisation du plateau", test_InitialisationPlateau)) || - (NULL == CU_add_test(psuitePremierTest, "Test - Ordre aléatoire des factions à la première manche & Ordre déterministe des factions à la deuxième manche ", test_OrderByRound)) || - (NULL == CU_add_test(psuitePremierTest, "Test - Présence ou non d'une troisième manche", test_ThirdRound)) || - (NULL == CU_add_test(psuitePremierTest, "Test - Démarrage du jeu", test_GameLaunch)) || - (NULL == CU_add_test(psuitePremierTest, "Test - Fin du jeu", test_GameEnd))) { + if ((NULL == CU_add_test(psuitePremierTest, "Initialisation d'une faction", test_InitialisationFaction)) || + (NULL == CU_add_test(psuitePremierTest, "Initialisation du plateau", test_InitialisationPlateau)) || + (NULL == CU_add_test(psuitePremierTest, "Ordre aléatoire des factions à la première manche & Ordre déterministe des factions à la deuxième manche ", test_OrderByRound)) || + (NULL == CU_add_test(psuitePremierTest, "Présence ou non d'une troisième manche", test_ThirdRound)) || + (NULL == CU_add_test(psuitePremierTest, "Vainqueur d'une manche", test_RoundWinner)) || + (NULL == CU_add_test(psuitePremierTest, "Vainqueur du jeu", test_GameWinner)) || + (NULL == CU_add_test(psuitePremierTest, "Démarrage du jeu", test_GameLaunch)) || + (NULL == CU_add_test(psuitePremierTest, "Fin du jeu", test_GameEnd))) { CU_cleanup_registry(); return CU_get_error(); } -- GitLab From be6f3f7d88cb5b5751ccb2e889659e81bd479fcd Mon Sep 17 00:00:00 2001 From: alphoenix <felicien.fiscus@ensiie.fr> Date: Mon, 2 May 2022 20:12:49 +0200 Subject: [PATCH 158/163] [B.3]fixe d'un bug causant un segfault dans plateau.c --- src/plateau.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/plateau.c b/src/plateau.c index a72b170..66fc2de 100644 --- a/src/plateau.c +++ b/src/plateau.c @@ -154,11 +154,6 @@ int new_round(board p, unsigned int* nLehmer) card current = get_cell_card(get_board_cell(p, 0)); while ((get_cell_state(get_board_cell(p, index))) == Empty && index < BOARD_SIZE * BOARD_SIZE) /* On recherche la première carte du plateau */ - { - index += 1; - } - - if (index < BOARD_SIZE * BOARD_SIZE) /* Si on se trouve toujours dans le plateau on enregistre la premiere carte du plateau */ { index += 1; current = get_cell_card(get_board_cell(p, index)); -- GitLab From a69ab873ef541d0056134ed7aa4b3fb17310b279 Mon Sep 17 00:00:00 2001 From: alphoenix <felicien.fiscus@ensiie.fr> Date: Mon, 2 May 2022 20:30:21 +0200 Subject: [PATCH 159/163] [B.8]ajout de commentaires --- src/interface.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/interface.c b/src/interface.c index 7a73b0b..76f26cc 100644 --- a/src/interface.c +++ b/src/interface.c @@ -140,6 +140,10 @@ int where_to_place_card(board brd, faction fac, card crd) { return BOARD_SIZE / 2 + (BOARD_SIZE / 2) * BOARD_SIZE; } + /*ici il y a un risque de segfault si l'utilisateur rentre des coordonnées correspondant aux bords du plateau + puisque ça va checker pour des cellules en dehors du plateau qui n'existe donc pas. Cependant, je considère que ça n'apporte + pas grand chose pour fixer ce bug puisque au LotC il n'y aura plus interface.c/.h et je le règlerais donc ce problème dans le LotC + et c'est beaucoup d'effort pour tester tout les effets de bords*/ else if((get_board_tabBoard(brd)[x + (y-1)*BOARD_SIZE].state != Empty || get_board_tabBoard(brd)[x-1 + (y-2)*BOARD_SIZE].state != Empty || get_board_tabBoard(brd)[x-1 + y*BOARD_SIZE].state != Empty -- GitLab From b9a05b1e602ed0705ca5ed70c0109ae5e4e630da Mon Sep 17 00:00:00 2001 From: Lucas Desrumeaux <lucas@carjager.com> Date: Mon, 2 May 2022 20:33:18 +0200 Subject: [PATCH 160/163] [B.2] Tests pour effets de cartes, placement des cartes sur l'espace 2D --- test/src/mainTest.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/test/src/mainTest.c b/test/src/mainTest.c index a85b038..4f0fa74 100644 --- a/test/src/mainTest.c +++ b/test/src/mainTest.c @@ -194,6 +194,33 @@ void test_ThirdRound(void){ CU_ASSERT(false == new_round(brd, &lehmerSeed)); } +void test_RedrawOption(void){ + +} + +void test_putCard(void){ + +} + +void test_PlacementCard(void) { + unsigned int lehmerSeed = clock(); + brd = create_new_board(&lehmerSeed); + + card c = build_card(FISE, 4, "La faction qui a posé cette carte gagne 1 point DDRS", 0); + put_card(brd, c, 0); + CU_ASSERT(c == get_cell_card(get_board_cell(brd, 0))); +} + +void test_CardEffects(void){ + unsigned int lehmerSeed = clock(); + brd = create_new_board(&lehmerSeed); + + card c = build_card(FISE, 4, "La faction qui a posé cette carte gagne 1 point DDRS", 0); + put_card(brd, c, 0); + turn_over_card(brd, &lehmerSeed); + CU_ASSERT(1 == get_faction_ptsDDRS(get_board_factions(brd)[0])); +} + void test_RoundWinner(void){ unsigned int lehmerSeed = clock(); brd = create_new_board(&lehmerSeed); @@ -305,6 +332,8 @@ int main() (NULL == CU_add_test(psuitePremierTest, "Initialisation du plateau", test_InitialisationPlateau)) || (NULL == CU_add_test(psuitePremierTest, "Ordre aléatoire des factions à la première manche & Ordre déterministe des factions à la deuxième manche ", test_OrderByRound)) || (NULL == CU_add_test(psuitePremierTest, "Présence ou non d'une troisième manche", test_ThirdRound)) || + (NULL == CU_add_test(psuitePremierTest, "Placement des cartes sur l'espace 2D", test_PlacementCard)) || + (NULL == CU_add_test(psuitePremierTest, "Effet des cartes FISE", test_CardEffects)) || (NULL == CU_add_test(psuitePremierTest, "Vainqueur d'une manche", test_RoundWinner)) || (NULL == CU_add_test(psuitePremierTest, "Vainqueur du jeu", test_GameWinner)) || (NULL == CU_add_test(psuitePremierTest, "Démarrage du jeu", test_GameLaunch)) || -- GitLab From 99152b68acf261f77e165aef961b875cce854442 Mon Sep 17 00:00:00 2001 From: alphoenix <felicien.fiscus@ensiie.fr> Date: Mon, 2 May 2022 20:37:59 +0200 Subject: [PATCH 161/163] [B.3]enlevement de commentaires inutiles --- src/structure.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/structure.c b/src/structure.c index 7148299..fdccd46 100644 --- a/src/structure.c +++ b/src/structure.c @@ -362,8 +362,6 @@ void free_stack(Stack stck) card hd = pop(stck); if(hd) free(hd); - printf("debug002 %i/%i\n", ++i, s); - fflush(stdout); } free(stck); -- GitLab From d1de4499b6b370ea0a0eb7a7405587f456f365ee Mon Sep 17 00:00:00 2001 From: alphoenix <felicien.fiscus@ensiie.fr> Date: Mon, 2 May 2022 20:41:26 +0200 Subject: [PATCH 162/163] [B.3]fix finale de petites erreurs --- src/structure.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/structure.c b/src/structure.c index fdccd46..236794d 100644 --- a/src/structure.c +++ b/src/structure.c @@ -355,8 +355,6 @@ void shuffle_stack(Stack stck, unsigned int* nLehmer) void free_stack(Stack stck) { - int i = 0; - int s = stack_size(stck); while(!is_stack_empty(stck)) { card hd = pop(stck); -- GitLab From 0f32fb6938d6d64a02f8ba047b4a6b6461a2c0fe Mon Sep 17 00:00:00 2001 From: Lucas Desrumeaux <lucas@carjager.com> Date: Mon, 2 May 2022 20:59:14 +0200 Subject: [PATCH 163/163] [B.2] Tests pour poser une carte et l'option de repiocher --- test/src/mainTest.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/test/src/mainTest.c b/test/src/mainTest.c index 4f0fa74..1561839 100644 --- a/test/src/mainTest.c +++ b/test/src/mainTest.c @@ -33,7 +33,7 @@ int init_suitePremierTest(void) */ int clean_suitePremierTest(void){ delete_faction(fac); - //free_board(brd); // @ free_board() pose problème, il provoque un segment fault + //free_board(brd); // @ free_board() pose problème, il provoque un double free return 0; } @@ -195,11 +195,23 @@ void test_ThirdRound(void){ } void test_RedrawOption(void){ + unsigned int lehmerSeed = clock(); + brd = create_new_board(&lehmerSeed); + /* La faction 0 décide de changer sa main, et elle ne la pas déjà fait */ + CList hand = get_faction_hand(get_board_factions(brd)[0]); + declare_mulligan(get_board_factions(brd)[0], &lehmerSeed); + CU_ASSERT(hand != get_faction_hand(get_board_factions(brd)[0])); + CU_ASSERT(false == get_faction_hasMulligan(get_board_factions(brd)[0])); } void test_putCard(void){ + unsigned int lehmerSeed = clock(); + brd = create_new_board(&lehmerSeed); + card c = build_card(FISE, 4, "La faction qui a posé cette carte gagne 1 point DDRS", 0); + put_card(brd, c, 0); + CU_ASSERT(c == get_cell_card(get_board_cell(brd, 0))); } void test_PlacementCard(void) { @@ -332,6 +344,7 @@ int main() (NULL == CU_add_test(psuitePremierTest, "Initialisation du plateau", test_InitialisationPlateau)) || (NULL == CU_add_test(psuitePremierTest, "Ordre aléatoire des factions à la première manche & Ordre déterministe des factions à la deuxième manche ", test_OrderByRound)) || (NULL == CU_add_test(psuitePremierTest, "Présence ou non d'une troisième manche", test_ThirdRound)) || + (NULL == CU_add_test(psuitePremierTest, "Option pour repiocher", test_RedrawOption)) || (NULL == CU_add_test(psuitePremierTest, "Placement des cartes sur l'espace 2D", test_PlacementCard)) || (NULL == CU_add_test(psuitePremierTest, "Effet des cartes FISE", test_CardEffects)) || (NULL == CU_add_test(psuitePremierTest, "Vainqueur d'une manche", test_RoundWinner)) || -- GitLab