free memory
This commit is contained in:
parent
870b5c2b16
commit
9aef6e223d
1 changed files with 14 additions and 11 deletions
|
@ -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) {
|
||||||
|
|
Reference in a new issue