Bonjour à tous,
J'ai déjà implémenté ce genre d'algorithme en C mais ça remonte à un bail.
Je ne me souvient plus de la forme que doit prendre la fonction d'évaluation...
Pour l'instant mon algo me sert ce genre de résulat {970, 140, 90, 230, 90, 30, 30} pour les sept colonnes, et ce en jouant le premier et au centre.
Bizarre pour une profondeur de 7.
Ma fonction d'évaluation est celle ci:

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
 
 
private int evaluate()
	{
		int score = 0;
 
		for(int i = 0; i < 7;i++)
		{
			for(int j = 0; j < 6; j++)
			{
				score+=scores(Player.MAKINA, i, j) - scores(Player.FIRST, i, j);
			}
		}
		return score;
	}
et ma foncton scores utilisée dans evaluate est:

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
 
 
 
 
	private int scores(Player p, int i, int j)
	{
		int score = 0;
		if(cases[i][j].isPlayer(p))
		{
			// exemple de la diagonale SUD-OUEST / NORD-EST
			if(j+1 < 6 && i-1 > -1 && cases[i-1][j+1].isPlayer(p))
			{
				if(j+2 < 6 && i-2 > -1 && cases[i-2][j+2].isPlayer(p))
				{
					if(j+3 < 6 && i-3 > -1 && cases[i-3][j+3].isPlayer(p))
					{
						score+=1000;
					}else if(j+3 < 6 && i-3 > -1 && cases[i-3][j+3].isPlayer(switchPlayer(p)))
					{
						score-=1000;
					}
					score+=100;
				}else if(j+2 < 6 && i-2 > -1 && cases[i-2][j+2].isPlayer(switchPlayer(p)))
				{
					score-=100;
				}
				score+=10;
			}else if(j+1 < 6 && i-1 > -1 && cases[i-1][j+1].isPlayer(switchPlayer(p)))
			{
				score-=10;
			}
		}
		return score;
	}
Je tiens à préciser que mes bornes 7 et 6 correspondent respectivement aux colonnes et aux lignes.
Que Player.MAKINA est le joueur PC et que Player.FIRST est l'humain.
Pour ceux que vois venir me demandant à quoi ressemble ta fonction negaBeta , la voici:

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
 
 
private int alphaBeta(int tours, Player player, int alpha, int beta)
	{
		if(tours==0 || won())
			return evaluate();
		else{
			for(int i = 0; i < 7; i++)
			{
				if(!cases[i][0].isFull())
				{
					int row;
					for(row = 0;row < 6;row++)
					{
						if(cases[i][row].isFull())
							break;
					}
					row--;
					player=switchPlayer(player);
					cases[i][row].setPlayer(player);
					int val = - alphaBeta(tours - 1, player, -beta, -alpha);
					cases[i][row].removePlayer();
					if(val > alpha)
					{
						alpha = val;
						if(alpha > beta)
						{
							return alpha;
						}
					}
				}
			}
			return alpha;
		}
	}

Merci d'avance pour la foultitude de conseil que vous allez me prodiguer.
à bientôt