free memory

This commit is contained in:
Mylloon 2022-11-20 17:08:17 +01:00
parent 870b5c2b16
commit 9aef6e223d
Signed by: Anri
GPG key ID: A82D63DFF8D1317F

View file

@ -2,7 +2,7 @@
void action_joueur_minimax(Jeu *jeu, int couleur) { void action_joueur_minimax(Jeu *jeu, int couleur) {
int ligne, colonne, score = INT_MAX; 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); 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, void _action_joueur_minimax(Jeu *jeu, int profondeur, int couleur, int gagnant,
int *ligne, int *colonne, int *score) { int *ligne, int *colonne, int *score) {
int score_rec, i_rec, j_rec;
Coups *possibilites = action_possible_joueur(jeu->plateau, couleur); Coups *possibilites = action_possible_joueur(jeu->plateau, couleur);
// Pas de coups possibles // Pas de coups possibles
if (!possibilites->taille_liste) { if (!possibilites->taille_liste) {
free(possibilites); free_coups(possibilites);
couleur = couleur_ennemi(couleur); couleur = couleur_ennemi(couleur);
possibilites = action_possible_joueur(jeu->plateau, couleur); possibilites = action_possible_joueur(jeu->plateau, couleur);
if (!possibilites->taille_liste) { if (!possibilites->taille_liste) {
*score = heuristique(jeu, gagnant); *score = heuristique(jeu, gagnant);
free(possibilites); free_coups(possibilites);
return; return;
} }
@ -34,6 +33,7 @@ void _action_joueur_minimax(Jeu *jeu, int profondeur, int couleur, int gagnant,
} }
profondeur--; profondeur--;
int score_tmp, i_tmp, j_tmp;
for (Element *i = possibilites->coups->premier; i; i = i->suivant) { for (Element *i = possibilites->coups->premier; i; i = i->suivant) {
Jeu *jeu_copie = copie_jeu(jeu); Jeu *jeu_copie = copie_jeu(jeu);
if (!jeu_joueur(jeu_copie, i->jeton->pos_i, i->jeton->pos_j, couleur)) { 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) { if (profondeur) {
_action_joueur_minimax(jeu_copie, profondeur, _action_joueur_minimax(jeu_copie, profondeur,
couleur_ennemi(couleur), gagnant, &i_rec, couleur_ennemi(couleur), gagnant, &i_tmp,
&j_rec, &score_rec); &j_tmp, &score_tmp);
} else { } else {
score_rec = heuristique(jeu_copie, gagnant); score_tmp = heuristique(jeu_copie, gagnant);
} }
if (couleur == gagnant) { // MAX if (couleur == gagnant) { // MAX
if (score_rec >= *score) { if (score_tmp >= *score) {
// On change notre coup si il est meilleur // On change notre coup si il est meilleur
*score = score_rec; *score = score_tmp;
*ligne = i->jeton->pos_i; *ligne = i->jeton->pos_i;
*colonne = i->jeton->pos_j; *colonne = i->jeton->pos_j;
} }
} else { // MIN } else { // MIN
if (score_rec <= *score) { if (score_tmp <= *score) {
// On change notre coup s'il est + désavantageux pour // On change notre coup s'il est + désavantageux pour
// l'adversaire // l'adversaire
*score = score_rec; *score = score_tmp;
*ligne = i->jeton->pos_i; *ligne = i->jeton->pos_i;
*colonne = i->jeton->pos_j; *colonne = i->jeton->pos_j;
} }
} }
free_jeu(jeu_copie);
} }
free_coups(possibilites);
} }
int heuristique(Jeu *jeu, int couleur) { int heuristique(Jeu *jeu, int couleur) {