Voici ce que j'utiliser:
Allez sur toutes les lignes (dans toutes les directions). Pour chaque rangée, si elle n'a que les marques d'un joueur, attribuez-lui des points en fonction du nombre de marques qu'il y a. Vous pouvez avoir une table de correspondance en mappant le nombre de marques à marquer, qui peut être ajusté pour obtenir les meilleurs résultats. Le résultat final sera la différence entre les scores des deux joueurs.
Exemple (pseudo-code):
const int markScore[4+1] = {0, 1, 3, 5, 99999}; //assuming 4x4x4 board
//The above values are arbitrary - adjust to what you think makes sense.
score = 0;
for all rows in all directions:
count Xs and Os
if (xs>0 && os==0)
score += markScore[xs];
else if (os>0 && xs==0)
score -= markScore[os];
return score;
Cela devrait bien fonctionner, car toute ligne de marques de un seul joueur donne ce joueur une chance de gagner.
pouvez-vous me montrer un exemple de la façon de mapper le nombre de marques aux scores? – root
Je me demande combien d'effet les valeurs de setScore font-elles à l'IA? J'essaie de trouver les meilleures valeurs. – root
Une méthode pour trouver de bonnes valeurs est de laisser votre IA jouer beaucoup de parties contre elle-même avec des valeurs différentes et voir laquelle sort vainqueur. Un grand nombre des meilleurs moteurs d'échecs font quelque chose comme ça pour régler leurs paramètres. (Pour être plus précis, ils jouent généralement contre d'autres moteurs plutôt que contre eux-mêmes). – interjay