MiniMax bei TicTacToe(x-O) funzt nicht (ganz :P)

Status
Nicht offen für weitere Antworten.

Hae?!

Neues Mitglied
Hi,

also ich bin schon seit einer ganzen Weile dabei ein TicTacToe (manche kennen es als XXO oder 3Gewinnt) zu programmieren. Das ist mein zweites "größeres" Projekt in Java.
Naja es funzt auch fast alles:

- Die GUI sieht ganz OK aus
- Es können zwei Menschlische Spieler spielen
- Oder man kann als erster oder zweiter spieler gegen den PC spielen<--- hier liegt das Problem!

Denn ich habe die KI mit dem MiniMax Algorythmus realisiert. Und bei so einem kleinen Spiel ist es möglich den gesamten Suchbaum bis zu alle Blattobjekten "durchzuarbeiten". Was ich auch tue! Deswegen müsste man gegen den PC höchstens ein Gleichstand erziehlen können! Oft funktioniert das auch, aber manchmal gewinne auch ich! Ich hab das TicTacToe jetzt schon 3 Wochen fertig, aber ich finde einfach nicht den Fehler! Hoffentlich kann sich das mal einer von euch anschauen und findet den Fehler!

Ich wäre sehr glücklich wenn das endlich alles so funktionieren würde ich mir das gedacht habe! Also bitte helft mir, auch wenn mein Code bissl durcheinander aussieht... :autsch:

Danke für eure Hilfe! :applaus:

Hier der Code(Zu viel zum direkt posten!):

TicTacToe.rar
 

Java Chris

Bekanntes Mitglied
ich habs mit grad angesehen, und ich glaub das problem ist, dass er immer in der mitte beginnt zu setzen, und dadurch es SEHR einfach ist eine 2 fach falle zu erstellen, er müsste meinen zug mit einplanen, nicht nur meine zu "zerstören"

was mir noch aufgefallen ist, wenn er computer gewinnt, überprüft der nicht nochmal, sondern erst, dann wenn ich meinen nächsten zu getätigt habe
 

foobar

Top Contributor
Wenn du den Spielbaum sowieso komplett aufbaust, kannst du doch einfach den Zug wählen der zum Sieg führt. Bei einem Spielbrett von 3x3 sollte das kein Problem sein.
 
G

Guest

Gast
Java Chris hat gesagt.:
ich habs mit grad angesehen, und ich glaub das problem ist, dass er immer in der mitte beginnt zu setzen, und dadurch es SEHR einfach ist eine 2 fach falle zu erstellen, er müsste meinen zug mit einplanen, nicht nur meine zu "zerstören"

was mir noch aufgefallen ist, wenn er computer gewinnt, überprüft der nicht nochmal, sondern erst, dann wenn ich meinen nächsten zu getätigt habe

Das ist schon richtig das der PC in der Mitte anfängt, von dieser Stelle aus hat man die meisten möglichkeiten zu gewinnen! Also "funktioniert" die Bewertungfunktin an dieser Stelle noch. Aber später mach er Mist.
Außerdem werden deine Züge mit "einberechnet", für jeden Zug, der gerade für den PC möglich ist, werden alle weitern Züge berechnet. Immer wenn du Gewinnst bekommt die Bewertung für diese Stelle einen Punkt abgezoen. Wenn der PC gewinnt weird für diesen Zug ein Punkt addiert und bei Unentschieden passiert nix. Dadurch müsste der PC immer den BESTEN(Wenn mehrere gleich bewertet werden, den ersten) Zug wählen!

foobar hat gesagt.:
Wenn du den Spielbaum sowieso komplett aufbaust, kannst du doch einfach den Zug wählen der zum Sieg führt. Bei einem Spielbrett von 3x3 sollte das kein Problem sein.


  • Genau das mach ich doch! Es gibt ~255000 möglich End-Situationen. Eigentlich 9! aber der Erste Spieler kann ja schon nach 5 Zügen gewonnen haben...(deswegen fallen ne ganze Menge weg)

    Ich hoffe es schaut sich noch einer den Quellcode an und findet meinen Fehler! An der Bewertungsfunktion kann es nicht liegen, hab mitlerweile auch andere Leute im Netz gefunden die die gleiche Idee hatten und bei denen es funzt...

    Büdde helft mir, ich will endlich nicht mehr gegen den PC gewinnen!
 
G

Guest

Gast
Java Chris hat gesagt.:
ich habs mit grad angesehen, und ich glaub das problem ist, dass er immer in der mitte beginnt zu setzen, und dadurch es SEHR einfach ist eine 2 fach falle zu erstellen, er müsste meinen zug mit einplanen, nicht nur meine zu "zerstören"

was mir noch aufgefallen ist, wenn er computer gewinnt, überprüft der nicht nochmal, sondern erst, dann wenn ich meinen nächsten zu getätigt habe

Das ist schon richtig das der PC in der Mitte anfängt, von dieser Stelle aus hat man die meisten möglichkeiten zu gewinnen! Also "funktioniert" die Bewertungfunktin an dieser Stelle noch. Aber später mach er Mist.
Außerdem werden deine Züge mit "einberechnet", für jeden Zug, der gerade für den PC möglich ist, werden alle weitern Züge berechnet. Immer wenn du Gewinnst bekommt die Bewertung für diese Stelle einen Punkt abgezoen. Wenn der PC gewinnt weird für diesen Zug ein Punkt addiert und bei Unentschieden passiert nix. Dadurch müsste der PC immer den BESTEN(Wenn mehrere gleich bewertet werden, den ersten) Zug wählen!

foobar hat gesagt.:
Wenn du den Spielbaum sowieso komplett aufbaust, kannst du doch einfach den Zug wählen der zum Sieg führt. Bei einem Spielbrett von 3x3 sollte das kein Problem sein.

Genau das mach ich doch! Es gibt ~255000 möglich End-Situationen. Eigentlich 9! aber der Erste Spieler kann ja schon nach 5 Zügen gewonnen haben...(deswegen fallen ne ganze Menge weg)

Ich hoffe es schaut sich noch einer den Quellcode an und findet meinen Fehler! An der Bewertungsfunktion kann es nicht liegen, hab mitlerweile auch andere Leute im Netz gefunden die die gleiche Idee hatten und bei denen es funzt...

Büdde helft mir, ich will endlich nicht mehr gegen den PC gewinnen!
 

Hae?!

Neues Mitglied
Sorry wegen dem doppel Post! Leider kann man ja die Posts weder löschen, noch editieren! Dachte außerdem das ich automatisch angemeldet bin, aber hab dann doch als Gast geschrieben! Sorry!
 

Java Chris

Bekanntes Mitglied
Ja schon, aber du hast keine chance wenn du in der mitte anfängst und dann nicht direkt die eckpunkte blockst... so funktioniert die doppelfalle immer
 

fantrixx

Bekanntes Mitglied
Hmm das du auch immer als bemängeln musst :p naja Danke für den Tip werde das nächstest mal anders machen ;)
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben