diff --git a/src/minimax.c b/src/minimax.c index 95ee4bd..d350d03 100644 --- a/src/minimax.c +++ b/src/minimax.c @@ -2,7 +2,7 @@ void action_joueur_minimax(Jeu *jeu, int couleur) { int ligne, colonne, score = INT_MAX; - _action_joueur_minimax(jeu, 3, couleur, couleur, &ligne, &colonne, &score); + _action_joueur_minimax(jeu, 5, couleur, couleur, &ligne, &colonne, &score); jeu_joueur(jeu, ligne, colonne, couleur); } @@ -10,18 +10,17 @@ void action_joueur_minimax(Jeu *jeu, int couleur) { void _action_joueur_minimax(Jeu *jeu, int profondeur, int couleur, int gagnant, int *ligne, int *colonne, int *score) { - int score_rec, i_rec, j_rec; Coups *possibilites = action_possible_joueur(jeu->plateau, couleur); // Pas de coups possibles if (!possibilites->taille_liste) { - free(possibilites); + free_coups(possibilites); couleur = couleur_ennemi(couleur); possibilites = action_possible_joueur(jeu->plateau, couleur); if (!possibilites->taille_liste) { *score = heuristique(jeu, gagnant); - free(possibilites); + free_coups(possibilites); return; } @@ -34,6 +33,7 @@ void _action_joueur_minimax(Jeu *jeu, int profondeur, int couleur, int gagnant, } profondeur--; + int score_tmp, i_tmp, j_tmp; for (Element *i = possibilites->coups->premier; i; i = i->suivant) { Jeu *jeu_copie = copie_jeu(jeu); if (!jeu_joueur(jeu_copie, i->jeton->pos_i, i->jeton->pos_j, couleur)) { @@ -42,29 +42,32 @@ void _action_joueur_minimax(Jeu *jeu, int profondeur, int couleur, int gagnant, } if (profondeur) { _action_joueur_minimax(jeu_copie, profondeur, - couleur_ennemi(couleur), gagnant, &i_rec, - &j_rec, &score_rec); + couleur_ennemi(couleur), gagnant, &i_tmp, + &j_tmp, &score_tmp); } else { - score_rec = heuristique(jeu_copie, gagnant); + score_tmp = heuristique(jeu_copie, gagnant); } if (couleur == gagnant) { // MAX - if (score_rec >= *score) { + if (score_tmp >= *score) { // On change notre coup si il est meilleur - *score = score_rec; + *score = score_tmp; *ligne = i->jeton->pos_i; *colonne = i->jeton->pos_j; } } else { // MIN - if (score_rec <= *score) { + if (score_tmp <= *score) { // On change notre coup s'il est + désavantageux pour // l'adversaire - *score = score_rec; + *score = score_tmp; *ligne = i->jeton->pos_i; *colonne = i->jeton->pos_j; } } + free_jeu(jeu_copie); } + + free_coups(possibilites); } int heuristique(Jeu *jeu, int couleur) {