Hallo Forum!
Mir ist vor kurzem folgende Idee gekommen:
Für viele Leute ist AutoIt immernoch eine "Automatisierungssprache" oder sowas.
Aber AutoIt kann viel mehr!
Und das will ich / wollen wir, mit diesem Projekt beweisen.
Galenda ist ein guter Anfang gewesen für die Au3 Welt, aber meine Idee geht darüber hinaus.
Also habe ich eine winzige TicTacToe KI geschrieben. =)
Nichts großes, und kein wirklich einwandfreier Code. Eben mal schnell hingeklatscht.
*hust*, sie hat mich sauber 8:2 abgezogen...
[autoit]
#cs
Tic-Tac-Toe v0.1
programmiert von Daniel J.
(c) Februar 2009
#ce
#include <GUIConstants.au3>
[/autoit][autoit][/autoit][autoit]Global $app_name = "Tic-Tac-Toe v1.0"
Global $opp_points = 0
Global $you_points = 0
Global $all_turns = 1
[/autoit][autoit][/autoit][autoit]Dim $fields[10]
For $i = 1 To 9
$fields[$i] = " "
Next
Global $gui = GUICreate($app_name, 220, 220)
Global $group_buttons = GUICtrlCreateGroup("Spielfeld", 10, 10, 200, 200)
Dim $buttons[10], $y = 15
For $i = 1 To 9
If (Mod($i, 3) = 1) Then
$x = 10
$y += 40
EndIf
$x += 40
$buttons[$i] = GUICtrlCreateButton(" ", $x, $y, 30, 30)
GUICtrlSetFont(-1, -1, 1000)
Next
GUISetState(@SW_SHOW)
[/autoit][autoit][/autoit][autoit]Global $turn = 0
While 1
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then
Exit
Else
For $i = 1 To 9
If ($msg = $buttons[$i]) Then
If ($fields[$i] = " ") Then
$fields[$i] = "x"
GUICtrlSetBkColor($buttons[$i], 0x00FF00)
GUICtrlSetData($buttons[$i], "x")
If (notOver()) Then
$all_turns += 1
computerTurn()
Else
$you_points += 1
MsgBox(0, $app_name, "You win! MY POINTS: "&$opp_points&" YOUR POINTS: "&$you_points)
newGame()
EndIf
EndIf
EndIf
Next
EndIf
WEnd
Func winChance($letter)
$chance = 0
For $i = 1 To 9
If ($fields[$i] = " ") Then
$fields[$i] = $letter
If (notOver() = False) Then
$chance = $i
EndIf
$fields[$i] = " "
EndIf
Next
Return $chance
EndFunc
Func computerTurn()
$wc = winChance("o")
If ($wc = 0) Then
$wc = winChance("x")
EndIf
If ($wc = 0) Then
Do
$r = Random(1, 9)
If ($fields[$r] = " ") Then
$fields[$r] = "o"
GUICtrlSetBkColor($buttons[$r], 0xFF0000)
GUICtrlSetData($buttons[$r], "o")
$found = True
Else
$found = False
EndIf
Until $found = True
Else
$fields[$wc] = "o"
GUICtrlSetBkColor($buttons[$wc], 0xFF0000)
GUICtrlSetData($buttons[$wc], "o")
EndIf
If (notOver()) Then
$turn = 0
$all_turns += 1
Else
$opp_points += 1
MsgBox(0, $app_name, "I win! MY POINTS: "&$opp_points&" YOUR POINTS: "&$you_points)
newGame()
EndIf
EndFunc
Func notOver()
If ($all_turns = 9) Then
newGame()
EndIf
If (winLine(1, 2, 3) or winLine(1, 4, 7) or winLine(1, 5, 9) or winLine(3, 5, 7) or winLine(3, 6, 9) or winLine(4, 5, 6) or winLine(7, 8, 9) or winLine(2, 5, 8)) Then
Return False
Else
Return True
EndIf
EndFunc
Func newGame()
$all_turns = 1
$turn = 0
For $i = 0 To 9
GUICtrlSetData($buttons[$i], " ")
GUICtrlSetBkColor($buttons[$i], -1)
$fields[$i] = " "
Next
EndFunc
Func winLine($a, $b, $c)
If ($fields[$a] <> " " and $fields[$b] <> " " and $fields[$c] <> " ") Then
If ($fields[$a] = $fields[$b] and $fields[$b] = $fields[$c]) Then
Return True
Else
Return False
EndIf
Else
Return False
EndIf
EndFunc