diff --git a/Jeu.cflags b/Jeu.cflags new file mode 100644 index 0000000..68d5165 --- /dev/null +++ b/Jeu.cflags @@ -0,0 +1 @@ +-std=c17 \ No newline at end of file diff --git a/Jeu.config b/Jeu.config new file mode 100644 index 0000000..e0284f4 --- /dev/null +++ b/Jeu.config @@ -0,0 +1,2 @@ +// Add predefined macros for your project here. For example: +// #define THE_ANSWER 42 diff --git a/Jeu.creator b/Jeu.creator new file mode 100644 index 0000000..e94cbbd --- /dev/null +++ b/Jeu.creator @@ -0,0 +1 @@ +[General] diff --git a/Jeu.cxxflags b/Jeu.cxxflags new file mode 100644 index 0000000..c68f095 --- /dev/null +++ b/Jeu.cxxflags @@ -0,0 +1 @@ +-std=c99 diff --git a/Jeu.files b/Jeu.files new file mode 100644 index 0000000..6938f4b --- /dev/null +++ b/Jeu.files @@ -0,0 +1,33 @@ +affiche.c +affiche.h +alea.c +alea.h +alea2.c +alea2.h +aleatoire.c +aleatoire.h +init.c +init.h +jeu.c +joueur1_VS_joueur_glouton.c +joueur1_VS_joueur_glouton.h +joueur2_VS_joueur_glouton_prevoyant.c +joueur2_VS_joueur_glouton_prevoyant.h +joueur_1.c +joueur_1.h +joueur_2.c +joueur_2.h +joueur_contre_joueur.c +joueur_contre_joueur.h +joueur_contre_ordinateur.c +joueur_contre_ordinateur.h +joueur_glouton.c +joueur_glouton.h +joueur_glouton_prevoyant.c +joueur_glouton_prevoyant.h +loi_du_plus_fort.c +loi_du_plus_fort.h +loi_du_plus_fort2.c +loi_du_plus_fort2.h +ordinateur.c +ordinateur.h diff --git a/Jeu.includes b/Jeu.includes new file mode 100644 index 0000000..9c558e3 --- /dev/null +++ b/Jeu.includes @@ -0,0 +1 @@ +. diff --git a/affiche.c b/affiche.c index 53be113..659ccf5 100644 --- a/affiche.c +++ b/affiche.c @@ -1,13 +1,25 @@ # include #include +/// Fonction qui retourne un char* +char* convertis(int valeurEncodageInterne) +{ + char* correspondance[9]; + correspondance[0] = "A"; /// "blueAblack"; + correspondance[1] = "B"; /// "redBblack"; + /// ... + correspondance[8] = "&"; /// "white@black"; + + return correspondance[valeurEncodageInterne]; +} + void affiche(char mondeCarre[30][30], int dim) { for(int i =0; i < dim; i++) { for(int j=0; j < dim; j++) { - printf("\033[44m %c ", mondeCarre[i][j]); + printf("\033[44m %c ", convertis( mondeCarre[i][j] ) ); } printf("\n"); } diff --git a/alea.c b/alea.c index b4346a2..e65617e 100644 --- a/alea.c +++ b/alea.c @@ -2,7 +2,7 @@ #include #include -char alea (char mondeCarre[30][30], int dim) +char alea (/*char mondeCarre[30][30], int dim*/) { /* Cette fonction permet de choisir de manière aléatoire l'une des 7 couleurs comprises entre A et G diff --git a/alea2.c b/alea2.c index f0d8331..a964670 100644 --- a/alea2.c +++ b/alea2.c @@ -8,130 +8,109 @@ Cette fonction joue un joueur artificiel en choisissant à chaque tour une couleur aléatoirement mais parmi les couleurs qui peuvent ajouter des cases à sa zone. */ -void alea2 (char mondeCarre[30][30], int dim , float cpt) + +char testcase(char mondeCarre[30][30], int i, int j, char symbol) +{ + if ( (j+1 <= 29 && mondeCarre[i][j+1] == symbol ) + || (j-1 >= 0 && mondeCarre[i][j-1] == symbol) + || (i+1 <= 29 && mondeCarre[i+1][j] == symbol ) + || (i-1 >= 0 && mondeCarre[i-1][j] == symbol) ) + return symbol; + return 100; +} + +/// +/// partie affichage: printf("joueur_alea = %c \n", joueur_alea); +/// partie calcul: score = alea2(mondeCarre, 30, '@') +/// partie affichage: printf("score_joueur_alea = %f\n", score); +/// si on te demande faire une version graphique... +/// => refait que la partie affichage. +int alea2 (char mondeCarre[30][30], int dim , char joueur_alea) { - char joueur_alea ; char couleur_aleatoire; - joueur_alea = '@' ; - printf("joueur_alea = %c \n", joueur_alea); + + /// ? bizzare ça m'intrigue. + /// taille de 1000... remplis avec 8 valeurs ? char tab[1000] = {0,0,0,0,0,0,0,0}; // On initialise un tableau dans lequel on stoque les couleurs qui qui peuvent ajouter des cases à la zone du joueur + + /// memset(tab, 1000, 0); int o = 0; - for (int i =0; i<30; i++) + + /// Valeur codée en dur, n'utilise pas dim. + for (int i =0; i<30; i++) + { + /// Valeur codée en dur, n'utilise pas dim. + for (int j = 0; j<30; j++) + { + /// Le joueur est il à un ou plusieur endroit ?... + /// Joueur ne peut être qu'à un seule ndroit à la fois (un seul @ sur tout la grille pendant la partie) + /// => tab[8] (on comprend pas tab[1000]... mais on comprend mieux {0,0,0,0,0,0}) + /// => il faut un break pour sortir dès qu'on l'a trouvé + /// Joueur peut être à plusieurs endroits (plusieur @ dans toute la grille) + /// => tab[1000] le calcul de la dimmension va pas être facile... + /// => il faut que tu document ton code pour expliquer comment tu as calculé la taille max + /// => nombre de case: dim * dim => tab[1000] <--> tab[dim*dim]. + /// => tab[ taille( nombre(@) ) ) ? + if ( mondeCarre[i][j] == joueur_alea ) + { + char retcode = testcase(mondeCarre, i, j, joueur_alea); + if(retcode != 100) + tab[o++] = retcode; + } + } + } + + srand(time(NULL)); + + /// Ceci est un commentaire + //ceci est un code commenté (c'est mal de laisser ça sur le dépot => github) + int a = 0; + a = (rand() % (o - 0 )) + 0; + couleur_aleatoire = tab[a]; + printf("***** = %d\n ", a); + printf("Le joueur aleatoire a joue %c\n",couleur_aleatoire); + + bool changed = true; + while (changed == true ) + { + changed = false; + for (int i =0; i<30; i++) + { + for (int j =0; j<30; j++) + { + if ( mondeCarre[i][j] == joueur_alea) + { + if ( j+1 <= 29 && mondeCarre[i][j+1] == couleur_aleatoire) { - for (int j = 0; j<30; j++) - { - if ( mondeCarre[i][j] == joueur_alea ) - { - if ( (j+1 <= 29 && mondeCarre[i][j+1] == 'A' ) || (j-1 >= 0 && mondeCarre[i][j-1] == 'A') || (i+1 <= 29 && mondeCarre[i+1][j] == 'A' ) || (i-1 >= 0 && mondeCarre[i-1][j] == 'A') ) - { - tab[o] = 'A'; - o ++; - } - if ( (j+1 <= 29 && mondeCarre[i][j+1] == 'B' ) || (j-1 >= 0 && mondeCarre[i][j-1] == 'B') || (i+1 <= 29 && mondeCarre[i+1][j] == 'B' ) || (i-1 >= 0 && mondeCarre[i-1][j] == 'B') ) - { - tab[o] = 'B' ; - o ++; - } - if ( (j+1 <= 29 && mondeCarre[i][j+1] == 'C' ) || (j-1 >= 0 && mondeCarre[i][j-1] == 'C') || (i+1 <= 29 && mondeCarre[i+1][j] == 'C' ) || (i-1 >= 0 && mondeCarre[i-1][j] == 'C') ) - { - tab[o] = 'C' ; - o ++; - } - if ( (j+1 <= 29 && mondeCarre[i][j+1] == 'D' ) || (j-1 >= 0 && mondeCarre[i][j-1] == 'D') || (i+1 <= 29 && mondeCarre[i+1][j] == 'D' ) || (i-1 >= 0 && mondeCarre[i-1][j] == 'D') ) - { - tab[o] = 'D' ; - o ++; - } - if ( (j+1 <= 29 && mondeCarre[i][j+1] == 'E' ) || (j-1 >= 0 && mondeCarre[i][j-1] == 'E') || (i+1 <= 29 && mondeCarre[i+1][j] == 'E' ) || (i-1 >= 0 && mondeCarre[i-1][j] == 'E') ) - { - tab[o] = 'E'; - o ++; - - } - if ( (j+1 <= 29 && mondeCarre[i][j+1] == 'F' ) || (j-1 >= 0 && mondeCarre[i][j-1] == 'F') || (i+1 <= 29 && mondeCarre[i+1][j] == 'F' ) || (i-1 >= 0 && mondeCarre[i-1][j] == 'F') ) - { - tab[o] = 'F'; - o ++; - } - if ( (j+1 <= 29 && mondeCarre[i][j+1] == 'G' ) || (j-1 >= 0 && mondeCarre[i][j-1] == 'G') || (i+1 <= 29 && mondeCarre[i+1][j] == 'G' ) || (i-1 >= 0 && mondeCarre[i-1][j] == 'G') ) - { - tab[o] = 'G'; - o ++; - } - - } - - - - - } + mondeCarre[i][j+1] = joueur_alea; + changed = changed | true; } - - - srand(time(NULL)); - //couleur_aleatoire =tab[rand()%o]; // Cette fonction permet choisir aléatoirement une des couleurs qui se trouvent dans la zone du joueur - int a = 0; - a = (rand() % (o - 0 )) + 0; - couleur_aleatoire = tab[a]; - printf("***** = %d\n ", a); - // printf("\n"); - printf("Le joueur aleatoire a joue %c\n",couleur_aleatoire); - - - bool changed = true; - //while (getchar()!='\n'); - while (changed == true ) - { - changed = false; - for (int i =0; i<30; i++) + if ( j-1 >= 0 && mondeCarre[i][j-1] == couleur_aleatoire) + { + mondeCarre[i][j-1] = joueur_alea; + changed = changed | true; + + } + if (i-1 >= 0 && mondeCarre[i-1][j] == couleur_aleatoire) { - for (int j =0; j<30; j++) - { - if ( mondeCarre[i][j] == joueur_alea) - { - if ( j+1 <= 29 && mondeCarre[i][j+1] == couleur_aleatoire) - { - mondeCarre[i][j+1] = joueur_alea; - changed = changed | true; + mondeCarre[i-1][j] = joueur_alea; + changed = changed | true; - } - if ( j-1 >= 0 && mondeCarre[i][j-1] == couleur_aleatoire) - { - mondeCarre[i][j-1] = joueur_alea; - changed = changed | true; - - } - if (i-1 >= 0 && mondeCarre[i-1][j] == couleur_aleatoire) - { - mondeCarre[i-1][j] = joueur_alea; - changed = changed | true; - - } - if (i+1 <= 29 && mondeCarre[i+1][j] ==couleur_aleatoire) - { - mondeCarre[i+1][j] = joueur_alea; - changed = changed | true; - - } - else - { - changed = false; - - } - - - - } - } - - } + if (i+1 <= 29 && mondeCarre[i+1][j] ==couleur_aleatoire) + { + mondeCarre[i+1][j] = joueur_alea; + changed = changed | true; + } + else + { + changed = false; + } + } } - - - + } + } - float score_joueur_alea = 0; int i,j; for (i=0;i nom pas informatif... il vaut mieux que le nom indique la fonction +/// il manque cpt ! void alea2 (char mondeCarre[30][30], int dim); diff --git a/aleatoire.c b/aleatoire.c index cf90596..2d45418 100644 --- a/aleatoire.c +++ b/aleatoire.c @@ -1,23 +1,26 @@ -# include +#include #include #include - +/// mondeCarre => 7... byte: +/// - choix d'encodage interne [0..7] != choix d'affichage [0 => 'a', 7=>'z'] void aleatoire(char mondeCarre[30][30], int dim) { - const char max = 072; - const char min = 0101; + /// Ce code il est buggué... il ne remplis pas le tableau avec les caractères aléatoire + /// que tu veux: de A à G + //const char max = 072; ///< 072 ? (décimal) 'G' + //const char min = 0101; ///< 0101 ? (octale) 'A' srand(time(NULL)); for (int i =0; i #include -void init(char mondeCarre[30][30], int dim) +/// Avec un valeur spécifiable par l'utilisateur. +/// init(monde, 30, 1) +/// void init(char mondeCarre[30][30], int dim) => dim = 35 => crash mondeCarre[30][30] + +/// void init(char** mondeCarre, int dim) => on laisse la dimmension au choix +/// void init(char mondeCarre[30][30]) => pas besoin de dimenssion qui contient 30. + +/// #define DIM 30 => dim, 30 => DIM. +/// void init(char mondeCarre[DIM][DIM]) => pas besoin de dimenssion qui contient 30. +void init(char mondeCarre[30][30], int dim, int defaultValue) { for (int i =0; i qtcreator, visual studio code, sublime, atom avec les plugins. +/// Toujours avoir un code formaté => alignement... +/// dans les étuditeur "formatter le document" ou utiliser un outil extern astyle #include #include #include @@ -16,82 +19,82 @@ #include "joueur1_VS_joueur_glouton.h" #include "joueur2_VS_joueur_glouton_prevoyant.h" - int main() { - FILE* fichier = NULL; - fichier = fopen("jeu.o", "r+"); - if (fichier != NULL) - { - - const int dim = 30; + /// Laisse entendre qu'on peu changer la taille de la grille mais à cause des signatures de fonction et + /// autres variables codée en dur '30' le programme ne marchera pas si on changait ça. + /// => soit passer toutes les dimmension à une valeur fixe à la compilation + /// *) la valeur 30 partout + /// *) une macro DIM partout...et + /// => soit passer toutes les dimmensions à l'éxécution (ça veut dire virer tous les 30 partout) + const int dim = 30; char mondeCarre[dim][dim] ; + + /// initialize init(mondeCarre, dim); + + /// remplis avec valeur aléatoires aleatoire(mondeCarre, dim); - - printf("\n\n \033[44m Bonjour !!! Bienvenue dans le merveilleux monde des 7 couleurs\n" - " *****************************************************************\n\n" - ); - - -printf(" \t \t =================================MENU=======================================: \n"); -printf("\n"); - - int choixDeLaPartie; - - printf("\t \t ################# 1.joueur_contre_joueur ########### \n"); - printf("\t \t ################# 2.joueur_contre_ordinateur ########### \n"); - printf("\t \t ################# 3.joueur1_contre_joueur_glouton ########### \n"); - printf("\t \t ################# 4.joueur2_contre_joueur_glouton_prevoyant ########### \n"); - printf("\n"); - - printf("\t \t Veuillez choisir la partie que vous vous voulez jouer !!!!\n"); - scanf("%d", &choixDeLaPartie); - printf("\n"); - - switch (choixDeLaPartie) - { + /// tapper les code ansis c'est pas top... ça rend les choses pas très lisibles + /// ... encodage + /// ... + /// char chaine1 = "blabababababa"; + /// printf( toAnsi(chaine1) ); + + /// char chaine2 = "blabababababa"; + /// struct style { int debut, int fin, char* color}; + /// style1 = {debut = 0, fin = 5, color = red }; + /// style1 = {debut = 7, fin = 9, color = black }; + /// print( applyStyle(chaine2, [style1, style2, style3] ) ) + + /// char* red = "\033[44m"; + /// char* black = "\033[30m"; + printf("\n\n %s Bonjour !!! Bienvenue dans le merveilleux monde des 7 couleurs\n" + " ***************************************************************** %s\n\n" + ,red, black); + + printf(" \t \t =================================MENU=======================================: \n"); + printf("\n"); + + int choixDeLaPartie; + printf("\t \t ################# 1.joueur_contre_joueur ########### \n"); + printf("\t \t ################# 2.joueur_contre_ordinateur ########### \n"); + printf("\t \t ################# 3.joueur1_contre_joueur_glouton ########### \n"); + printf("\t \t ################# 4.joueur2_contre_joueur_glouton_prevoyant ########### \n"); + printf("\n"); + + printf("\t \t Veuillez choisir la partie que vous vous voulez jouer !!!!\n"); + scanf("%d" , &choixDeLaPartie); + /// toto tata + /// | | + /// v v + /// 1 a d 0 0 0 p z a b q 0 0 0 + + /// DRY: Don't Repeat Yourself. + /// Dès que quelque chose est dupliquée plus de 2x, c'est qu'il faut ré-organiser le code. + + char* type_partie[4]=["joueur_contr_joueur", "joueur_contre_ordinateur", "choix3", "choix4"]; + printf("\t \t \t Vous avez choisi la partie %s :o) \n",type_partie[choixDeLaPartie]); + printf("\n"); + printf("\t \t \t \t Etat actuel du monde !!! \n"); + printf("\n"); + + switch (choixDeLaPartie) + { case 1: - printf("\t \t \t Vous avez choisi la partie joueur_contre_joueur :o) \n"); - printf("\n"); - printf("\t \t \t \t Etat actuel du monde !!! \n"); - printf("\n"); - joueur_contre_joueur ( mondeCarre , dim); - break; + joueur_contre_joueur(mondeCarre, dim); + break; case 2: - printf("\t \t \t Vous avez choisi la partie joueur_contre_ordinateur :o) \n"); - printf("\n"); - printf("\t \t \t \t Etat actuel du monde !!! \n"); - printf("\n"); - joueur2_contre_ordinateur(mondeCarre, dim); - break; + joueur_contre_ordinateur(mondeCarre, dim); + break; case 3: - printf("\t \t Vous avez choisi la partie joueur1_contre_joueur_glouton :o) \n"); - printf("\n"); - printf("\t \t \t \t Etat actuel du monde !!! \n"); - printf("\n"); - joueur1_VS_joueur_glouton(mondeCarre, dim); - - break; + joueur_contre_choix3(mondeCarre, dim); + break; case 4: - printf("Vous avez choisi la partie joueur2_contre_glouton_prevoyant:o)"); - printf("\n"); - printf("\t \t \t \t Etat actuel du monde !!! \n"); - printf("\n"); - joueur2_Vs_joueur_glouton_prevoyant (mondeCarre , dim); - break; - default: - printf("Vous n'avez pas rentré un nombre correct. Désolé mais pas de jeu pour vous :o)"); - break; - } - - printf("\n\n"); - - fclose(fichier); -} - - - + joueur_contre_choix4(mondeCarre, dim); + break; + } + printf("\n\n"); return 0; } diff --git a/joueur2_VS_joueur_glouton_prevoyant.c b/joueur2_VS_joueur_glouton_prevoyant.c index 2d43ad0..7162089 100644 --- a/joueur2_VS_joueur_glouton_prevoyant.c +++ b/joueur2_VS_joueur_glouton_prevoyant.c @@ -13,33 +13,71 @@ #include #include "joueur_glouton_prevoyant.h" +/// Don't Repeat Yourself ! +/// +/// +typedef double (*fonction_joueur)(char mondeCarre[30][30], char* idJoueur); ///< Cette ligne déclare un nouveau type de pointeur sur fonction. + +/// un jeu qui prend en paramètre 2 pointeur sur fonction +void jeu_generique(char mondeCarre[30][30], int dim, fonction_joueur player1, fonction_joueur player2) +{ + char joueur1 = '@'; + char joueur2 = '^'; + + float score1 = 0; + float score2 = 0; + init (mondeCarre, dim); + aleatoire(mondeCarre, dim); + affiche(mondeCarre, dim); + printf("\n"); + + // Ces lignes de codes suivantes permettent de tester la stratégie de l'aléa contre un joueur + int i = 0; + while (getchar()!='\n'); + while (i<20) + { + score1 = player1(mondeCarre, joueur1); + sleep(1.5); + printf("C'est au tour de l'ordinateur \n"); + score2 = player2(mondeCarre, joueur2); + sleep(1.5); + printf("\n"); + affiche(mondeCarre,dim) ; + i++; + } + + if (score1 == score2) + printf(" VOus avez fait match nul \n"); + else + printf("Le joueur %s est le vainqueur !!!! \n ", (score1 < score2)? "joueur1":"joueur2"); +} void joueur2_Vs_joueur_glouton_prevoyant (char mondeCarre[30][30] , int dim) { - float score_glouton_prevoyant = 0; - float score_joueur_2 = 0; - init (mondeCarre, dim); - aleatoire(mondeCarre, dim); - affiche(mondeCarre, dim); - printf("\n"); + float score_glouton_prevoyant = 0; + float score_joueur_2 = 0; + init (mondeCarre, dim); + aleatoire(mondeCarre, dim); + affiche(mondeCarre, dim); + printf("\n"); - // Ces lignes de codes suivantes permettent de tester la stratégie de l'aléa contre un joueur - int i = 0; - while (getchar()!='\n'); - while (i<20) - { - joueur_2(mondeCarre, dim, &score_joueur_2); - sleep(1.5); - printf("C'est au tour de l'ordinateur \n"); - glouton_prevoyant(mondeCarre, dim , &score_glouton_prevoyant); - sleep(1.5); - printf("\n"); - affiche(mondeCarre, dim) ; - i++; - } - - if (score_joueur_2 > score_glouton_prevoyant) printf("Le joueur_2 est le vainqueur !!!! \n "); - else if (score_joueur_2 < score_glouton_prevoyant) printf("le glouton prevoyant est le vainqueur !!!! \n "); - else printf(" VOus avez fait match nul \n"); + // Ces lignes de codes suivantes permettent de tester la stratégie de l'aléa contre un joueur + int i = 0; + while (getchar()!='\n'); + while (i<20) + { + joueur_2(mondeCarre, dim, &score_joueur_2); + sleep(1.5); + printf("C'est au tour de l'ordinateur \n"); + glouton_prevoyant(mondeCarre, dim , &score_glouton_prevoyant); + sleep(1.5); + printf("\n"); + affiche(mondeCarre, dim) ; + i++; + } + + if (score_joueur_2 > score_glouton_prevoyant) printf("Le joueur_2 est le vainqueur !!!! \n "); + else if (score_joueur_2 < score_glouton_prevoyant) printf("le glouton prevoyant est le vainqueur !!!! \n "); + else printf(" VOus avez fait match nul \n"); } diff --git a/joueur_1.c b/joueur_1.c index b6adc4b..15aeaa4 100644 --- a/joueur_1.c +++ b/joueur_1.c @@ -2,6 +2,8 @@ #include #include +/// DRY: Don't repeat yourself. +/// WET: We enjoy typing. void joueur_1 (char mondeCarre[30][30] , int dim, float *pscore1) { diff --git a/joueur_2.c b/joueur_2.c index 374fc66..cf56e4b 100644 --- a/joueur_2.c +++ b/joueur_2.c @@ -13,49 +13,49 @@ void joueur_2 (char mondeCarre[30][30] , int dim, float *pscore2 ) printf("Le joueur_2 a choisi : %c \n", couleur); bool changed = true; while (getchar()!='\n'); - while (changed == true ) - { - changed = false; - for (int i =0; i<30; i++) + while (changed == true ) + { + changed = false; + for (int i =0; i<30; i++) + { + for (int j =29; j>0; j--) + { + if ( mondeCarre[i][j] == joueur_2) + { + if ( j+1 <= 29 && mondeCarre[i][j+1] == couleur) + { + mondeCarre[i][j+1] = joueur_2; + changed = changed | true; + } + if ( j-1 >= 0 && mondeCarre[i][j-1] == couleur) + { + mondeCarre[i][j-1] = joueur_2; + changed = changed | true; + } + if (i-1 >= 0 && mondeCarre[i-1][j] == couleur) { - for (int j =29; j>0; j--) - { - if ( mondeCarre[i][j] == joueur_2) - { - if ( j+1 <= 29 && mondeCarre[i][j+1] == couleur) - { - mondeCarre[i][j+1] = joueur_2; - changed = changed | true; - } - if ( j-1 >= 0 && mondeCarre[i][j-1] == couleur) - { - mondeCarre[i][j-1] = joueur_2; - changed = changed | true; - } - if (i-1 >= 0 && mondeCarre[i-1][j] == couleur) - { - mondeCarre[i-1][j] = joueur_2; - changed = changed | true; - } - if (i+1 <= 29 && mondeCarre[i+1][j] == couleur) - { - mondeCarre[i+1][j] = joueur_2; - changed = changed | true; - } - else - { - changed = false; - - } - - - - } - } - - + mondeCarre[i-1][j] = joueur_2; + changed = changed | true; + } + if (i+1 <= 29 && mondeCarre[i+1][j] == couleur) + { + mondeCarre[i+1][j] = joueur_2; + changed = changed | true; + } + else + { + changed = false; + } + + + + } } + + + } + } int i,j; for (i=0;i #include +/// tab['A'] => encodage interne, contient les valeur de 0 à 7 int loi_du_plus_fort(char *tab , int taille) { - /* - Cette fonction permet de compter le nombre de fois qu'une couleur apparait dans le tableau et renvoie au la couleur au joueur_glouton qui le joue afin d'avoir la chance de coloniser - le plus de case - */ - int a = 0 ; int b = 0 ; int c=0 ; int d=0 ; int e=0 ; int f=0 ; int g=0 ; - char A ='A'; char B = 'B' ; char C = 'C' ; char D = 'D' ; char E = 'E' ; char F ='F' ; char G = 'G' ; - for (int i=0 ; i< taille; i++ ) - { - if (tab[i] =='A') - { - a++ ; - i++; - } - } - - + int comptage[8] = {0,0,0,0,0,0,0,0}; for (int i=0 ; i< taille; i++ ) - { - if (tab[i] =='B') - { - b++ ; - i++; - } - } - + comptage[tab[i]]++; - for (int i=0 ; i< taille; i++ ) + /// Trouver parmi les différents symboles (0,1,2,3 ou A,B,C, D, ...) + /// dans quelle case il y a la plus grande valeur comptée + int maxValue = 0 ; + int maxIndex = -1; + for (int i=0;i<8;i++) { - if (tab[i] =='C') + if(maxValue < comptage[i]) { - c++ ; - i++; + maxValue = comptage[i]; + maxIndex = i; } - } + } + return maxIndex; +} + +int loi_du_plus_fort(char *tab , int taille) +{ + /* + Cette fonction permet de compter le nombre de fois qu'une couleur apparait dans le tableau et renvoie au la couleur au joueur_glouton qui le joue afin d'avoir la chance de coloniser + le plus de case + */ + //int a = 0 ; int b = 0 ; int c=0 ; int d=0 ; int e=0 ; int f=0 ; int g=0 ; + int comptage[8] = {0,0,0,0,0,0,0,0}; for (int i=0 ; i< taille; i++ ) + comptage[ tab[i]-'A' ]++; + + /// Trouver parmi les différents symboles (0,1,2,3 ou A,B,C, D, ...) + /// dans quelle case il y a la plus grande valeur comptée + int maxValue = 0 ; + int maxIndex = -1; + for (int i=0;i<8;i++) { - if (tab[i] =='D') - { - d++ ; - i++; - } - } - - for (int i=0 ; i< taille; i++ ) - { - if (tab[i] =='E') - { - e++ ; - i++; - } - } - - for (int i=0 ; i< taille; i++ ) - { - if (tab[i] =='F') - { - f++ ; - i++; - } - } - - for (int i=0 ; i< taille; i++ ) - { - if (tab[i] =='G') + if(maxValue < comptage[i]) { - g++ ; - i++; + maxValue = comptage[i]; + maxIndex = i; } - } - - // printf("%d, %d,%d, %d,%d, %d,%d \n", a,b,c,d,e,f,g); - - if ((a>=b && a>=c && a>=d && a>=e && a>=f && a>=g) ) return 'A'; - - if (b>=a && b>=c && b>=d && b>=e && b>=f && b>=g ) return 'B'; - - if (c>=a && c>=b && c>=d && c>=e && c>=f && c>=g ) return 'C'; - - if (d>=a && d>=b && d>=c && d>=e && d>=f && d>=g ) return 'D'; - - if ( e>=a && e>=b && e>=c && e>=d && e>=f && e>=g ) return 'E'; - - if (f>=a && f>=b && f>=c && f>=d && f>=e && f>=g ) return 'F'; - - if (g>=a && g>=b && g>=c && g>=d && g>=e && g>=f ) return 'G'; - + } + return maxIndex; } diff --git a/makefile b/makefile index 15a201d..afe15a3 100644 --- a/makefile +++ b/makefile @@ -1,10 +1,10 @@ -CC=gcc #Commande du compilateur -CFLAGS=-W #Option d'optimisation du programme +CC=gcc ###  +CFLAGS=-Wall -O3 -std=c99# EXEC = jeu all: $(EXEC) ${EXEC}: jeu.o affiche.o init.o aleatoire.o joueur_contre_joueur.o joueur_1.o joueur_2.o ordinateur.o joueur2_VS_joueur_glouton_prevoyant.o joueur_contre_ordinateur.o alea2.o joueur_glouton.o loi_du_plus_fort.o loi_du_plus_fort2.o joueur_glouton_prevoyant.o joueur1_VS_joueur_glouton.o - $(CC) $(CFLAGS) -o jeu jeu.o affiche.o init.o aleatoire.o joueur_contre_joueur.o joueur_contre_ordinateur.o joueur2_VS_joueur_glouton_prevoyant.o joueur_1.o joueur_2.o ordinateur.o alea2.o joueur_glouton.o loi_du_plus_fort.o loi_du_plus_fort2.o joueur_glouton_prevoyant.o joueur1_VS_joueur_glouton.o + $(CC) $(CFLAGS) -o binary/jeu jeu.o affiche.o init.o aleatoire.o joueur_contre_joueur.o joueur_contre_ordinateur.o joueur2_VS_joueur_glouton_prevoyant.o joueur_1.o joueur_2.o ordinateur.o alea2.o joueur_glouton.o loi_du_plus_fort.o loi_du_plus_fort2.o joueur_glouton_prevoyant.o joueur1_VS_joueur_glouton.o jeu.o: jeu.c $(CC) $(CFLAGS) -o jeu.o -c jeu.c diff --git a/ordinateur.c b/ordinateur.c index 5cd89bd..153a730 100644 --- a/ordinateur.c +++ b/ordinateur.c @@ -11,49 +11,49 @@ void ordinateur (char mondeCarre[30][30] , int dim, float *pscore_ordinateur) couleur_aleatoire = 'A' +rand()%7; printf("L'ordinateur a choisi : %c \n", couleur_aleatoire ); bool changed = true; - while (changed == true ) - { - changed = false; - for (int i =0; i<30; i++) + while (changed == true ) + { + changed = false; + for (int i =0; i<30; i++) + { + for (int j = 0; j<30; j++) + { + if ( mondeCarre[i][j] == ordi ) + { + if ( j+1 <= 29 && mondeCarre[i][j+1] == couleur_aleatoire ) + { + mondeCarre[i][j+1] = ordi ; + changed = changed | true; + + } + if ( j-1 >= 0 && mondeCarre[i][j-1] == couleur_aleatoire ) + { + mondeCarre[i][j-1] = ordi ; + changed = changed | true; + + } + if (i-1 >= 0 && mondeCarre[i-1][j] == couleur_aleatoire ) + { + mondeCarre[i-1][j] = ordi ; + changed = changed | true; + + } + if (i+1 <= 29 && mondeCarre[i+1][j] == couleur_aleatoire ) { - for (int j = 0; j<30; j++) - { - if ( mondeCarre[i][j] == ordi ) - { - if ( j+1 <= 29 && mondeCarre[i][j+1] == couleur_aleatoire ) - { - mondeCarre[i][j+1] = ordi ; - changed = changed | true; - - } - if ( j-1 >= 0 && mondeCarre[i][j-1] == couleur_aleatoire ) - { - mondeCarre[i][j-1] = ordi ; - changed = changed | true; - - } - if (i-1 >= 0 && mondeCarre[i-1][j] == couleur_aleatoire ) - { - mondeCarre[i-1][j] = ordi ; - changed = changed | true; - - } - if (i+1 <= 29 && mondeCarre[i+1][j] == couleur_aleatoire ) - { - mondeCarre[i+1][j] = ordi ; - changed = changed | true; - - } - else - { - changed = false; - - } - - } - } + mondeCarre[i+1][j] = ordi ; + changed = changed | true; + + } + else + { + changed = false; + } + + } } + } + } float score_ordi = 0; int i,j; @@ -64,11 +64,11 @@ void ordinateur (char mondeCarre[30][30] , int dim, float *pscore_ordinateur) score_ordi++; } } - score_ordi = (score_ordi/900)*100; - *pscore_ordinateur = score_ordi; - printf("score_ordi = %f\n", *pscore_ordinateur); + score_ordi = (score_ordi/900)*100; + *pscore_ordinateur = score_ordi; + printf("score_ordi = %f\n", *pscore_ordinateur); } - +