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.

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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 ?

Bien Cordialement,
SeaoI