bonjour, je suis éleve de terminale S SI et j'ai pour projet en Information Sciences du Numérique (ISN) de programmer un feu de foret sous Python , voici mon programme pour l'instant:
from tkinter import *
def damier(): #fonction dessinant le damier
ligne_vert()
ligne_hor()
def click_gauche(event): #fonction rendant vivante la cellule cliquée donc met la valeur 1 pour la cellule cliquée au dico_case
x = event.x -(event.x%c)
y = event.y -(event.y%c)
can1.create_rectangle(x, y, x+c, y+c, fill='red')
dico_case[x,y]=1
def click_droit(event): #fonction tuant la cellule cliquée donc met la valeur 0 pour la cellule cliquée au dico_case
x = event.x -(event.x%c)
y = event.y -(event.y%c)
can1.create_rectangle(x, y, x+c, y+c, fill='green')
dico_case[x,y]=0
def change_vit(event): #fonction pour changer la vitesse(l'attente entre chaque étape)
global vitesse
vitesse = int(eval(entree.get()))
print(vitesse)
def go():
"démarrage de l'animation"
global flag
if flag ==0:
flag =1
play()
def stop():
"arrêt de l'animation"
global flag
flag =0
def play(): #fonction comptant le nombre de cellules vivantes autour de chaque cellule
global flag, vitesse
v=0
while v!= width/c:
w=0
while w!= height/c:
x=v*c
y=w*c
# cas spéciaux:
# les coins
if x==0 and y==0: #coin en haut à gauche
compt_viv=0
if dico_case[x, y+c]==1:
compt_viv+=1
if dico_case[x+c, y]==1:
compt_viv+=1
if dico_case[x+c, y+c]==1:
compt_viv+=1
dico_etat[x, y]=compt_viv
elif x==0 and y==int(height-c): #coin en bas à gauche
compt_viv=0
if dico_case[x, y-c]==1:
compt_viv+=1
if dico_case[x+c, y-c]==1:
compt_viv+=1
if dico_case[x+c, y]==1:
compt_viv+=1
dico_etat[x, y]=compt_viv
elif x==int(width-c) and y==0: #coin en haut à droite
compt_viv=0
if dico_case[x-c, y]==1:
compt_viv+=1
if dico_case[x-c, y+c]==1:
compt_viv+=1
if dico_case[x, y+c]==1:
compt_viv+=1
dico_etat[x, y]=compt_viv
elif x==int(width-c) and y==int(height-c): #coin en bas à droite
compt_viv=0
if dico_case[x-c, y-c]==1:
compt_viv+=1
if dico_case[x-c, y]==1:
compt_viv+=1
if dico_case[x, y-c]==1:
compt_viv+=1
dico_etat[x, y]=compt_viv
# cas spéciaux:
# les bords du tableau (sans les coins)
elif x==0 and 0<y0:
fen1.after(vitesse,play)
def redessiner(): #fonction redessinant le tableau à partir de dico_etat
can1.delete(ALL)
damier()
t=0
while t!= width/c:
u=0
while u!= height/c:
x=t*c
y=u*c
if dico_etat[x,y]==3:
dico_case[x,y]=1
can1.create_rectangle(x, y, x+c, y+c, fill='red')
elif dico_etat[x,y]==2:
if dico_case[x,y]==1:
can1.create_rectangle(x, y, x+c, y+c, fill='red')
else:
can1.create_rectangle(x, y, x+c, y+c, fill='red')
elif dico_etat[x,y]<2 or dico_etat[x,y]>3:
dico_case[x,y]=0
can1.create_rectangle(x, y, x+c, y+c, fill='green')
u+=1
t+=1
#les différentes variables:
# taille de la grille
height = 600
width = 600
#taille des cellules
c = 20
#vitesse de l'animation (en réalité c'est l'attente entre chaque étapes en ms)
vitesse=50
flag=0
dico_etat = {} #dictionnaire contenant le nombre de cellules vivantes autour de chaque cellule
dico_case = {} #dictionnaire contenant les coordonnées de chaques cellules et une valeur 0 ou 1 si elles sont respectivement mortes ou vivantes
i=0
while i!= width/c: #assigne une valeur 0(morte) a chaque coordonnées(cellules) (valeur par défault en quelque sorte ^^)
j=0
while j!= height/c:
x=i*c
y=j*c
dico_case[x,y]=0
j+=1
i+=1
voila mais je n'arrive pas a imposer des conditions pour qu'une case rouge (arbre en feu) reste rouge (en feu) pouvez vous m'aider svp ?...
merci cordialement .
senneville
bonsoir,
je ne suis pas expert en python mais en examinant
la source de ton programme je remarque que tu ne respectes pas les indentations comme par
exemple :
def ligne vert():
c_x = 0
while c_x != width :
can.create_line(c_x,0,c_x,height.
c_x+=0
def ligne_hor():
................
il conviendrait dans un premier temps de respecter cette règle absolument indispensable