Bordure totalement implémentée
Ajout et support total des fonctions de bordure !
This commit is contained in:
parent
39655bf040
commit
e99225f070
1 changed files with 50 additions and 27 deletions
77
genForet.py
77
genForet.py
|
|
@ -24,6 +24,7 @@ import tkinter as tk
|
||||||
|
|
||||||
|
|
||||||
def genForet(n, p):
|
def genForet(n, p):
|
||||||
|
''' Fonction générant la forêt '''
|
||||||
if n >= 2:
|
if n >= 2:
|
||||||
foret = np.full(shape=(n, n), fill_value=0)
|
foret = np.full(shape=(n, n), fill_value=0)
|
||||||
for i in range(0, foret.shape[0]):
|
for i in range(0, foret.shape[0]):
|
||||||
|
|
@ -36,6 +37,7 @@ def genForet(n, p):
|
||||||
|
|
||||||
|
|
||||||
def genForetBordure(n, p):
|
def genForetBordure(n, p):
|
||||||
|
''' Fonction générant la forêt et une bordure '''
|
||||||
if n >= 2:
|
if n >= 2:
|
||||||
foret = np.full(shape=(n+1, n+1), fill_value=0)
|
foret = np.full(shape=(n+1, n+1), fill_value=0)
|
||||||
for i in range(0, foret.shape[0]):
|
for i in range(0, foret.shape[0]):
|
||||||
|
|
@ -50,7 +52,8 @@ def genForetBordure(n, p):
|
||||||
raise ValueError("n doit prendre une valeur de 2 au moins")
|
raise ValueError("n doit prendre une valeur de 2 au moins")
|
||||||
|
|
||||||
|
|
||||||
def enflammer(foret, x, y): # Fonction mettant le feu aléatoirement à une case
|
def enflammer(foret, x, y):
|
||||||
|
''' Fonction mettant le feu aléatoirement à une case '''
|
||||||
if x == -1:
|
if x == -1:
|
||||||
x = random.randint(0, foret.shape[0]-1)
|
x = random.randint(0, foret.shape[0]-1)
|
||||||
if y == -1:
|
if y == -1:
|
||||||
|
|
@ -60,11 +63,13 @@ def enflammer(foret, x, y): # Fonction mettant le feu aléatoirement à une cas
|
||||||
return foretEnflammée
|
return foretEnflammée
|
||||||
|
|
||||||
|
|
||||||
def enflammerBordure(foret, x, y): # Fonction mettant le feu aléatoirement à une case
|
def enflammerBordure(foret, x, y):
|
||||||
if x == -1 or x == 0:
|
''' Fonction mettant le feu aléatoirement à une case
|
||||||
x = random.randint(1, foret.shape[0]-1)
|
en tenant compte de la bordure'''
|
||||||
if y == -1 or x == 0:
|
if x == -1 or x == 0 or x == foret.shape[0]-1:
|
||||||
y = random.randint(1, foret.shape[1]-1)
|
x = random.randint(1, foret.shape[0]-2)
|
||||||
|
if y == -1 or y == 0 or y == foret.shape[1]-1:
|
||||||
|
y = random.randint(1, foret.shape[1]-2)
|
||||||
foretEnflammée = np.copy(foret)
|
foretEnflammée = np.copy(foret)
|
||||||
foretEnflammée[x, y] = -1
|
foretEnflammée[x, y] = -1
|
||||||
return foretEnflammée
|
return foretEnflammée
|
||||||
|
|
@ -130,19 +135,23 @@ def feuDeForet(F):
|
||||||
for i in range(0, F[k].shape[0]):
|
for i in range(0, F[k].shape[0]):
|
||||||
for j in range(0, F[k].shape[1]):
|
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] == -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
|
if F[k-1][i, j] == 0:
|
||||||
propager2(F, k, i, j)
|
''' 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
|
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
|
elif F[k-2][i, j] == -1:
|
||||||
propager2(F, k, i, j)
|
'''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
|
F[k][i, j] = -2
|
||||||
else: # La case a été mise en feu, elle propage le feu
|
else:
|
||||||
propager2(F, k, i, j)
|
''' La case a été mise en feu, elle propage le feu '''
|
||||||
|
propager(F, k, i, j)
|
||||||
print(F[k], "Rang : {}".format(k))
|
print(F[k], "Rang : {}".format(k))
|
||||||
k = k+1
|
k = k+1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def feuDeForetBordure(F):
|
def feuDeForetBordure(F):
|
||||||
k = 2
|
k = 2
|
||||||
while -1 in F[k-1]:
|
while -1 in F[k-1]:
|
||||||
|
|
@ -150,14 +159,19 @@ def feuDeForetBordure(F):
|
||||||
for i in range(0, F[k].shape[0]):
|
for i in range(0, F[k].shape[0]):
|
||||||
for j in range(0, F[k].shape[1]):
|
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] == -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
|
if F[k-1][i, j] == 0:
|
||||||
propager2(F, k, i, j)
|
''' 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
|
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
|
elif F[k-2][i, j] == -1:
|
||||||
propager2(F, k, i, j)
|
''' 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
|
F[k][i, j] = -2
|
||||||
else: # La case a été mise en feu, elle propage le feu
|
else:
|
||||||
propager2(F, k, i, j)
|
''' La case a été mise en feu, elle propage le feu '''
|
||||||
|
propager(F, k, i, j)
|
||||||
print(F[k], "Rang : {}".format(k))
|
print(F[k], "Rang : {}".format(k))
|
||||||
k = k+1
|
k = k+1
|
||||||
|
|
||||||
|
|
@ -172,9 +186,11 @@ def wildfire(n, p, x=-1, y=-1):
|
||||||
|
|
||||||
|
|
||||||
def wildfireBordure(n, p, x=-1, y=-1):
|
def wildfireBordure(n, p, x=-1, y=-1):
|
||||||
F = [genForetBordure(n, p)] # Génération de la forêt selon les paramètres voulus
|
''' Génération de la forêt selon les paramètres voulus '''
|
||||||
|
F = [genForetBordure(n, p)]
|
||||||
print(F[0], "Instant initial")
|
print(F[0], "Instant initial")
|
||||||
F.append(enflammerBordure(F[0], x, y)) # La forêt est enflammée puis stockée
|
''' La forêt est enflammée puis stockée '''
|
||||||
|
F.append(enflammerBordure(F[0], x, y))
|
||||||
print(F[1], "Rang : 1 (Départ de feu)")
|
print(F[1], "Rang : 1 (Départ de feu)")
|
||||||
feuDeForetBordure(F)
|
feuDeForetBordure(F)
|
||||||
return F
|
return F
|
||||||
|
|
@ -184,12 +200,14 @@ def wildfireBordure(n, p, x=-1, y=-1):
|
||||||
|
|
||||||
|
|
||||||
def affichage(F):
|
def affichage(F):
|
||||||
|
''' Utilise la librairie tkinter pour l'affichage de la forêt '''
|
||||||
for k in range(0, len(F)):
|
for k in range(0, len(F)):
|
||||||
fenetre = tk.Tk() # Crée la fenêtre que l'on va modifier
|
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 = tk.Label(fenetre, text="Wildfire") # Met en place le titre
|
||||||
label.pack()
|
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
|
''' 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')
|
canvas = tk.Canvas(fenetre, width=(F[k].shape[0]+2)*10,
|
||||||
|
height=(F[k].shape[1]+2)*10)
|
||||||
tracerRectangles(F[k], canvas)
|
tracerRectangles(F[k], canvas)
|
||||||
canvas.pack()
|
canvas.pack()
|
||||||
bouton = tk.Button(fenetre, text="Suivant", command=fenetre.destroy)
|
bouton = tk.Button(fenetre, text="Suivant", command=fenetre.destroy)
|
||||||
|
|
@ -204,13 +222,18 @@ def pause():
|
||||||
|
|
||||||
|
|
||||||
def tracerRectangles(F, canvas):
|
def tracerRectangles(F, canvas):
|
||||||
|
''' Trace les cases '''
|
||||||
for i in range(0, F.shape[0]):
|
for i in range(0, F.shape[0]):
|
||||||
for j in range(0, F.shape[1]):
|
for j in range(0, F.shape[1]):
|
||||||
if F[i, j] == 1:
|
if F[i, j] == 1:
|
||||||
canvas.create_rectangle((i+1)*10, (j+1)*10, (i+2)*10, (j+2)*10, fill='green', width=0)
|
canvas.create_rectangle((i+1)*10, (j+1)*10, (i+2)*10, (j+2)*10,
|
||||||
|
fill='green', width=0)
|
||||||
elif F[i, j] == -1:
|
elif F[i, j] == -1:
|
||||||
canvas.create_rectangle((i+1)*10, (j+1)*10, (i+2)*10, (j+2)*10, fill='red', width=0)
|
canvas.create_rectangle((i+1)*10, (j+1)*10, (i+2)*10, (j+2)*10,
|
||||||
|
fill='red', width=0)
|
||||||
elif F[i, j] == -2:
|
elif F[i, j] == -2:
|
||||||
canvas.create_rectangle((i+1)*10, (j+1)*10, (i+2)*10, (j+2)*10, fill='black', width=0)
|
canvas.create_rectangle((i+1)*10, (j+1)*10, (i+2)*10, (j+2)*10,
|
||||||
|
fill='black', width=0)
|
||||||
elif F[i, j] == 2:
|
elif F[i, j] == 2:
|
||||||
canvas.create_rectangle((i+1)*10, (j+1)*10, (i+2)*10, (j+2)*10, fill='brown', width=0)
|
canvas.create_rectangle((i+1)*10, (j+1)*10, (i+2)*10, (j+2)*10,
|
||||||
|
fill='brown', width=0)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue