#-*- coding:utf8 -*-
from numpy import zeros
from random import randint
from Tkinter import *
class FeuForet(Frame):
# Code des couleurs :
# - 0 : sans arbre,
# - 1 : arbre,
# - 2 : arbre en feu,
# - 3 : arbre brûlé.
_couleur = {0:'white', 1:'green', 2:'red', 3: 'black'}
_n = 32
def __init__(self, taille = 512, densite = 0.6, temps = 300):
self._n = taille
self._foret = zeros((self._n,self._n))
Frame.__init__(self)
self.pack()
self._can = Canvas(self,bg='white',height=512,width=512)
self._can.pack()
for k in range(int(densite*taille*taille)):
self._foret[randint(0,self._n-1),randint(0,self._n-1)]=1
self.representeForet()
self.miseAFeu()
for k in range(temps):
self.representeForet()
self.miseAJour()
def miseAFeu(self):
self._foret[45,50]=2
def miseAJour(self):
#Cette méthode contient la règle d'évolution de l'automate cellulaire.
# La règle est simple : si une cellule est en feu, alors :
# - elle communique le feu à la cellule du haut, du bas, de la droite et de la gauche,
# - elle s'éteint.
# Bien sûr, il faut faire attention aux bords.
matrice = zeros((self._n,self._n))
for k in range(self._n):
for l in range(self._n):
if self._foret[k,l] == 2:
matrice[k,l] = 3
for (m,p) in ((k-1,l),(k+1,l),(k,l+1),(k,l-1)):
if m in (-1,self._n) or p in (-1,self._n):
pass
elif self._foret[m,p] == 1:
matrice[m,p] = 2
elif matrice[k,l]==0:
matrice[k,l] = self._foret[k,l]
self._foret = matrice
def representeForet(self):
for k in range(self._n):
for l in range(self._n):
self._can.create_rectangle(k*512/self._n,l*512/self._n,(k+1)*512/self._n,(l+1)*512/ self._n,fill=self._couleur[self._foret[k,l]])
self.update()
#if __name__ == _main_:
#FeuForet(taille = 512, densite = 0.8, temps = 300).mainloop()
FeuForet(taille = 128, densite = 0.8, temps = 300).mainloop()