CODICE
#include <GUIConstants.au3>
#Include <GuiStatusBar.au3>
Opt("GUIOnEventMode", 1)
Dim $refresh = 1000
Dim $cam=0, $nas=0, $mor=0, $vcam=0, $check[30][25], $vicine[30][25], $b=0, $sparti[4] = [150, 300, 450, 500], $sst[4] = ["Generazione: 0", "Nascite: 0", "Decessi: 0", "Refresh: "&$refresh&"ms"], $gen=0
$gui = GUICreate("GdV", 610, 580)
$genera = GUICtrlCreateButton("Genera a caso", 10, 10, 100, 30)
$inizia = GUICtrlCreateButton("Inizia", 120, 10, 100, 30)
$stop = GUICtrlCreateButton("Ferma", 230, 10, 100, 30)
GUICtrlSetState($stop, $GUI_DISABLE)
$sbar = _GUICtrlStatusBar_Create($gui, $sparti, $sst)
GUISetState(@SW_SHOW)
For $y = 50 To 530 Step 20
$a=0
For $x = 10 To 590 Step 20
$check[$a][$b] = GUICtrlCreateCheckbox("", $x, $y, 20, 20)
$a+=1
Next
$b+=1
Next
GUISetOnEvent($GUI_EVENT_CLOSE, "_esci")
GUICtrlSetOnEvent($inizia, "_inizia")
GUICtrlSetOnEvent($stop, "_ferma")
GUICtrlSetOnEvent($genera, "_genera")
While 1
Sleep(100)
WEnd
Func _esci()
Exit
EndFunc
Func _inizia()
GUICtrlSetState($genera, $GUI_DISABLE)
GUICtrlSetState($inizia, $GUI_DISABLE)
GUICtrlSetState($stop, $GUI_ENABLE)
AdlibRegister("_ngen", $refresh)
EndFunc
Func _ferma()
GUICtrlSetState($inizia, $GUI_ENABLE)
GUICtrlSetState($genera, $GUI_ENABLE)
AdlibUnRegister("_ngen")
EndFunc
Func _genera()
For $y = 0 To 24
For $x = 0 To 29
GUICtrlSetState($check[$x][$y], $GUI_UNCHECKED)
Next
Next
$vive = Random(250, 550, 1)
For $i=1 To $vive
GUICtrlSetState($check[Random(0, 29, 1)][Random(0, 24, 1)], $GUI_CHECKED)
Next
$cam=0
$nas=0
$mor=0
$gen=0
_GUICtrlStatusBar_SetText($sbar, "Generazione: "&$gen)
_GUICtrlStatusBar_SetText($sbar, "Nascite: "&$nas, 1)
_GUICtrlStatusBar_SetText($sbar, "Decessi: "&$mor, 2)
EndFunc
Func _ngen()
$gen+=1
For $y = 0 To 24
For $x = 0 To 29
$vicine[$x][$y]=0
For $b=$y-1 To $y+1
For $a=$x-1 To $x+1
If $a>-1 And $b>-1 And $a<30 And $b<24 Then
If GUICtrlRead($check[$a][$b]) = $GUI_CHECKED Then
If $b<>$y Or $a<>$x Then
$vicine[$x][$y]+=1
EndIf
EndIf
EndIf
Next
Next
Next
Next
For $y=0 To 24
For $x=0 To 29
If GUICtrlRead($check[$x][$y])=$GUI_CHECKED And $vicine[$x][$y]<>2 And $vicine[$x][$y]<>3 Then
GUICtrlSetState($check[$x][$y], $GUI_UNCHECKED)
$cam+=1
$mor+=1
ElseIf GUICtrlRead($check[$x][$y])=$GUI_UNCHECKED And $vicine[$x][$y]=3 Then
GUICtrlSetState($check[$x][$y], $GUI_CHECKED)
$cam+=1
$nas+=1
EndIf
$vicine[$x][$y]=0
Next
Next
_GUICtrlStatusBar_SetText($sbar, "Generazione: "&$gen)
_GUICtrlStatusBar_SetText($sbar, "Nascite: "&$nas, 1)
_GUICtrlStatusBar_SetText($sbar, "Decessi: "&$mor, 2)
$vcam=$cam
If $cam = 0 Then
AdlibUnRegister("_ngen")
GUICtrlSetState($genera, $GUI_ENABLE)
GUICtrlSetState($inizia, $GUI_ENABLE)
GUICtrlSetState($stop, $GUI_DISABLE)
MsgBox(0, "Gioco della vita", "Le celle si sono estinte o stabilizzate in "&$gen&" generazioni.")
EndIf
$cam=0
EndFunc