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 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
|
void IA_jouer(int ***jeu, int prof, int joueur)
{
int i,j;
int maxi,maxj,tmp;
int max = -10000;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
if((*jeu)[i][j]==LIBRE)
{
(*jeu)[i][j] = joueur;
tmp = Min(jeu,prof-1,3-joueur); //si joueur == 2, alors 3-joueur == 1, et inversement
if(tmp>max || (tmp == max && rand()%2)) //Nombre aléatoire pour ne pas jouer toujours le même coup.
{
max = tmp;
maxi = i;
maxj = j;
}
(*jeu)[i][j] = LIBRE;
}
}
}
(*jeu)[maxi][maxj] = joueur;
}
int Min(int ***jeu,int prof, int joueur)
{
int i,j,tmp;
int min = 10000;
if(prof == 0 || getWinner(*jeu))
return eval(*jeu,joueur);
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
if((*jeu)[i][j] == LIBRE)
{
(*jeu)[i][j] = joueur;
tmp = Max(jeu,prof-1,3-joueur);
if(tmp<min)
{
min = tmp;
}
(*jeu)[i][j] = LIBRE;
}
}
}
return min;
}
int Max(int ***jeu,int prof,int joueur)
{
int i,j,tmp;
int max = -10000;
if(prof == 0 || getWinner(*jeu))
return eval(*jeu,joueur);
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
if((*jeu)[i][j] == LIBRE)
{
(*jeu)[i][j] = joueur;
tmp = Min(jeu,prof-1,3-joueur);
if(tmp>max)
{
max = tmp;
}
(*jeu)[i][j] = LIBRE;
}
}
}
return max;
}
int getNbPions(int **jeu)
{
int i,j,count=0;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
if(jeu[i][j]!=LIBRE)
count++;
}
return count;
}
int eval(int **jeu, int joueur)
{
int winner;
if((winner=getWinner(jeu))!=0) // Si le jeu est fini
{
if(winner == joueur)
return 1000-getNbPions(jeu);
else if(winner == 3) // Si personne n'a gagné
return 0;
else
return -1000+getNbPions(jeu);
}
return 0;
} |
Partager