1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
| int IA_joue(int i, int j, int joueur)
{
noeuds++;
int joueur_courrrant = joueur;
///Donc soit ROND || CROIX
int joueur_suivant;
int multiplicateur;
int maxi, maxj, e;
if(joueur == ROND)
{
joueur_suivant = CROIX;
multiplicateur = 1;
}
else
{
joueur_suivant = ROND;
multiplicateur = -1;
}
int eval = INFINI * multiplicateur;
///multiplicateur varie en fonction
///du joueur actuel.
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
if(plateau_jeu[i][j] == VIDE)
///Si la case est vide :
{
maxi = i;
maxj = j;
jouer_coup(i, j, joueur_courrrant);
/// On joue le coup.
///afficherPlateau();
if(gagnant_jeu(joueur_courrrant) == joueur_courrrant)
///Si un des 2 joueurs a gagné :
{
eval = multiplicateur;
///retourne l'evaluation (donc soit 1 || -1)
}
else
{
e = IA_joue(maxi, maxj, joueur_suivant);
/// e sera égal a l'evaluation renvoyée par minmax.
if((joueur_courrrant == ROND && e < eval) ||
(joueur_courrrant == CROIX && e > eval))
{
eval = e;
}
}
annuler_coup(i, j, joueur_courrrant);
///Annule le(s) coup(s) joué(s).
}
}
}
return eval;
///A quel moment est censée jouer l'IA ?
/// hypothèses :
///avant / après return ?
///hors de la fonction minMax ?
/// dans le main ?
/// pendant les boucles for() ?
} |
Partager