Ein TicTacToe hatte ich auch mal in Pascal.
Bei einem so "einfachen" Spiel ist es noch möglich alle Situationen zu testen.
Dein Algorithmus tut also so, als ob er zunächst ein Feld für den Computer besetzt, dann ein Feld für den Spieler, dann wieder ein Feld für den Computer und so weiter. Das lässt sich rekursiv lösen.
Nun wird zunächst ein Teilbaum gesucht, bei dem alle Blätter zum Sieg führen. Ist einer gefunden, wird dieser Zug gewählt. Wird kein solcher Teilbaum gefunden, suchst Du nach einem, bei dem zumindest kein Blatt zur Niederlage führt und möglichst viele zum Sieg.
Bei TicTacToe ist das noch kein Problem, da nur neun Entscheidungen zu treffen sind und das Spiel bei zwei perfekten Spielern immer unentschieden ausgeht.
Bei anderen Spielen musst Du die Rekursion irgendwann abbrechen und die Situation bewerten. Möglicherweise sollte man die Situation bei jedem Versuch bewerten, um "schlechte" Teilbäume frühzeitig aus der Bewertung zu nehmen und darauf keine Rechenzeit zu verschwenden.
Noch ein Beispiel eines solchen Entscheidungsbaums für TicTacToe:
Angenommen der Spieler O findet die Situation S 1 vor. Er hat drei Möglichkeiten sein O zu setzen. Diese drei testet er und prüft was Spieler X setzen könnte. Für diesen bleiben zwei Möglichkeiten. Beide probiert er aus. Ist damit das Spiel noch nicht beendet (weil Spieler X gewonnen hat), besetzt Spieler O das letzte freie Feld. Die Situationen werden bewertet, indem festgestellt wird, ob Spieler O oder Spieler X gewonnen hat oder ob es ein unentschieden gibt. Daraus ergibt sich, dass er sein O in das Feld unten rechts malen sollte, da er hier noch gewinnen kann aber das schlechteste ein unentschieden ist.
Code:
Simulierte
Entscheidung Entscheidung
Spieler O Spieler X
o o x o o x
-- o o x -- o o x gewonnen
o o x / x x x x o
-- o o x ---|
/ x \ o o x
| -- o o x verloren
| x x
|
|
|
S 1 | o o x o o x
| -- o x x -- o x x unentschieden
o o x | o o x / x o x o o
o x ---+--- o x ---|
x | x o \ o o x
| -- o x verloren
| x o x
|
|
|
| o o x o o x
| -- o x x -- o x x unentschieden
\ o o x / x o x o o
-- o x ---|
x o \ o o x o o x
-- o x -- o o x gewonnen
x x o x x o
Spielen beide Spieler nach einem solchen rekursiv erstellten Entscheidungsbaum, geht TicTacToe immer unentschieden aus.
Bei disem Spiel ließ sich auch "damals" mit beschränkter Rechenkapazität bereits der komplette Entscheidungsbaum bilden, so dass das Unentschieden zwischen zwei Computern sicher war. Bei anderen Spielen, wie Vier gewinnt, Dame, Schach, Mühle etc. gibt es zu viele Möglichkeiten, so dass Du Dir für jedes Spiel einen Bewertungsalgorithmus schreiben musst. Dieser ist natürlich individuell für das Spiel und bewertet die Situation eines nicht zuende aufgestellten Entscheidungsbaums.
Gruß hpvw