Puissance 4 - IA par récursivité
Bonsoir amis développeur,
Voilà je cherche a coder une IA en C++ pour implémenter un mode 2 joueurs à mon programme de Puissance 4, mais j'ai pas mal de problèmes, tant au niveau de la compréhension du fonctionnement de l'IA que du code en lui même. :cry:
Pour faire simple j'ai entendu parler de l'algorithme Min Max qui calcule tout les coups possibles par récursivité et choisit en fonction le coups a jouer, je comprend la théorie mais j'arrive pas a mettre sa en pratique, surtout lorsqu'il faut donner un "poid" a mes noeuds et ensuite décider lequel choisir. :?
Donc j'ai essayer de faire une IA comme je pouvais, mais elle ne fonctionne pas, avez-vous une idée pour améliorer ca ou que je puisse utiliser mon code comme base pour une transformation en un algo Min Max ?
Voila le code :
Code:
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
| // Fonction d'intelligence artificielle
int IA(
int profondeur,
int JoueurActuel,
int grille_simuler[LIGNE][COLONNE],
int x)
{
profondeur--; // on descend dans la profondeur du calcul
int solution = 0;
PlacerJeton(joueurActuel, x ,ligne_simuler, grille_simuler);
if (VerifierVictoire(joueurActuel, grille_simuler) == false) // Si ce que je joue ne me fait pas tout de suite gagner
{
if (profondeur != 0) // Tant que la profondeur maximal n'est pas atteinte, on continue de jouer
{
int ligne_simuler; // Correspond a la ligne simuler par l'IA
int c; // Correspond a la colonne simuler jouer par le joueur adverse
ligne_simuler = DeterminerLigne(x, grille_simuler); // On détermine la ligne de jeu pour la colonne x
PlacerJeton(joueurActuel, x ,ligne_simuler, grille_simuler); // On place le pion a la case définit
x++ ; // On incrémente x
// On change de joueur
if (joueurActuel == 'X')
joueurActuel = 'O';
else
joueurActuel = 'X';
for (int i = 0 ; i < COLONNE ; i++) // On parcour de nouveau toute les colonnes possible
{
if (DeterminerLigne(c, grille) != 6) // On vérifie si la colonne n'est pas pleine
{
c = IA(profondeur,joueurActuel,grille_simuler,i); // Appel récursif de IA pour prévoir tout les coups
}
}
}
}
// Si ce que l'IA vient de jouer la fait gagner, on retourne la colonne
if (VerifierVictoire(joueurActuel, grille_simuler) == true && joueurActuel == 'O')
{
return x;
}
// Cas ou on ne peut pas gagner, ou que la partie est finit
return 1; // Je retourne une valeur aléatoire, cette partie est a finir
} |
Qu'en pensez-vous ? :calim2:
Bien Cordialement,
SeaoI