Gioco della vita, versione autoit xD

« Older   Newer »
  Share  
xMasteRx
icon11  CAT_IMG Posted on 16/4/2011, 06:06     +1   -1




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: QUI


ps: 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
 
Top
Cale92
CAT_IMG Posted on 16/4/2011, 06:35     +1   -1




bello master con le checkbox XD comunque io ho fatto il sito e basta in modo che facevamo li l'upload dei file e mettevamo il link diretto tutto il resto l'ha fatto front quindi chiedi a lui perché io non ne so nulla XD
 
Top
themetaldrummer
CAT_IMG Posted on 16/4/2011, 11:03     +1   -1




xD bello! anche se non capisco, quelle spuntate formano una parola?
 
Top
I.Ren
CAT_IMG Posted on 16/4/2011, 12:16     +1   -1




bello :D rende molto di più con l'interfaccia grafica
 
Top
FrontBack
CAT_IMG Posted on 16/4/2011, 16:02     +1   -1




provvedo ;)
 
Top
xMasteRx
CAT_IMG Posted on 16/4/2011, 18:09     +1   -1




CITAZIONE (Cale92 @ 16/4/2011, 07:35)
bello master con le checkbox XD comunque io ho fatto il sito e basta in modo che facevamo li l'upload dei file e mettevamo il link diretto tutto il resto l'ha fatto front quindi chiedi a lui perché io non ne so nulla XD

xD infatti avevo fatto cosi prima lol

CITAZIONE (themetaldrummer @ 16/4/2011, 12:03)
xD bello! anche se non capisco, quelle spuntate formano una parola?

ma leggi la descrizione...

CITAZIONE (I.Ren @ 16/4/2011, 13:16)
bello :D rende molto di più con l'interfaccia grafica

:D

CITAZIONE (FrontBack @ 16/4/2011, 17:02)
provvedo ;)

grazie ;)
 
Top
Gianlu-thebest
CAT_IMG Posted on 18/4/2011, 08:34     +1   -1




Not Bad :D
 
Top
nicofossa96
CAT_IMG Posted on 6/7/2011, 16:21     +1   -1




Ma così non può avere una dimensione infinita :D
(Causa limitazioni autoit)
 
Top
xMasteRx
CAT_IMG Posted on 6/7/2011, 17:15     +1   -1




CITAZIONE (nicofossa96 @ 6/7/2011, 17:21) 
Ma così non può avere una dimensione infinita :D
(Causa limitazioni autoit)

non ho capito xD
 
Top
Seth-Ares
CAT_IMG Posted on 7/3/2012, 10:59     +1   -1




bello dopo un minuto ho chiuso tutto mi ero rotto xdxd
 
Top
xMasteRx
CAT_IMG Posted on 7/3/2012, 17:32     +1   -1




che volevi, 'e piu' che altro un esercizio xD
 
Top
Seth-Ares
CAT_IMG Posted on 7/3/2012, 18:34     +1   -1




si lo so che era un esercizio pero mi face impressioni xdxd
 
Top
11 replies since 16/4/2011, 06:06   642 views
  Share