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



## Hae?! (1. Jul 2006)

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 (1. Jul 2006)

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 (1. Jul 2006)

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.


----------



## Guest (1. Jul 2006)

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!


----------



## Guest (2. Jul 2006)

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?! (2. Jul 2006)

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 (2. Jul 2006)

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 (5. Jul 2006)

Ich habe das auch so ein Tic Tac Toe geschrieben aber dies Spielt man gegeneinander und nicht gegen den Computer.

http://teker.homeip.net/tmce/source/TicTacToe 1.0 by [www.tmce.de.ms].rar

Vielleicht kannst du damit was anfangen ?!


----------



## The_S (5. Jul 2006)

fantrixx hat gesagt.:
			
		

> http://teker.homeip.net/tmce/source/TicTacToe%201.0%20by%20%5Bwww.tmce.de.ms%5D.rar



uh, so viele Leerzeichen in einem Link ... da verwendet man normal keine Leerzeichen


----------



## fantrixx (5. Jul 2006)

Hmm das du auch immer als bemängeln musst  naja Danke für den Tip werde das nächstest mal anders machen


----------



## Sanix (5. Jul 2006)

fantrixx hat gesagt.:
			
		

> Ich habe das auch so ein Tic Tac Toe geschrieben aber dies Spielt man gegeneinander und nicht gegen den Computer.
> 
> http://teker.homeip.net/tmce/source/TicTacToe 1.0 by [www.tmce.de.ms].rar
> 
> Vielleicht kannst du damit was anfangen ?!



Er hat doch geschrieben, dass sein Problem bei der KI liegt.


----------



## The_S (5. Jul 2006)

fantrixx hat gesagt.:
			
		

> Hmm das du auch immer als bemängeln musst  naja Danke für den Tip werde das nächstest mal anders machen



jup, muss ich. Bin dazu verpflichtet


----------

