Tic Tac Toe mit Minimax: Computer manchmal verliert, wenn der Spieler zuerst geht;funktioniert sonst.

StackOverflow https://stackoverflow.com//questions/10679269

Frage

Ich arbeite an einem Minimax-Algorithmus für unschlagbare Tic-TAC-Zehe.Ich brauche es, um beide zu arbeiten, wenn der Computer an erster Stelle geht, und wenn der Spieler zuerst geht.Mit der aktuellen Version verliert der Computer niemals beim ersten Schritt.Es scheint jedoch, dass MiniMax niemals einen besten Schritt findet (immer -1 als Punktzahl zurückgibt), wenn der Spieler zuerst geht.

Was ist, was dazu führt, dass der Minimax-Score zurückgegeben wird, um den Computer für den Computer zu sein, wenn der Spieler den ersten Umzug macht?

Beispiel: generasacodicetagpre.

Hier ist die 'Minimax'-Klasse: generasacodicetagpre.

Hier ist die 'Board'-Klasse: generasacodicetagpre.

und hier ist die 'mark2'-Klasse, wenn es Verwirrung gab: generasacodicetagpre.

War es hilfreich?

Lösung 3

nach einer längeren Pause, und mit Hilfe der Antwort von @guyadini hatte ich eine Epiphanie.Ich habe einen Test geschrieben, um das Auftreten der drei möglichen Bewertungen zu zählen, die von Minimax () zurückgegeben wurde.Es ergab nichts für 0 als Ergebnis, das mich an der Tatsache hielt, dass ich 0 brauchte, um vom Algorithmus als möglicher Punktzahl in Betracht zu ziehen.

Ich hatte ursprünglich die Initialisierung von "Score" geändert, um die niedrigsten / höchstmöglichen Ergebnisse (-1/1) zu sein und mit ihnen verglichen.Dies verbot jedoch das Ergebnis, den niedrigsten / höchsten Wert ausschließlich aus dem Satz von Scores zurückzusetzen, und stattdessen auch den initialisierten Wert enthalten.Dies verdammt die Ergebnisse.

Ich habe den folgenden Vergleich zum Bedingungswechsel von 'Score': hinzugefügt generasacodicetagpre.

Dies zwang alle verbleibenden Vergleiche gegen einen Wert, der dem Satz von zurückgegebenen Noten gehörte. generasacodicetagpre.

Andere Tipps

schauen wir uns etwas einfacher an - das Board ist 1x1, und der erste Spieler, um dort eine Marke zu platzieren.

Jetzt beginnt der Computer, Score= -1. Es gibt keine gewinnende Lösung (das eingewinnende Set wird geprüft, es ist keine 1-in-Folge), und es gibt einen verfügbaren Platz. Also gehen wir durch Backtracking vor, um die eine verfügbare Position auszuprobieren.

Now Mark= Player, und der Vorstand hat eine gewinnende Lösung.Der Computer gewinnt also, Score= -1.

Rückkehr zum ersten Anruf, der Linie "int nextcore= Minimax (Board, Nextmark);Gibt -1 wieder zurück, und die Endpunktzahl ist -1.

dasselbe passiert Ihnen mit dem größeren Problem.

In einem TIC TAC-Zehenspiel gibt es 3 Möglichkeiten und nicht nur 2: Spieler1 gewinnt, Spieler2 gewinnt, niemand gewinnt.

Sie sollten Linien wie dieses ersetzen: generasacodicetagpre.

von so etwas: generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top