Comment mettre en œuvre l'algorithme Pentago AI
Question
Je suis en train de développer Pentago
-jeu en c #.
En ce moment je vais avoir mode 2 joueurs qui fonctionne très bien.
le problème est que je veux Un joueur Mode (contre l'ordinateur), mais malheureusement, tous les outils de Minimax / negamax sont un chose calculée pour chaque « Move "(en plaçant le marbre, jeu pièce mobile).
BUTIN Pentago
, tous les besoins de joueur à faire deux choses (lieu marbre, et tourner une des planches intérieures)
Je ne figure pas comment mettre en œuvre à la fois partie et rotate placer le marbre, et je voudrais bien que quelqu'un me guider avec cela.
si vous n'êtes pas familier avec le jeu, voici un lien au jeu.
si quelqu'un manque de, je peux télécharger mon code quelque part si c'est pertinent.
merci beaucoup à l'avance
La solution
Si un mouvement légal unique se compose de deux sous-coups, votre « mouvement » à des fins de l'algorithme de jeu est tout simplement un tuple où le premier élément est le placement en marbre et le deuxième élément est la rotation de la carte par exemple:.
var marbleMove = new MarbleMove(fromRow, fromCol, toRow, toCol);
var boardRotation = new BoardRotation(subBoard, rotationDirection);
var move = new Tuple<MarblMove, BoardRotation>(marbleMove, boardRotation);
En général, un jeu algorithme de jeu vous demandera d'énumérer tous les coups possibles pour une position donnée. Dans ce cas, vous devez énumérer toutes les paires possibles de sous-coups. Avec cette liste en main, vous pouvez passer à l'aide d'approches conventionnelles jeu de jeu d'ordinateur.
Autres conseils
Rick suggéré tuples ci-dessus, mais vous pourriez vouloir réellement avoir juste chaque joueur marque deux mouvements indépendants, il reste donc à leur tour deux fois de suite. Cela peut faire bouger la commande plus facile, mais peut compliquer votre algorithme de recherche, selon lequel vous utilisez.
Dans un algorithme comme UCT (qui est susceptible de minimax surperformer pour les implémentations simples) la rupture en deux mouvements peut être plus efficace parce que l'algorithme peut d'abord comprendre ce qui se déplace placements sont bons, et comprendre ce que la rotation est la meilleure. (Recherche sur Google UCT ne donne pas beaucoup Le document de recherche original n'est pas très perspicace, mais cette page est peut-être mieux. http://senseis.xmp.net/?UCT )