Ich hab mal in meienr Sammlung herumgestöbert und meine alten Programme der künstlichen Intelligenz gefunden, welche mit Algorythmen und welche, die lernen.
Anfangs hatte ich es noch für QuickBasic:
Spoiler anzeigen
DIM Count AS INTEGER
DIM OnTurn AS STRING
DIM Lost AS STRING
DIM Won AS LONG
Count = 9
CONST Max = 3
DIM Experience(1 TO Count, 1 TO Max) AS INTEGER
DIM Used(1 TO Count, 1 TO Max) AS INTEGER
CLS
FOR I = 1 TO Count
FOR J = 1 TO Max
Experience(I, J) = 64
NEXT
NEXT
FOR I = 1 TO 100
IF I MOD 2 THEN OnTurn = "Random" ELSE OnTurn = "Thinker"
DO
DO
FOR J = 1 TO Max
P(J) = INT(RND * Experience(Count, J) / 2)
NEXT
Take = 1
IF P(2) > P(1) THEN SWAP P(1), P(2): Take = 2
IF P(3) > P(1) THEN Take = 3
LOOP WHILE Take > Count
IF OnTurn = "Thinker" THEN
Used(Count, Take) = 1
END IF
PRINT "There are still"; STR$(Count); " matches."
PRINT OnTurn; " takes"; STR$(Take); " matches.": PRINT
DO: LOOP WHILE INKEY$ = ""
Count = Count - Take
IF OnTurn = "Random" THEN
OnTurn = "Thinker"
ELSE
OnTurn = "Random"
END IF
LOOP UNTIL Count <= 1
IF Count = 1 THEN
Lost = OnTurn
ELSE
IF OnTurn = "Random" THEN Lost = "Thinker" ELSE Lost = "Random"
END IF
Count = 9
PRINT Lost; " lost the game!"
IF Lost = "Random" THEN
Won = Won + 1
FOR J = 1 TO Count
FOR K = 1 TO Max
IF Used(J, K) THEN
IF Experience(J, K) < 16383 THEN
Experience(J, K) = Experience(J, K) * 2
END IF
Used(J, K) = 0
END IF
NEXT
NEXT
ELSE
FOR J = 1 TO Count
FOR K = 1 TO Max
IF Used(J, K) THEN
IF Experience(J, K) > 1 THEN
Experience(J, K) = Experience(J, K) / 2
END IF
Used(J, K) = 0
END IF
NEXT
NEXT
END IF
GOSUB Result
NEXT
GOSUB Result
END
Result:
CLS
FOR J = 1 TO Count
FOR K = 1 TO Max
LOCATE K + 10, J * 7
PRINT Experience(J, K)
NEXT
NEXT
PRINT : PRINT "Thinker won"; STR$(Won); " of"; STR$(I); " games."
PRINT
RETURN
Alles anzeigen
Ja, das ist eigentlich nur zum "trainieren" des KI, aber von dem Programm hab ich meine Spiele gegen KI gemacht:
BlitzBasic Version Algorythmus:
Spoiler anzeigen
Graphics 1000,500,16,2
AppTitle "AI"
Global OnTurn$=""
Global Lost$=""
SeedRnd MilliSecs()
Global normal=Input("Standard Holzzahl: ")
Global Count=normal
Global Max=3
Dim P(Max)
Dim Experience(Count, Max)
Dim Used(Count, Max)
Global Won=0
Global Ges
Cls
For i = 1 To Count
For j = 1 To Max
Experience(i, j) = 64
Next
Next
load()
res()
Ges=0
Repeat
Ges=Ges+1
If KeyDown(1) Then save():End
If Ges Mod 2 Then OnTurn = "You" Else OnTurn = "Thinker"
Repeat
If OnTurn="Thinker" Then
Print "There are still "+ Count+ " matches."
NP = Int(Count / (Max + 1)) * (Max + 1) + 1
If NP > Count Then NP = NP - Max - 1
Take=Count-NP
If Take<1 Then Take=1
Else
Print "There are still "+ Count+ " matches."
.tak
Take=Input("Write in number to take matches (Max: "+Max+") : ")
If Take>Max Or Take<1 Then Goto tak
FlushKeys
EndIf
If OnTurn = "Thinker" Then
Used(Count, Take) = 1
End If
Print OnTurn+ " takes "+Take+ " matches."
Print ""
;While Not KeyDown(28):Wend:Delay 200
Count = Count - Take
If OnTurn = "You" Then
OnTurn = "Thinker"
Else
OnTurn = "You"
End If
Until Count <= 1
If Count = 1 Then
Lost = OnTurn
Else
If OnTurn = "You" Then Lost = "Thinker" Else Lost = "You"
End If
Count = normal
Print Lost+ " lost the game!"
If Lost = "You" Then
Won = Won + 1
For J = 1 To Count
For K = 1 To Max
If Used(J, K) Then
If Experience(J, K) < 16383 Then
Experience(J, K) = Experience(J, K) * 2
End If
Used(J, K) = 0
End If
Next
Next
Else
For J = 1 To Count
For K = 1 To Max
If Used(J, K) Then
If Experience(J, K) > 1 Then
experience(J, K) = Experience(J, K) / 2
End If
Used(J, K) = 0
End If
Next
Next
End If
res()
Forever
res()
save()
End
Function res()
Cls
For J = 1 To Max
For K = 0 To Count-1
Locate K*8*7 + 2, (J-1)*12
Print Experience(Count-K, J)
Next
Next
Print "": Print "Thinker won "+Won+ " of "+Ges+ " games."
Print ""
End Function
Function save()
file=WriteFile("saveki"+normal+".txt")
For i = 1 To Count
For j = 1 To Max
WriteLine file,Experience(i, j)
Next
Next
CloseFile file
End Function
Function load()
If FileType("saveki"+normal+".txt")=1 Then
file=ReadFile("saveki"+normal+".txt")
For i = 1 To Count
For j = 1 To Max
Experience(i, j)=ReadLine(file)
Next
Next
CloseFile file
EndIf
End Function
Alles anzeigen
Version Lernen:
Spoiler anzeigen
Graphics 1000,500,16,2
AppTitle "KI"
Global OnTurn$=""
Global Lost$=""
SeedRnd MilliSecs()
Global normal=Input("Standard Holzzahl: ")
Global Count=normal
Global Max=3
Dim P(Max)
Dim Experience(Count, Max)
Dim Used(Count, Max)
Global Won=0
Global Ges
Cls
For i = 1 To Count
For j = 1 To Max
Experience(i, j) = 64
Next
Next
load()
res()
Ges=0
Repeat
Ges=Ges+1
If KeyDown(1) Then save():End
If Ges Mod 2 Then OnTurn = "You" Else OnTurn = "Thinker"
Repeat
If OnTurn="Thinker" Then
Print "There are still "+ Count+ " matches."
Repeat
For J=1 To Max
P(J)=Rand(1,2)*Experience(Count, J)/2
Next
Take = 1
If P(2) > P(1) Then xx=P(1): P(1)=P(2):P(2)=xx: Take = 2
If P(3) > P(1) Then Take = 3
Until Take <= Count
Else
Print "There are still "+ Count+ " matches."
.tak
Take=Input("Write in number to take matches (Max: "+Max+") : ")
If Take>Max Or Take<1 Then Goto tak
FlushKeys
EndIf
If OnTurn = "Thinker" Then
Used(Count, Take) = 1
End If
Print OnTurn+ " takes "+Take+ " matches."
Print ""
;While Not KeyDown(28):Wend:Delay 200
Count = Count - Take
If OnTurn = "You" Then
OnTurn = "Thinker"
Else
OnTurn = "You"
End If
Until Count <= 1
If Count = 1 Then
Lost = OnTurn
Else
If OnTurn = "You" Then Lost = "Thinker" Else Lost = "You"
End If
Count = normal
Print Lost+ " lost the game!"
If Lost = "You" Then
Won = Won + 1
For J = 1 To Count
For K = 1 To Max
If Used(J, K) Then
If Experience(J, K) < 16383 Then
Experience(J, K) = Experience(J, K) * 2
End If
Used(J, K) = 0
End If
Next
Next
Else
For J = 1 To Count
For K = 1 To Max
If Used(J, K) Then
If Experience(J, K) > 1 Then
experience(J, K) = Experience(J, K) / 2
End If
Used(J, K) = 0
End If
Next
Next
End If
res()
Forever
res()
save()
End
Function res()
Cls
For J = 1 To Max
For K = 0 To Count-1
Locate K*8*7 + 2, (J-1)*12
Print Experience(Count-K, J)
Next
Next
Print "": Print "Thinker won "+Won+ " of "+Ges+ " games."
Print ""
End Function
Function save()
file=WriteFile("saveki"+normal+".txt")
For i = 1 To Count
For j = 1 To Max
WriteLine file,Experience(i, j)
Next
Next
CloseFile file
End Function
Function load()
If FileType("saveki"+normal+".txt")=1 Then
file=ReadFile("saveki"+normal+".txt")
For i = 1 To Count
For j = 1 To Max
Experience(i, j)=ReadLine(file)
Next
Next
CloseFile file
EndIf
End Function
Alles anzeigen
Der KI speichert sich, zum trainieren des KI:
Spoiler anzeigen
Graphics 1000,500,16,2
AppTitle "KI_Trainer"
Global OnTurn$=""
Global Lost$=""
SeedRnd MilliSecs()
Global normal=Input("Standard Holzzahl: ")
Global Count=normal
Global Max=3
Dim P(Max)
Dim Experience(Count, Max)
Dim Used(Count, Max)
Global Won=0
Global I
Cls
For i = 1 To Count
For j = 1 To Max
Experience(i, j) = 64
Next
Next
load()
r=Input("Runden zu trainieren: ")
For I = 1 To r
If KeyDown(1) Then save():End
If I Mod 2 Then OnTurn = "Random" Else OnTurn = "Thinker"
Repeat
Repeat
For J=1 To Max
P(J)=Rand(1,2)*Experience(Count, J)/2
Next
Take = 1
If P(2) > P(1) Then xx=P(1): P(1)=P(2):P(2)=xx: Take = 2
If P(3) > P(1) Then Take = 3
Until Take <= Count
If OnTurn = "Thinker" Then
Used(Count, Take) = 1
End If
Print "There are still "+ Count+ " matches."
Print OnTurn+ " takes "+Take+ " matches."
Print ""
;While Not KeyDown(28):Wend:Delay 200
Count = Count - Take
If OnTurn = "Random" Then
OnTurn = "Thinker"
Else
OnTurn = "Random"
End If
Until Count <= 1
If Count = 1 Then
Lost = OnTurn
Else
If OnTurn = "Random" Then Lost = "Thinker" Else Lost = "Random"
End If
Count = normal
Print Lost+ " lost the game!"
If Lost = "Random" Then
Won = Won + 1
For J = 1 To Count
For K = 1 To Max
If Used(J, K) Then
If Experience(J, K) < 16383 Then
Experience(J, K) = Experience(J, K) * 2
End If
Used(J, K) = 0
End If
Next
Next
Else
For J = 1 To Count
For K = 1 To Max
If Used(J, K) Then
If Experience(J, K) > 1 Then
experience(J, K) = Experience(J, K) / 2
End If
Used(J, K) = 0
End If
Next
Next
End If
res()
Next
res()
save()
End
Function res()
Cls
For J = 1 To Max
For K = 0 To Count-1
Locate K*8*7 + 2, (J-1)*12
Print Experience(Count-K, J)
Next
Next
Print "": Print "Thinker won "+Won+ " of "+I+ " games."
Print ""
End Function
Function save()
file=WriteFile("saveki"+normal+".txt")
For i = 1 To Count
For j = 1 To Max
WriteLine file,Experience(i, j)
Next
Next
CloseFile file
End Function
Function load()
If FileType("saveki"+normal+".txt")=1 Then
file=ReadFile("saveki"+normal+".txt")
For i = 1 To Count
For j = 1 To Max
Experience(i, j)=ReadLine(file)
Next
Next
CloseFile file
EndIf
End Function
Alles anzeigen
Und nun die Autoit Version:
Es gibt nur KI, Trainieren geht mit der Blitzbasic Datei (Ich hänge von allem noch Exen an)
Spoiler anzeigen
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=fire.ico
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <GUIConstants.au3>
#include <EditConstants.au3>
Global $OnTurn=""
Global $Lost=""
Global $normal=Inputbox("Holzzahl wählen","Standard Holzzahl: ","10")
Global $Count=$normal
Global Const $Max=3
Global $P[$Max+1]
[/autoit] [autoit][/autoit] [autoit]Global $Experience[$Count+1][$Max+1]
Global $Used[$Count+1][$Max+1]
Global $Won=0
Global $Ges
For $i = 1 To $Count
For $j = 1 To $Max
$Experience[$i][$j] = 64
Next
Next
load()
[/autoit] [autoit][/autoit] [autoit]$Ges=0
[/autoit] [autoit][/autoit] [autoit]#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("KI", 981, 230, 21, 125)
$Label1 = GUICtrlCreateLabel("Es sind noch übrig: ", 16, 8, 164, 17)
$Label2 = GUICtrlCreateLabel("Der Gegner hat genommen: ", 16, 32, 164, 17)
$Button1 = GUICtrlCreateButton("1", 16, 64, 49, 25, 0)
$Button2 = GUICtrlCreateButton("2", 80, 64, 49, 25, 0)
$Button3 = GUICtrlCreateButton("3", 144, 64, 49, 25, 0)
Global $Edit1 = GUICtrlCreateEdit("", 16,120, 953, 81, $ES_READONLY)
GUISetIcon("fire.ico")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
res()
[/autoit] [autoit][/autoit] [autoit]While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
_ex()
EndSwitch
$Ges=$Ges+1
If Mod($Ges,2) Then
$OnTurn = "You"
Else
$OnTurn = "Thinker"
endif
Do
If $OnTurn="Thinker" Then
guictrlsetdata($Label1,"Es sind noch übrig: "& $Count)
Do
For $J=1 To $Max
$P[$J]=Random(1,2)*$Experience[$Count][$J]/2
Next
$Take = 1
If $P[2] > $P[1] Then
$xx=$P[1]
$P[1]=$P[2]
$P[2]=$xx
$Take = 2
endif
If $P[3] > $P[1] Then $Take = 3
Until $Take <= $Count
GUICtrlSetData($Label2,"Der Gegner hat genommen: "&$Take)
Else
guictrlsetdata($Label1,"Es sind noch übrig: "& $Count)
while 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
_ex()
Case $Button1
$Take=1
ExitLoop
Case $Button2
$Take=2
ExitLoop
Case $Button3
$Take=3
ExitLoop
EndSwitch
WEnd
guictrlsetdata($Label1,"Es sind noch übrig: "& $Count)
EndIf
If $OnTurn = "Thinker" Then
$Used[$Count][$Take] = 1
EndIf
$Count = $Count - $Take
If $OnTurn = "You" Then
$OnTurn = "Thinker"
Else
$OnTurn = "You"
EndIf
Until $Count <= 1
If $Count = 1 Then
$Lost = $OnTurn
Else
If $OnTurn = "You" Then
$Lost = "Thinker"
Else
$Lost = "You"
endif
EndIf
$Count = $normal
If $Lost = "You" Then
$Won = $Won + 1
For $J = 1 To $Count
For $K = 1 To $Max
If $Used[$J][$K] Then
If $Experience[$J][$K] < 16383 Then
$Experience[$J][$K] = $Experience[$J][$K] * 2
EndIf
$Used[$J][$K] = 0
EndIf
Next
Next
Else
For $J = 1 To $Count
For $K = 1 To $Max
If $Used[$J][$K] Then
If $Experience[$J][$K] > 1 Then
$Experience[$J][$K] = $Experience[$J][$K] / 2
EndIf
$Used[$J][$K] = 0
EndIf
Next
Next
EndIf
res()
WEnd
Func save()
filedelete("saveki"&$normal&".txt")
$file=Fileopen("saveki"&$normal&".txt",1)
For $i = 1 To $Count
For $j = 1 To $Max
FileWriteLine($file,$Experience[$i][$j])
Next
Next
FileClose($file)
EndFunc
Func load()
If FileExists("saveki"&$normal&".txt") Then
$file=Fileopen("saveki"&$normal&".txt",0)
For $i = 1 To $Count
For $j = 1 To $Max
$Experience[$i][$j]=FileReadLine($file)
Next
Next
FileClose($file)
EndIf
EndFunc
Func res()
guictrlsetdata($Edit1,"")
$txt="Thinker hat "&$Won& " von "&$Ges& " Spielen gewonnen."&@crlf
For $J = 1 To $Max
For $K = 0 To $Count-1
$txt=$txt&$Experience[$Count-$K][$J]&" "
Next
$txt=$txt&@crlf
Next
guictrlsetdata($Edit1,$txt)
EndFunc
Func _ex()
save()
exit
EndFunc
Link für Exen:
http://solidfiles.com/d/1271/
Ich hoffe es gefällt euch, viel Spaß damit