On va donc considérer maintenant une grille, composée donc de cellules qui comme expliqué précédemment vont vivre et mourrir au fur et à mesure des itérations.
Pour détermine leur état à la prochaine itération, on ne va plus considérer que les cellules voisines de droite et de gauche, mais celles se trouvant tout autour de la cellule dont on détermine l'état, soit : au nord-est, au nord, au nord-ouest, à l'est, à l'ouest, au sud-est, au sud, au sud-ouest.
Mais au fait, vous avez sans doute déjà entendu parler d'un automate cellulaire à deux dimensions : le jeu de la vie !
Ben oui, le jeu de la vie, que l'on trouve sur moults machines, est en fait un automate cellulaire à 2 dimensions dont les règles sont les suivantes :
* Si la cellule est vivante et entourée par deux ou trois cellules vivantes, elle reste en vie à la génération suivante, sinon elle meurt.
* Si la cellule est morte et entourée par exactement trois cellules vivantes, elle naît à la génération suivante.
C'est tout ... facile non ?
Mine de rien, ces règles basiques vont donner lieu à un ballet quasi hypnotique où vous allez voir des formes assez étonnantes, d'ailleurs si vous exécutez le code suivant, et que vous le regardez s'exécuter jusqu'au bout (110 itérations), vous verrez apparaître ... un clown ! si si promis ...
- Code: Tout sélectionner
' Automate cellulaire … deux dimensions
' Jerome Savidan 2009
'
' Dans le cadre de la valeur C du Cnam de Lille 2009-2010
'
' calcul du nombre de colonnes et lignes texte affichables
ncols%=@greatestpowerof2(320)
nlines%=@greatestpowerof2(200)
cols%=2^ncols%
lines%=2^nlines%
maxcol%=cols%-1
maxline%=lines%-1
'
' tableau des cellules de l'automate … g‚n‚rations n et n+1
DIM cells%(cols%*lines%),cellsnplusun%(cols%*lines%)
'
' pr‚paration du motif de d‚part
' centre
cells%((cols%*lines%)/2+cols%/2)=0
cellsnplusun%((cols%*lines%)/2+cols%/2)=0
' ouest
cells%((cols%*lines%)/2+cols%/2-1)=1
cellsnplusun%((cols%*lines%)/2+cols%/2-1)=1
' est
cells%((cols%*lines%)/2+cols%/2+1)=1
cellsnplusun%((cols%*lines%)/2+cols%/2+1)=1
' nord
cells%((cols%*lines%)/2-cols%/2)=1
cellsnplusun%((cols%*lines%)/2-cols%/2)=1
' nord ouest
cells%((cols%*lines%)/2-cols%/2-1)=1
cellsnplusun%((cols%*lines%)/2-cols%/2-1)=1
' nord est
cells%((cols%*lines%)/2-cols%/2+1)=1
cellsnplusun%((cols%*lines%)/2-cols%/2+1)=1
' sud
cells%((cols%*lines%)/2+3*cols%/2)=0
cellsnplusun%((cols%*lines%)/2+3*cols%/2)=0
' sud ouest
cells%((cols%*lines%)/2+3*cols%/2-1)=1
cellsnplusun%((cols%*lines%)/2+3*cols%/2-1)=1
' sud est
cells%((cols%*lines%)/2+3*cols%/2+1)=1
cellsnplusun%((cols%*lines%)/2+3*cols%/2+1)=1
'VOID INP(2)
'
' boucle principale
' l'automate va se d‚velopper sur 110 it‚rations
FOR r%=0 TO 110
CLS
' effet graphique pour rendre l'esth‚tique plus agr‚able
' vst_effects(MOD(r%,5))
' on boucle sur toutes les cases de la grille
FOR tx%=0 TO cols%*lines%-1
x%=AND(tx%,maxcol%)
y%=SHR(tx%,ncols%)
cells%(tx%)=cellsnplusun%(tx%)
' vst_color(MOD(r%,15)+1)
' affichage de la cellule dans son etat actuel, 0 la cellulee est morte, pas d'affichage
' 1, la cellule est vivante on l'affiche
IF cells%(tx%)=1
PLOT x%,y%
ENDIF
' n%=cells%(tx%)
' ouest
n%=0
IF x%>=1
n%=n%+cells%(tx%-1)
ENDIF
' est
IF x%<(maxcol%)
n%=n%+cellsnplusun%(tx%+1)
ENDIF
' nord-ouest
IF y%>=1 AND x%>=1
n%=n%+cells%(tx%-cols%-1)
ENDIF
' nord-est
IF y%>=1 AND x%<(maxcol%)
n%=n%+cells%(tx%-cols%+1)
ENDIF
' nord
IF y%>=1
n%=n%+cells%(tx%-cols%)
ENDIF
' sud-ouest
IF y%<(maxline%) AND x%>=1
n%=n%+cellsnplusun%(tx%+cols%-1)
ENDIF
' sud-est
IF y%<(maxline%) AND x%<(maxcol%)
n%=n%+cellsnplusun%(tx%+cols%+1)
ENDIF
' sud
IF y%<(maxline%)
n%=n%+cellsnplusun%(tx%+cols%)
ENDIF
' IF MOD(n%,2)=1
' cellsnplusun%(tx%)=1
' ELSE
' cellsnplusun%(tx%)=0
' ENDIF
IF n%=3
cellsnplusun%(tx%)=1
ELSE
IF n%=2
cellsnplusun%(tx%)=cells%(tx%)
ELSE
cellsnplusun%(tx%)=0
ENDIF
ENDIF
NEXT tx%
' PAUSE 20
NEXT r%
SHOWM
VOID INP(2)
'
' procedures et fonctions
'
FUNCTION greatestpowerof2(n%)
FOR i%=9 TO 1 STEP -1
IF BTST(n%,i%)
RETURN i%
ENDIF
NEXT i%
RETURN 0
ENDFUNC
'
Vous êtes évidemment libres de changer le motif de départ, ou même de changer les règles d'évolutions. Il est par exemple possible de faire vivre ou mourrir la cellule en fonction du nombre, pair ou impair, de voisins immédiats qu'elle a dans son entourage, auquel cas vous verrez que le motif aura tendance à s'auto-répliquer dans le temps (en IA on parle de la propriété d'auto réplication des automates cellulaires).