| xMasteRx |
| | Allora, come mi ha suggerito I.Ren e come volevo fare qualcosa per allenarmi un po dopo tanto tempo ecco qui una cosuccia fatta in un paio di minuti xD CITAZIONE (I.Ren @ 13/4/2011, 21:12) Descrizione: CITAZIONE Descrizione da wikipedia:
Il gioco della vita (Game of Life in inglese) è un automa cellulare sviluppato dal matematico inglese John Conway sul finire degli anni sessanta. Il gioco della vita è l'esempio più famoso di automa cellulare: il suo scopo è quello di mostrare come comportamenti simili alla vita possano emergere da regole semplici e interazioni a molti corpi, principio che è alla base dell'ecobiologia, la quale si rifà anche alla teoria della complessità. Del gioco sono poi state sviluppate versioni con differenti topologie, ad esempio tridimensionali[1], anche per Matlab[2], differenti regole biologiche, e differenti tipi di cellule.
Si tratta in realtà di un gioco senza giocatori, intendendo che la sua evoluzione è determinata dal suo stato iniziale, senza necessità di alcun input da parte di giocatori umani. Si svolge su una griglia di caselle quadrate (celle) che si estende all'infinito in tutte le direzioni; questa griglia è detta mondo. Ogni cella ha 8 vicini, che sono le celle ad essa adiacenti, includendo quelle in senso diagonale. Ogni cella può trovarsi in due stati: viva o morta (o accesa e spenta, on e off). Lo stato della griglia evolve in intervalli di tempo discreti. Gli stati di tutte le celle in un dato istante sono usati per calcolare lo stato delle celle all'istante successivo. Tutte le celle del mondo vengono quindi aggiornate simultaneamente nel passaggio da un istante a quello successivo: passa così una generazione. Le transizioni di stato dipendono unicamente dal numero di vicini vivi: Una cella morta con esattamente 3 vicini vivi nasce, diventando viva. Una cella viva con 2 o 3 vicini vivi sopravvive; altrimenti muore (per isolamento o sovraffollamento) SOURCE [163linee] [uno dei pocchi che posto direttamente sul forum che ha meno di 500 linee xD]: CODICE #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_icon=AutoIt ArchiveGioco della vita.ico #AutoIt3Wrapper_outfile=AutoIt ArchiveGioco della vita.exe #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** #include<GUIConstantsEx.au3> #include<WindowsConstants.au3>
Opt("GUIOnEventMode", 1) Opt("GUIResizeMode", 802)
#Region ###VARS### Global $gTitle="Gioco della vita; AutoIt version by xMasteRx: v1.1" Global $gWidth=300, $gHeight=300 Global $nCelleW=$gWidth/10, $nCelleH=$gHeight/10, $nSep=5 Global $dRefTime=Number(InputBox($gTitle, "Inserisci il tempo di aggiornamento delle generazioni: quanto minore il tempo più CPU userà... Consigliato: 1secondo, Performance consigliata: 0.3secondi", 0.3)) If Not IsNumber($dRefTime) Then $dRefTime=1 Global $nRandomGenerationFactor=2 Global $cCel[$nCelleW+1][$nCelleH+1] Global $vCel[$nCelleW+1][$nCelleH+1] Global $bCel[$nCelleW+1][$nCelleH+1] Global $AvoidRAW=False Global $GENLabel, $nGEN=1, $totTimer=TimerInit() #EndRegion ###VARS### ;~ #EndRegion ###VARS###
$pGUI=GUICreate($gTitle, $gWidth+20+($nCelleW*1.1)*$nSep, $gHeight+20+($nCelleH*1.1)*$nSep) GUISetOnEvent(-3, "_Exit") For $x=1 To $nCelleW Step 1 For $y=1 To $nCelleH Step 1 $cCel[$x][$y]=GUICtrlCreateCheckbox("", ($x*($gWidth/$nCelleW+$nSep)), ($y*($gHeight/$nCelleH+$nSep)), 15, 15) GUICtrlSetOnEvent($cCel[$x][$y], "_ReadCBS") If Random()<$nRandomGenerationFactor^-1 Then GUICtrlSetState($cCel[$x][$y], $GUI_CHECKED) $vCel[$x][$y]=True Else $vCel[$x][$y]=False EndIf Next Next $GENLabel=GUICtrlCreateLabel("Generazione: 1", 4, 0, $gWidth+20+($nCelleW*1.1)*$nSep-4, 15) GUICtrlCreateLabel("By xMasteRx at http://autoit.forumcommunity.net : click here for more interesting stuff!", 4, $gHeight+20+($nCelleH*1.1)*$nSep-18, $gWidth+20+($nCelleW*1.1)*$nSep-4, 15) GUICtrlSetOnEvent(-1, "_OpenForum") GUICtrlSetColor(-1, 0x3030C0) GUISetState()
AdlibRegister("_NuovaGenerazione", $dRefTime*1000)
Do Sleep(100) Until False
Func _OpenForum() ShellExecute("http://autoit.forumcommunity.net/") EndFunc
Func _ReadCBS() Local $x, $y $gCtrl=@GUI_CtrlID For $x=1 To $nCelleW Step 1 For $y=1 To $nCelleH Step 1 If $cCel[$x][$y]=$gCtrl Then ExitLoop 2 Next Next If $x=$nCelleW+1 Then Return $vCel[$x][$y]=(GUICtrlRead($cCel[$x][$y])=$GUI_CHECKED) EndFunc
Func _WorldReset() Local $x, $y Global $vCel[$nCelleW+1][$nCelleH+1] Global $bCel[$nCelleW+1][$nCelleH+1] For $x=1 To $nCelleW Step 1 For $y=1 To $nCelleH Step 1 $bCel[$x][$y]=Random(0, 1, 1)=1 If Random()<$nRandomGenerationFactor^-1 Then $vCel[$x][$y]=True GUICtrlSetState($cCel[$x][$y], $GUI_CHECKED) Else $vCel[$x][$y]=False GUICtrlSetState($cCel[$x][$y], $GUI_UNCHECKED) EndIf Next Next EndFunc
Func _NuovaGenerazione() If $AvoidRAW=True Then Return $AvoidRAW=True ConsoleWrite("-") Local $lTimer=TimerInit(), $x, $y, $x1, $y1, $c, $nX, $nY, $oCel[$nCelleW+1][$nCelleH+1] If Random()>0.75 Then For $x=1 To $nCelleW Step 1 For $y=1 To $nCelleH Step 1 If Not $bCel[$x][$y]=$vCel[$x][$y] Then ExitLoop 2 Next Next If $x=$nCelleW+1 And $y=$nCelleH+1 Then MsgBox(64, $gTitle, "Mondo stabilizzato: sono tutti estinti o ci sono gruppi estremamente coesi in maniera auto-sufficiente: tra 5 secondi [o appena premi OK] il mondo sarà riavviato!", 5, $pGUI) _WorldReset() $AvoidRAW=False Return Else For $x=1 To $nCelleW Step 1 For $y=1 To $nCelleH Step 1 $bCel[$x][$y]=$vCel[$x][$y] Next Next EndIf EndIf For $x=1 To $nCelleW Step 1 For $y=1 To $nCelleH Step 1 $oCel[$x][$y]=$vCel[$x][$y] Next Next For $x=1 To $nCelleW Step 1 For $y=1 To $nCelleH Step 1 $c=0 For $x1=$x-1 To $x+1 Step 1 For $y1=$y-1 To $y+1 Step 1 $nX=$x1 $nY=$y1 If $nX=$x And $nY=$y Then ContinueLoop If $x1=0 Then $nX=$nCelleW If $y1=0 Then $nY=$nCelleH If $x1=$nCelleW+1 Then $nX=1 If $y1=$nCelleH+1 Then $nY=1 If $nX>=UBound($oCel, 1) Or $nY>=UBound($oCel, 2) Then ContinueLoop 2 If $oCel[$nX][$nY]=True Then $c+=1 Next Next If $vCel[$x][$y]=False Then If $c=3 Then GUICtrlSetState($cCel[$x][$y], $GUI_CHECKED) $vCel[$x][$y]=Not $vCel[$x][$y] EndIf Else If Not ($c=3 Or $c=2) Then GUICtrlSetState($cCel[$x][$y], $GUI_UNCHECKED) $vCel[$x][$y]=Not $vCel[$x][$y] EndIf EndIf Next Next $nGEN+=1 $tTDiff=TimerDiff($totTimer) GUICtrlSetData($GENLabel, "Generazione: "&$nGEN&" in "&Round(TimerDiff($lTimer), 2)&"MS"&@TAB&"1Richiesta a ogni "&($dRefTime*1000)&"MS"&@TAB&"@TOT:"&_Tempo($tTDiff)) ConsoleWrite("Time:"&Round(TimerDiff($lTimer), 2)&@CRLF) $AvoidRAW=False EndFunc
Func _Tempo($timer) $timer=Round($timer/1000) Local $h=Floor(($timer/60)/60), $m=Floor($timer/60) Local $hH=$h, $mM=$m-$h*60, $sS=$timer-$m*60-$h*60 If StringLen($hH)=1 Then $hH="0"&$hH If StringLen($mM)=1 Then $mM="0"&$mM If StringLen($sS)=1 Then $sS="0"&$sS Return $hH&":"&$mM&":"&$sS EndFunc
Func _Exit() Exit EndFunc e per i pigroni come me ecco il eseguibile xD xMasteRx - Admin / Security Decompiler Team & FrontBack - Security Decompiler Tem SecureFile: QUIps: frontback o cale se aggiungete al DB del secure file e poi editate questo topic mi fate un favore perché avete fatto un casinaccio con quelle funzioni per aggiungere al database manualmente e mi rompo a dover capire cosa avete combinato xD Edited by FrontBack - 24/1/2013, 17:40
| | |
| |
|