# Tic-Tac-Toe :  Computer-AI erstellen?



## oOJavaNeulingOo (9. Dez 2012)

Guten Abend!

ich habe vor in paar Wochen ein klitzekleines Konsolen-Tictatoe zum üben in Java erstellt. Die Züge des PC's waren, und sind es immernoch, nur durch ein Zufallssystem gesteuert - Und genau dies möchte ich ändern. Allerdings habe ich nicht mal den Ansatz einer Idee, wie ich dies umsetzen könnte - Daher wollte ich hier mal fragen, ob ihr mir so ungefähr erklären könnte, was wie wo.

MfG


----------



## gman (9. Dez 2012)

Hier ein paar Links aus diesem Forum:

http://www.java-forum.org/allgemeine-java-themen/9703-ki-fuer-tictactoe-spiel.html
http://www.java-forum.org/java-basics-anfaenger-themen/133144-tictactoe-ki.html
http://www.java-forum.org/allgemeine-java-themen/29100-tictactoe-ki-player-heuristik.html
http://www.java-forum.org/java-basics-anfaenger-themen/4768-tic-tac-toe-ki-funktioniert.html

Und einmal kurz über den Tellerrand geschaut:

Algorithms and Java Technology: How To Create Tic Tac Toe AI (Java)


----------



## Marco13 (9. Dez 2012)

... und in den ganzen Links wird nicht einmal Alpha-beta pruning - Wikipedia, the free encyclopedia beschrieben :noe:


----------



## Javaanfänger12 (10. Dez 2012)

Du könntest zuerst einmal if abfragen starten, die prüfen ob der computer gewinnen kann ... Wenn ja dann sollte er das auch tun. Mit if () und eben else if ()
Daraufhin musst du ihm auf die gleiche weise sagen dass er, wenn der spieler im nächsten zug gewinnen könnte dieses verhindert. Das alles dann auch in else if () sodass er den rest überspringt wenn er schon gewonnen hat. 
Zum schluss solltest du ihm noch (ebenfalls in else if () ) sagen dass er wenn die mitte frei ist dorthin setzten soll. 
So spielt er meist schon ein ganzes spiel durch. Für den fall das nichts vom oben genannten zutrifft könntest zu ihm dann in einer else () abfrage sagen dass er wieder per zufall setzten soll. 
Damit hat man einen schon sehr guten tic tac toe computer.
Weiter ausbessern kann man das dann noch mit einigen spezialfällen die du dann vor die zufalls-elseabfrage setzten solltest .
Diese reihe von if () {} else if () {} und else {} musst du immer dann aufrufen wenn du deinen zug gemacht hast .
Hoffe ich konnte dir ein paar anregungen geben .


----------



## Marco13 (10. Dez 2012)

```
if ( ... ) // First move
{
    
}
else
{
    if ( ... ) // Second move
    {
    }
    else
    {
    ..
                                if ( ... ) // Ninth move
                                {
                                   ...
                                }
    ...
    }
}
```
!?


----------



## schlingel (10. Dez 2012)

> ... und in den ganzen Links wird nicht einmal Alpha-beta pruning - Wikipedia, the free encyclopedia beschrieben



Wofür auch. TicTacToe ist trivial genug für die Breitensuche.


----------



## Marco13 (10. Dez 2012)

Ja, sicher, aber so gesehen ist es auch trivial genug für einen Haufen if-Abfragen  Manche Leute wollen "wachsen"


----------



## schlingel (10. Dez 2012)

Das wären aber ne Menge IFs ...

Aber falls tatsächlich Interesse an MinMax mit Alpha Beta Pruning besteht: Hier ist ein nettes Video was Alpha Beta Pruning sehr verständlich erklärt:

Alpha Beta Pruning anhand eines Beispiels


----------

