2010-12-30 10 views
3

Ich versuche zu entwickeln Pentago-Spiel in C#.Wie zu implementieren Pentago AI-Algorithmus

gerade jetzt habe ich 2 Spieler-Modus, die gut funktioniert.

das Problem ist, dass ich will Ein Spieler Modus (gegen Computer), aber leider alle Geräte von Minimax/negamax sind für eine Sache für jede „Move“ berechnet (Platzierung Marmor, bewegen Spiel-Stück).

Butin Pentago, müssen alle Spieler zwei Dinge tun (Platz Marmor, und drehen Sie eine der Innenplatten)

ich nicht geklappt hat Figur, wie beide drehen Teil & Platzieren der Marmor zu implementieren, und ich würde jemanden lieben, um mich damit zu führen.

, wenn Sie mit dem Spiel nicht vertraut sind, ist hier ein link zum Spiel.

wenn jedermann will, kann ich meinen Code irgendwo hochladen, wenn das ist relevant. im Voraus

ich danke Ihnen sehr

+0

Was haben Sie bisher getan? irgendwelche spezifischen Probleme, die Sie haben? –

+0

wie für das, was ich bisher getan habe - ich habe versucht, minimax zu implementieren, aber ich habe nicht verstanden, wie man ** eine ** Bewegung (während es soll ** zwei **) "repräsentieren" und speichern Sie eine "Liste ' – itsho

Antwort

1

Wenn ein einzelner Rechts bewegt besteht aus zwei Unter bewegt, dann „move“ für Zwecke Spiel Algorithmus ist einfach ein Tupel, wo das erste Element der Marmor Platzierung ist und das zweite Element ist die Platte Rotation zB:

var marbleMove = new MarbleMove(fromRow, fromCol, toRow, toCol); 
var boardRotation = new BoardRotation(subBoard, rotationDirection); 
var move = new Tuple<MarblMove, BoardRotation>(marbleMove, boardRotation); 

Typischerweise Algorithmus ein Spiel zu spielen benötigen Sie alle möglichen Züge für eine bestimmte Position aufzuzählen. In diesem Fall müssen Sie alle möglichen Paare von Sub-Moves auflisten. Mit dieser Liste in der Hand können Sie zu stehenden Computerspielansätzen übergehen.

+0

ich glaube, du bist ' var marmorPlace = new MarblePlace (onRow, onCol) ' wie auch immer, ist das meine ich brauche alle mögliche Paare? Ist das nicht sehr langsam? – itsho

+1

Ja, es könnte langsam sein und Spielalgorithmen müssen oft mit der exponentiellen Explosion von Spielpositionen zurechtkommen. Ihr erster Freund, der bei diesem Problem hilft, ist die Transpositionstabelle: http://en.wikipedia.org/wiki/Transposition_Table –

1

Rick oben vorgeschlagen Tupeln, aber haben Sie vielleicht wollen eigentlich nur jeder Spieler zwei unabhängige Bewegungen machen, so bleibt es wiederum zweimal in Folge. Dies erleichtert das Verschieben von Bestellungen, kann jedoch Ihren Suchalgorithmus komplizieren, je nachdem, welchen Sie verwenden. In einem Algorithmus wie UCT (der bei einfachen Implementierungen die Minimax übertreffen kann) kann das Aufbrechen in zwei Schritte effizienter sein, da der Algorithmus zuerst herausfinden kann, welche Verschiebungen gut sind und dann herausfinden, welche Rotation am besten ist. (. UCT googeln gibt nicht viel Das ursprüngliche Forschung Papier ist nicht sehr aufschlussreich, aber diese Seite könnte besser sein: http://senseis.xmp.net/?UCT)

+0

UCT sieht für mich wie "Monte-Carlo" aus. Wenn nicht, habe ich es nicht verstanden. Können Sie ein kurzes Beispiel für den UCT-Algorithmus geben? – itsho

+0

Monte-Carlo kann eine Menge Dinge bedeuten; UCT gehört zur breiteren Klasse der Monte-Carlo-Tree-Search-Algorithmen (MCTS). UCT hat eine Explorationsregel, die Ihnen sagt, wo Sie als nächstes probieren sollen. Normalerweise wächst der UCT-Baum in den Bereichen, in denen Proben genommen werden, und zufällige oder pseudozufällige Proben werden durchgeführt, um vom Ende des UCT-Baums bis zum Ende des Spiels zu gelangen. Dies vermeidet die Notwendigkeit einer komplizierten Bewertungsfunktion. –

Verwandte Themen