Alors voilà, avec le site developpez.com j'ai trouvé comment faire un algorithme MinMax.
Le seul problème, c'est que cela ne fonctionne pas...
Voici mon code source:
► Afficher le texte
Code : Tout sélectionner
#include <array.au3>
Global $profondeur
Global Const $MAXIMUM = 0
Global Const $MINIMUM = 10e3
Global $TicTacToe[3][3]
$TicTacToe[0][0] = "O"
$TicTacToe[1][0] = "O"
_IA($TicTacToe,"X",4)
Func _IA($Jeu,$Joueur,$prof)
$max=$MAXIMUM
Local $maxi=-1,$maxj=-1
If $prof<>0 Or Not _Fin($Jeu) Then
For $i=0 To 2
For $j=0 To 2
If $Jeu[$i][$j]="" Then
$Jeu[$i][$j]=$Joueur
$tmp=_CalcMin($Jeu,$Joueur,$prof-1)
If $tmp>$max Or $tmp=$max Then
$max=$tmp
$maxi=$i
$maxj=$j
EndIf
$Jeu[$i][$j]=""
EndIf
Next
Next
EndIf
MsgBox(0,"",$maxi&","&$maxj)
_ArrayDisplay($Jeu)
EndFunc
Func _CalcMax($Jeu,$Joueur,$prof)
$max=$MINIMUM
Local $tmp
If $prof=0 Then Return _EvaluationDuJeu($Jeu,$Joueur)
If _Fin($Jeu) Then Return _EvaluationDuJeu($Jeu,$Joueur)
For $i=0 To 2
For $j=0 To 2
If $Jeu[$i][$j]="" Then
$Jeu[$i][$j]=$Joueur
$tmp=_CalcMin($Jeu,$Joueur,$prof-1)
If $tmp>$max Then
$max=$tmp
EndIf
$Jeu[$i][$j]=""
EndIf
Next
Next
Return $max
EndFunc
Func _CalcMin($Jeu,$Joueur,$prof)
$min=$MAXIMUM
Local $tmp
If $prof=0 Then Return _EvaluationDuJeu($Jeu,$Joueur)
If _Fin($Jeu) Then Return _EvaluationDuJeu($Jeu,$Joueur)
For $i=0 To 2
For $j=0 To 2
If $Jeu[$i][$j]="" Then
$Jeu[$i][$j]=$Joueur
$tmp=_CalcMax($Jeu,$Joueur,$prof-1)
If $tmp<$min Then
$min=$tmp
EndIf
$Jeu[$i][$j]=""
EndIf
Next
Next
Return $min
EndFunc
Func _EvaluationDuJeu($Jeu, $Joueur)
Switch $Joueur
Case "X"
If $Jeu[0][1] = "O" And $Jeu[1][1] = "O" And $Jeu[2][2] = "O" Then
Return -10
EndIf
If $Jeu[0][2] = "O" And $Jeu[1][2] = "O" And $Jeu[2][2] = "O" Then
Return -10
EndIf
If $Jeu[0][0] = "O" And $Jeu[0][1] = "O" And $Jeu[0][2] = "O" Then
Return -10
EndIf
If $Jeu[0][0] = "O" And $Jeu[1][1] = "O" And $Jeu[2][2] = "O" Then
Return -10
EndIf
If $Jeu[0][0] = "O" And $Jeu[1][0] = "O" And $Jeu[2][0] = "O" Then
Return -10
EndIf
If $Jeu[1][0] = "O" And $Jeu[1][1] = "O" And $Jeu[1][2] = "O" Then
Return -10
EndIf
If $Jeu[2][0] = "O" And $Jeu[2][1] = "O" And $Jeu[2][2] = "O" Then
Return -10
EndIf
If $Jeu[2][0] = "O" And $Jeu[1][1] = "O" And $Jeu[0][2] = "O" Then
Return -10
EndIf
If $Jeu[0][1] = "X" And $Jeu[1][1] = "X" And $Jeu[2][2] = "X" Then
Return 10
EndIf
If $Jeu[0][2] = "X" And $Jeu[1][2] = "X" And $Jeu[2][2] = "X" Then
Return 10
EndIf
If $Jeu[0][0] = "X" And $Jeu[0][1] = "X" And $Jeu[0][2] = "X" Then
Return 10
EndIf
If $Jeu[0][0] = "X" And $Jeu[1][1] = "X" And $Jeu[2][2] = "X" Then
Return 10
EndIf
If $Jeu[0][0] = "X" And $Jeu[1][0] = "X" And $Jeu[2][0] = "X" Then
Return 10
EndIf
If $Jeu[1][0] = "X" And $Jeu[1][1] = "X" And $Jeu[1][2] = "X" Then
Return 10
EndIf
If $Jeu[2][0] = "X" And $Jeu[2][1] = "X" And $Jeu[2][2] = "X" Then
Return 10
EndIf
If $Jeu[2][0] = "X" And $Jeu[1][1] = "X" And $Jeu[0][2] = "X" Then
Return 10
EndIf
Return 0
Case "O"
If $Jeu[0][1] = "X" And $Jeu[1][1] = "X" And $Jeu[2][2] = "X" Then
Return -10
EndIf
If $Jeu[0][2] = "X" And $Jeu[1][2] = "X" And $Jeu[2][2] = "X" Then
Return -10
EndIf
If $Jeu[0][0] = "X" And $Jeu[0][1] = "X" And $Jeu[0][2] = "X" Then
Return -10
EndIf
If $Jeu[0][0] = "X" And $Jeu[1][1] = "X" And $Jeu[2][2] = "X" Then
Return -10
EndIf
If $Jeu[0][0] = "X" And $Jeu[1][0] = "X" And $Jeu[2][0] = "X" Then
Return -10
EndIf
If $Jeu[1][0] = "X" And $Jeu[1][1] = "X" And $Jeu[1][2] = "X" Then
Return -10
EndIf
If $Jeu[2][0] = "X" And $Jeu[2][1] = "X" And $Jeu[2][2] = "X" Then
Return -10
EndIf
If $Jeu[2][0] = "X" And $Jeu[1][1] = "X" And $Jeu[0][2] = "X" Then
Return -10
EndIf
If $Jeu[0][1] = "O" And $Jeu[1][1] = "O" And $Jeu[2][2] = "O" Then
Return 10
EndIf
If $Jeu[0][2] = "O" And $Jeu[1][2] = "O" And $Jeu[2][2] = "O" Then
Return 10
EndIf
If $Jeu[0][0] = "O" And $Jeu[0][1] = "O" And $Jeu[0][2] = "O" Then
Return 10
EndIf
If $Jeu[0][0] = "O" And $Jeu[1][1] = "O" And $Jeu[2][2] = "O" Then
Return 10
EndIf
If $Jeu[0][0] = "O" And $Jeu[1][0] = "O" And $Jeu[2][0] = "O" Then
Return 10
EndIf
If $Jeu[1][0] = "O" And $Jeu[1][1] = "O" And $Jeu[1][2] = "O" Then
Return 10
EndIf
If $Jeu[2][0] = "O" And $Jeu[2][1] = "O" And $Jeu[2][2] = "O" Then
Return 10
EndIf
If $Jeu[2][0] = "O" And $Jeu[1][1] = "O" And $Jeu[0][2] = "O" Then
Return 10
EndIf
Return 0
EndSwitch
EndFunc ;==>_EvaluationDuJeu
Func _Fin($Jeu)
For $i=0 to UBound($Jeu)-1
For $j=0 to UBound($Jeu,2)-1
If $Jeu[$i][$j]="" Then Return False
Next
Next
Return True
EndFuncMerci d'avance!



