Hallo,
Ich brauche einpar kleine geistigen anregungen für eine "Tic Tac Toe" KI (wenn man es überhuabut KI nennen darf).
Also eben was für möglichkeiten es giebt dem PC Tic Tac Toe spielen bei zu bringen.
Der gedanke war so das der PC immer gewinnt oder unentschieden spielt, eben den best möglichsten lösungsweg nimmt da giebt es bei tic tac toe ja nicht viele.
Die einfachste methode wehre mit IF abfragen alle möglichkeiten durch zu gehen das wehre halt sehr zeitaufwendig und nich sehr Elegant.
Jetzt such ich halt nach weiteren wegen die nicht so aufwendig sind oder einen etwas interesanteren lösungsweg bieten.
ich hoffe ihr könnt mir weiter helfen
mfg Felix
Bisheriges Spiel ohne "KI".
Spoiler anzeigen
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START GUI section ###
[/autoit] [autoit][/autoit] [autoit]$Tic_Tac_Toe_Form = GUICreate("Tic Tac Toe", 400, 400, -1, -1)
[/autoit] [autoit][/autoit] [autoit]Dim $Feld[9]
$Feld_X = 25
$Feld_Y = 25
For $A=0 to 8
[/autoit] [autoit][/autoit] [autoit]$Feld[$A] = GUICtrlCreateButton("", $Feld_X, $Feld_Y, 100, 100)
GUICtrlSetFont(-1, 72, 800, 0, "Comic Sans MS")
$Feld_X = $Feld_X+125
[/autoit] [autoit][/autoit] [autoit]If $Feld_X = 400 Then
$Feld_X = 25
$Feld_Y = $Feld_Y+125
EndIf
Next
[/autoit] [autoit][/autoit] [autoit]GUISetState(@SW_SHOW)
[/autoit] [autoit][/autoit] [autoit]#EndRegion ### END GUI section ###
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Dim $Feld_Aktive [9]
[/autoit] [autoit][/autoit] [autoit]For $B=0 to 8
$Feld_Aktive[$B]=True
Next
$Spieler = "X"
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]While 1
$nMsg = GUIGetMsg()
For $B=0 to 8
Switch $nMsg
Case $Feld[$B]
If $Feld_Aktive[$B] Then
GUICtrlSetData($Feld[$B],_X_O())
$Feld_Aktive[$B] = False
GUICtrlSetState($Feld[$B],$GUI_DISABLE)
_Sieg_Pruefen("X")
_Sieg_Pruefen("O")
EndIf
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
Next
WEnd
[/autoit] [autoit][/autoit] [autoit]Func _X_O ()
[/autoit] [autoit][/autoit] [autoit]If $Spieler = "X" Then
$Spieler = "O"
Return "X"
EndIf
If $Spieler = "O" Then
$Spieler = "X"
Return "O"
EndIf
EndFunc
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func _Sieg_Pruefen($Fuer)
[/autoit] [autoit][/autoit] [autoit]If GUICtrlRead($Feld[0])=$Fuer And GUICtrlRead($Feld[1])=$Fuer And GUICtrlRead($Feld[2])=$Fuer Then
MsgBox (1,"Sieg für "&$Fuer,$Fuer&" hat gewonnen!!!")
Exit
EndIf
If GUICtrlRead($Feld[3])=$Fuer And GUICtrlRead($Feld[4])=$Fuer And GUICtrlRead($Feld[5])=$Fuer Then
MsgBox (1,"Sieg für "&$Fuer,$Fuer&" hat gewonnen!!!")
Exit
EndIf
If GUICtrlRead($Feld[6])=$Fuer And GUICtrlRead($Feld[7])=$Fuer And GUICtrlRead($Feld[8])=$Fuer Then
MsgBox (1,"Sieg für "&$Fuer,$Fuer&" hat gewonnen!!!")
Exit
EndIf
If GUICtrlRead($Feld[0])=$Fuer And GUICtrlRead($Feld[3])=$Fuer And GUICtrlRead($Feld[6])=$Fuer Then
MsgBox (1,"Sieg für "&$Fuer,$Fuer&" hat gewonnen!!!")
Exit
EndIf
If GUICtrlRead($Feld[1])=$Fuer And GUICtrlRead($Feld[4])=$Fuer And GUICtrlRead($Feld[5])=$Fuer Then
MsgBox (1,"Sieg für "&$Fuer,$Fuer&" hat gewonnen!!!")
Exit
EndIf
If GUICtrlRead($Feld[2])=$Fuer And GUICtrlRead($Feld[5])=$Fuer And GUICtrlRead($Feld[8])=$Fuer Then
MsgBox (1,"Sieg für "&$Fuer,$Fuer&" hat gewonnen!!!")
Exit
EndIf
If GUICtrlRead($Feld[0])=$Fuer And GUICtrlRead($Feld[4])=$Fuer And GUICtrlRead($Feld[8])=$Fuer Then
MsgBox (1,"Sieg für "&$Fuer,$Fuer&" hat gewonnen!!!")
Exit
EndIf
If GUICtrlRead($Feld[6])=$Fuer And GUICtrlRead($Feld[4])=$Fuer And GUICtrlRead($Feld[2])=$Fuer Then
MsgBox (1,"Sieg für "&$Fuer,$Fuer&" hat gewonnen!!!")
Exit
EndIf
EndFunc
[/autoit]