2010-04-14 6 views

Répondre

0

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.

+0

pouvez-vous me montrer un exemple de la façon de mapper le nombre de marques aux scores? – root

+0

Je me demande combien d'effet les valeurs de setScore font-elles à l'IA? J'essaie de trouver les meilleures valeurs. – root

+0

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

0

Les heuristiques ne sont pas nécessaires. Il n'y a que 3^27 états, vous pouvez les énumérer tous et calculer le jeu optimal.

+0

non, en 3D tictactoe, le nombre total d'état est 64 factoriel – root

+1

Vous devez définir "3D tic tac toe". Je suppose que Keith a supposé que c'était une grille de 3x3x3, et non une grille de 4x4x4, ce que vous semblez suggérer. Dans les deux cas, vous confondez les "états" avec le nombre de jeux possibles. Il devrait y avoir ~ 3^64 états. Maintenant, cela est probablement infaisable, mais pourrait vous aider à visualiser un peu le nombre d'états. – Larry

0

La fonction d'évaluation de ce jeu n'a besoin que de tester une position gagnante. La fonction d'évaluation doit compter les champs vides dans le tableau, car plus le tableau est vide, plus le score devrait être élevé. Pour réduire le nombre de lignes, de lignes et de diagonales que la fonction d'évaluation doit vérifier, vous pouvez faire un miroir et faire pivoter la carte.

Questions connexes