A des fins de formation (à dispenser à d'autres), j'ai entrepris ce matin de réaliser un petit match-3 (type Candy Crush, pour ceux qui ne seraient pas familiers avec le terme).
J'ai essayé de bien faire mon panneau de boutons (première fois dans des arrays, yay ! ca valait le coup de m'engueuler, les gars

Si vous avez des idées ou correction (en oubliant pas que le programme servira de support pour un cour à des grands débutants, donc pas de compilations d'expression svp

Merci d'avance !
[edit : rajout des icônes en pièce jointe]
[codeautoit]#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $tableau[4][4]
Global $interface[4][4]
Global $points = 0
Global $Form1 = GUICreate("Match3 --- "&$points&" points", 332, 328, 1832, 168)
$interface[0][0] = GUICtrlCreateButton("", 8, 8, 75, 73, $BS_ICON)
$interface[0][1] = GUICtrlCreateButton("", 88, 8, 75, 73, $BS_ICON)
$interface[0][2] = GUICtrlCreateButton("", 168, 8, 75, 73, $BS_ICON)
$interface[0][3] = GUICtrlCreateButton("", 248, 8, 75, 73, $BS_ICON)
$interface[1][0] = GUICtrlCreateButton("", 8, 88, 75, 73, $BS_ICON)
$interface[1][1] = GUICtrlCreateButton("", 88, 88, 75, 73, $BS_ICON)
$interface[1][2] = GUICtrlCreateButton("", 168, 88, 75, 73, $BS_ICON)
$interface[1][3] = GUICtrlCreateButton("", 248, 88, 75, 73, $BS_ICON)
$interface[2][0] = GUICtrlCreateButton("", 8, 168, 75, 73, $BS_ICON)
$interface[2][1] = GUICtrlCreateButton("", 88, 168, 75, 73, $BS_ICON)
$interface[2][2] = GUICtrlCreateButton("", 168, 168, 75, 73, $BS_ICON)
$interface[2][3] = GUICtrlCreateButton("", 248, 168, 75, 73, $BS_ICON)
$interface[3][0] = GUICtrlCreateButton("", 8, 248, 75, 73, $BS_ICON)
$interface[3][1] = GUICtrlCreateButton("", 88, 248, 75, 73, $BS_ICON)
$interface[3][2] = GUICtrlCreateButton("", 168, 248, 75, 73, $BS_ICON)
$interface[3][3] = GUICtrlCreateButton("", 248, 248, 75, 73, $BS_ICON)
Generation_tableau()
Affichage_tableau()
GUISetState(@SW_SHOW)
Controle()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func Generation_tableau()
For $i = 0 To 3
For $j = 0 To 3
$tableau[$i][$j] = Random(1, 4, 1)
Next
Next
EndFunc ;==>Generation_tableau
Func Affichage_tableau()
For $i = 0 To 3
For $j = 0 To 3
GUICtrlSetImage($interface[$i][$j], @ScriptDir & "\" & $tableau[$i][$j] & ".ico")
Next
Next
EndFunc ;==>Affichage_tableau
Func Controle()
Do
$points_tmp = $points
;~ -------------------------------------------------------------------------------
;~ Si plus de trois symboles identiques sont détectés côtes à côtes, on les efface
;~ Barême : 3 en ligne = 1 point, 4 en ligne = 3 points (idem pour les colonnes)
;~ -------------------------------------------------------------------------------
For $i = 0 To 3 ; on commence par les colonnes
If $tableau[0][$i] = $tableau[1][$i] And $tableau[1][$i] = $tableau[2][$i] Then
$tableau[0][$i] = Random(1, 4, 1)
$tableau[1][$i] = Random(1, 4, 1)
$tableau[2][$i] = Random(1, 4, 1)
$points = 1 + $points
ElseIf $tableau[1][$i] = $tableau[2][$i] And $tableau[2][$i] = $tableau[3][$i] Then
$tableau[3][$i] = $tableau[0][$i]
$tableau[0][$i] = Random(1, 4, 1)
$tableau[1][$i] = Random(1, 4, 1)
$tableau[2][$i] = Random(1, 4, 1)
$points = 1 + $points
ElseIf $tableau[0][$i] = $tableau[1][$i] And $tableau[1][$i] = $tableau[2][$i] And $tableau[2][$i] = $tableau[3][$i] Then
$tableau[0][$i] = Random(1, 4, 1)
$tableau[1][$i] = Random(1, 4, 1)
$tableau[2][$i] = Random(1, 4, 1)
$tableau[3][$i] = Random(1, 4, 1)
$points = 3 + $points
EndIf
Next
Sleep(500)
WinSetTitle($Form1,"","Match3 --- "&$points&" points")
Affichage_tableau()
For $j = 0 To 3 ; puis les lignes
If $tableau[$j][0] = $tableau[$j][1] And $tableau[$j][1] = $tableau[$j][2] Then
For $k = $j To 0 Step -1
If $k - 1 >= 0 Then
$tableau[$k][0] = $tableau[$k - 1][0]
$tableau[$k][1] = $tableau[$k - 1][1]
$tableau[$k][2] = $tableau[$k - 1][2]
Else
$tableau[$k][0] = Random(1, 4, 1)
$tableau[$k][1] = Random(1, 4, 1)
$tableau[$k][2] = Random(1, 4, 1)
EndIf
Next
$points = 1 + $points
ElseIf $tableau[$j][1] = $tableau[$j][2] And $tableau[$j][2] = $tableau[$j][3] Then
For $k = $j To 0 Step -1
If $k - 1 >= 0 Then
$tableau[$k][1] = $tableau[$k - 1][1]
$tableau[$k][2] = $tableau[$k - 1][2]
$tableau[$k][3] = $tableau[$k - 1][3]
Else
$tableau[$k][1] = Random(1, 4, 1)
$tableau[$k][2] = Random(1, 4, 1)
$tableau[$k][3] = Random(1, 4, 1)
EndIf
Next
$points = 1 + $points
ElseIf $tableau[$j][0] = $tableau[$j][1] And $tableau[$j][1] = $tableau[$j][2] = $tableau[$j][3] Then
For $k = $j To 0 Step -1
If $k - 1 >= 0 Then
$tableau[$k][0] = $tableau[$k - 1][0]
$tableau[$k][1] = $tableau[$k - 1][1]
$tableau[$k][2] = $tableau[$k - 1][2]
$tableau[$k][3] = $tableau[$k - 1][3]
Else
$tableau[$k][0] = Random(1, 4, 1)
$tableau[$k][1] = Random(1, 4, 1)
$tableau[$k][2] = Random(1, 4, 1)
$tableau[$k][3] = Random(1, 4, 1)
EndIf
Next
$points = 3 + $points
EndIf
Next
Sleep(500)
WinSetTitle($Form1,"","Match3 --- "&$points&" points")
Affichage_tableau()
;~ -------------------------------------------------------------------------------
;~ On laisse tourner la fonction jusqu'à ce qu'après deux vérifications successives,
;~ on obtienne le même nombre de points (càd que plus rien n'est détecté).
Until $points_tmp = $points
;~ -------------------------------------------------------------------------------
Return $points
EndFunc ;==>Controle[/codeautoit]