Update
Affichage ! Arrêt auto de feuDeForet quand plus de flammes
This commit is contained in:
parent
58b285c506
commit
c763e17923
1 changed files with 46 additions and 42 deletions
84
genForet.py
84
genForet.py
|
|
@ -7,6 +7,7 @@ Created on Fri Feb 1 11:30:02 2019
|
|||
import numpy as np
|
||||
import random
|
||||
import tkinter as tk
|
||||
from PIL import Image
|
||||
"""
|
||||
Les états possibles de nos cases :
|
||||
- 0 : pas d'arbre
|
||||
|
|
@ -57,51 +58,54 @@ def propager(F,k,i,j):
|
|||
except IndexError:
|
||||
pass
|
||||
|
||||
def feuDeForet(n, tours, p=0.5, x=-1, y=-1):
|
||||
F=[genForet(n, p)]
|
||||
def feuDeForet(F):
|
||||
k=2
|
||||
while -1 in F[k-1]:
|
||||
F.append(np.copy(F[k-1])) #On copie la forêt du tour précédent
|
||||
|
||||
for i in range(0,F[k].shape[0]):
|
||||
for j in range(0,F[k].shape[1]):
|
||||
if F[k-1][i,j]==-1:#Si la case est en feu au rang k
|
||||
if F[k-1][i,j]==0: #Si cette case ne portait pas d'arbre au rang k-1 alors on propage le feu et la case s'éteint
|
||||
propager(F,k,i,j)
|
||||
F[k][i,j]=0
|
||||
elif F[k-2][i,j]==-1: #Si la case était en feu au tour précédent : propage et mort de l'arbre
|
||||
propager(F,k,i,j)
|
||||
F[k][i,j]=-2
|
||||
else: #La case a été mise en feu, elle propage le feu
|
||||
propager(F,k,i,j)
|
||||
print(F[k], "Rang : {}".format(k))
|
||||
k = k+1
|
||||
|
||||
|
||||
def wildfire(n, p, x=-1, y=-1):
|
||||
F=[genForet(n,p)] #Génération de la forêt selon les paramètres voulus
|
||||
print(F[0], "Instant initial")
|
||||
F.append(enflammer(F[0],x,y)) #On stocke les deux premiers état de notre forêt
|
||||
F.append(enflammer(F[0],x,y)) #La forêt est enflammée puis stockée
|
||||
print(F[1], "Rang : 1 (Départ de feu)")
|
||||
for k in range(2,tours):
|
||||
F.append(np.copy(F[k-1])) #On copie la forêt du tour précédent
|
||||
feuDeForet(F)
|
||||
return F
|
||||
|
||||
def affichage(F):
|
||||
for k in range(0,len(F)):
|
||||
fenetre = tk.Tk() #Crée la fenêtre que l'on va modifier
|
||||
label = tk.Label(fenetre, text="Wildfire") #Met en place le titre
|
||||
label.pack()
|
||||
canvas = tk.Canvas(fenetre, width=(F[k].shape[0]+2)*10, height=(F[k].shape[1]+2)*10,background='#c0c0c0') #On définit le canevas qui affiche notre forêt
|
||||
canvas.create_rectangle(10,10,(F[k].shape[0]+1)*10,(F[0].shape[1]+1)*10,fill='#c68c53')
|
||||
for i in range(0,F[k].shape[0]):
|
||||
for j in range(0,F[k].shape[1]):
|
||||
|
||||
if F[k][i,j]==-1:#Si la case est en feu au rang k
|
||||
if F[k-1][i,j]==0: #Si cette case ne portait pas d'arbre au rang k-1 alors on propage le feu et la case s'éteint
|
||||
propager(F,k,i,j)
|
||||
F[k][i,j]=0
|
||||
elif F[k-2][i,j]==-1: #Si la case était en feu au tour précédent : propage et mort de l'arbre
|
||||
propager(F,k,i,j)
|
||||
F[k][i,j]=-2
|
||||
else: #La case a été mise en feu, elle propage le feu
|
||||
propager(F,k,i,j)
|
||||
print(F[k], "Rang : {}".format(k))
|
||||
return F #Return temporaire
|
||||
|
||||
|
||||
""" def affichage(foret):
|
||||
|
||||
fenetre = tk.Tk() #Crée la fenêtre que l'on va modifier
|
||||
|
||||
label = tk.Label(fenetre, text="Wildfire") #Met en place le titre
|
||||
label.pack()
|
||||
|
||||
canvas = tk.Canvas(fenetre, width=(foret.shape[0]+2)*10, height=(foret.shape[1]+2)*10,background='red') #On définit le canevas qui affiche notre forêt
|
||||
canvas.create_rectangle(10,10,(foret.shape[0]+1)*10,(foret.shape[1]+1)*10,fill='#c68c53')
|
||||
for i in range(0,foret.shape[0]):
|
||||
for j in range(0,foret.shape[1]):
|
||||
if foret[i,j]== 1:
|
||||
canvas.create_rectangle((i+1)*10,(j+1)*10,(i+2)*10,(j+2)*10,fill='green',width=0)
|
||||
elif foret[i,j]==-1:
|
||||
canvas.create_rectangle((i+1)*10,(j+1)*10,(i+2)*10,(j+2)*10,fill='red',width=0)
|
||||
canvas.pack()
|
||||
bouton = tk.Button(fenetre, text="Quitter", command=fenetre.quit)
|
||||
bouton.pack()
|
||||
fenetre.mainloop() #affiche la fenêtre """
|
||||
if F[k][i,j]== 1:
|
||||
canvas.create_rectangle((i+1)*10,(j+1)*10,(i+2)*10,(j+2)*10,fill='green',width=0)
|
||||
elif F[k][i,j]==-1:
|
||||
canvas.create_rectangle((i+1)*10,(j+1)*10,(i+2)*10,(j+2)*10,fill='red',width=0)
|
||||
elif F[k][i,j]==-2:
|
||||
canvas.create_rectangle((i+1)*10,(j+1)*10,(i+2)*10,(j+2)*10,fill='black',width=0)
|
||||
canvas.pack()
|
||||
bouton = tk.Button(fenetre, text="Suivant", command=fenetre.destroy )
|
||||
bouton.pack()
|
||||
fenetre.mainloop() #affiche la fenêtre
|
||||
|
||||
#Fonctions utiles à l'affichage
|
||||
def pause():
|
||||
input("Appuyer sur Entrée pour continuer . . .")
|
||||
#def affichage(F):
|
||||
|
||||
Loading…
Add table
Reference in a new issue