From a1736a608bf2aff1f13571cd8255953e9afcfd2b Mon Sep 17 00:00:00 2001 From: LordOf20th Date: Fri, 14 Jun 2019 14:39:07 +0200 Subject: [PATCH 1/5] Finalisation de la fonction d'affichage 2 Affichage fonctionnel --- genForet.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/genForet.py b/genForet.py index 35cc99c..1681609 100644 --- a/genForet.py +++ b/genForet.py @@ -225,10 +225,11 @@ def affichage2(F): height=(F[0].shape[1]+2)*10) canvas.pack(side=tk.LEFT) tracerRectangles(F[0], canvas) # On trace la forêt initiale + global k k = 0 # Le rang - #sPas = tk.Scale(fenetre, variable=p, orient=tk.HORIZONTAL, _to=10, _from=1) - #sPas.pack(side=tk.BOTTOM) - bSuivant = tk.Button(fenetre, text='Suivant', command= lambda : rangSuivant(F, p, k, canvas)) + # sPas = tk.Scale(fenetre, variable=p, orient=tk.HORIZONTAL, to=10) + # sPas.pack(side=tk.BOTTOM) + bSuivant = tk.Button(fenetre, text='Suivant '+str(p)+' tours', command=lambda: rangSuivant(F, p, k, canvas)) bSuivant.pack() bQuit = tk.Button(fenetre, text='Quitter', command=fenetre.quit) bQuit.pack(side=tk.BOTTOM) @@ -260,8 +261,8 @@ def tracerRectangles(F, canvas): fill='#c0c0c0', width=0) -def rangSuivant(F, p, k, canvas): +def rangSuivant(F, p, r, canvas): global k - k = k + p # On avance le rang du pas + k = r + p # On avance le rang du pas tracerRectangles(F[k], canvas) print(k) From 8534f05133711a004270837e077f96cffbf63b9a Mon Sep 17 00:00:00 2001 From: LordOf20th Date: Fri, 14 Jun 2019 14:46:58 +0200 Subject: [PATCH 2/5] Update genForet.py --- genForet.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/genForet.py b/genForet.py index 1681609..f041a41 100644 --- a/genForet.py +++ b/genForet.py @@ -15,9 +15,9 @@ import tkinter as tk Les états possibles de nos cases : - -1 : un arbre en feu - -2 : un arbre mort - - 0 : pas d'arbre - - 1 : un arbre sain - - 2 : bordure + - 0 : pas d'arbre + - 1 : un arbre sain + - 2 : bordure """ # Fonctions agissant sur la matrice @@ -76,6 +76,7 @@ def enflammerBordure(foret, x, y): def propager(F, k, i, j): + ''' Propage le feu au k ieme tour ''' try: if F[k-1][i-1, j] == 1: # Si la case au dessus est un arbre F[k][i-1, j] = -1 # La case au dessus brûle From 179fc5bc2c73e4e139a8069f0cb6e4fbc851e253 Mon Sep 17 00:00:00 2001 From: LordOf20th Date: Fri, 14 Jun 2019 14:49:15 +0200 Subject: [PATCH 3/5] Update README.md --- README.md | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index f4e8a5c..faba98d 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,6 @@ ## Wildfire - Approche algorithmique et fonctionnelle + + **EN** : Scripts for my class project a wildfire simulation in the "Conway's Game of Life" style to study wildfire propagation. **FR** : Des scripts pour mon projet informatique de prépa BCPST dont le but est de simuler et d'étudier la propagation des feux de forêts à l'aide d'automates cellulaires, en s'inspirant du "Conway's Game of Life" - -***genForet.py*** - - **genForet(n, p)** : - La fonction génère une matrice carrée de taille n\*n avec des 0 et des 1, p représentant la probabilité qu'il y ait un 1 dans une case de la matrice (p=0.25 par défaut) - - - **affichage(foret)** : - La fonction prend en entrée une matrice et génère une forêt selon les règles suivantes : si la case contient un 1 alors il y a un arbre, rien sinon - - - From 40929022061ffbd385350685abf5ba4f27df898b Mon Sep 17 00:00:00 2001 From: LordOf20th Date: Fri, 14 Jun 2019 14:50:32 +0200 Subject: [PATCH 4/5] Changer le nom du fichier contenant les fonction principales --- genForet.py => main.py | 538 ++++++++++++++++++++--------------------- 1 file changed, 269 insertions(+), 269 deletions(-) rename genForet.py => main.py (97%) diff --git a/genForet.py b/main.py similarity index 97% rename from genForet.py rename to main.py index f041a41..3b8e438 100644 --- a/genForet.py +++ b/main.py @@ -1,269 +1,269 @@ -# -*- coding: utf-8 -*- -""" -Created on Fri Feb 1 11:30:02 2019 - -@author: LordOf20th -""" - - -import numpy as np -import random -import tkinter as tk - - -""" - Les états possibles de nos cases : - - -1 : un arbre en feu - - -2 : un arbre mort - - 0 : pas d'arbre - - 1 : un arbre sain - - 2 : bordure -""" - -# Fonctions agissant sur la matrice - - -def genForet(n, p): - ''' Fonction générant la forêt ''' - if n >= 2: - foret = np.full(shape=(n, n), fill_value=0) - for i in range(0, foret.shape[0]): - for j in range(0, foret.shape[1]): - if random.random() <= p: - foret[i, j] = 1 - return foret - else: - raise ValueError("n doit prendre une valeur de 2 au moins") - - -def genForetBordure(n, p): - ''' Fonction générant la forêt et une bordure ''' - if n >= 2: - foret = np.full(shape=(n+1, n+1), fill_value=0) - for i in range(0, foret.shape[0]): - for j in range(0, foret.shape[1]): - if i == 0 or j == 0 or j == n or i == n: - foret[i, j] = 2 - else: - if random.random() <= p: - foret[i, j] = 1 - return foret - else: - raise ValueError("n doit prendre une valeur de 2 au moins") - - -def enflammer(foret, x, y): - ''' Fonction mettant le feu aléatoirement à une case ''' - if x == -1: - x = random.randint(0, foret.shape[0]-1) - if y == -1: - y = random.randint(0, foret.shape[1]-1) - foretEnflammée = np.copy(foret) - foretEnflammée[x, y] = -1 - return foretEnflammée - - -def enflammerBordure(foret, x, y): - ''' Fonction mettant le feu aléatoirement à une case - en tenant compte de la bordure''' - if x == -1 or x == 0 or x == foret.shape[0]-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[x, y] = -1 - return foretEnflammée - - -def propager(F, k, i, j): - ''' Propage le feu au k ieme tour ''' - try: - if F[k-1][i-1, j] == 1: # Si la case au dessus est un arbre - F[k][i-1, j] = -1 # La case au dessus brûle - except IndexError: - pass - try: - if F[k-1][i+1, j] == 1: # Si la case au dessous est un arbre - F[k][i+1, j] = -1 # La case en dessous brûle - except IndexError: - pass - try: - if F[k-1][i, j-1] == 1: # Si la case à gauche est un arbre - F[k][i, j-1] = -1 # La case à gauche brûle - except IndexError: - pass - try: - if F[k-1][i, j+1] == 1: # Si la case à droite est un arbre - F[k][i, j+1] = -1 # La case à droite brûle - except IndexError: - pass - - -def propager2(F, k, i, j): - ''' Propage le feu au k ieme tour ''' - print("rang :" + str(k) + " (" + str(i) + "," + str(j) + ")") - # On ajuste les indices pour rester dans les index - i = i-1 - j = j-1 - if i == 0: # On est sur la ligne du haut - if F[k-1][i+1, j] == 1: # Si la case au dessous est un arbre - F[k][i+1, j] = -1 # La case en dessous brûle - elif i == F[k].shape[0]-1: # On est sur la ligne du bas - if F[k-1][i-1, j] == 1: # Si la case au dessus est un arbre - F[k][i-1, j] = -1 # La case au dessus brûle - else: - if F[k-1][i-1, j] == 1: # Si la case au dessus est un arbre - F[k][i-1, j] = -1 # La case au dessus brûle - if F[k-1][i+1, j] == 1: # Si la case au dessous est un arbre - F[k][i+1, j] = -1 # La case en dessous brûle - if j == 0: # On est sur la colonne de gauche - if F[k-1][i, j+1] == 1: # Si la case à droite est un arbre - F[k][i, j+1] = -1 # La case à droite brûle - elif j == F[k].shape[1]-1: # On est sur la colonne de droite - if F[k-1][i, j-1] == 1: # Si la case à gauche est un arbre - F[k][i, j-1] = -1 # La case à gauche brûle - else: # On est sur aucune des colonnes latérales - if F[k-1][i, j-1] == 1: # Si la case à gauche est un arbre - F[k][i, j-1] = -1 # La case à gauche brûle - if F[k-1][i, j+1] == 1: # Si la case à droite est un arbre - F[k][i, j+1] = -1 # La case à droite brûle - - -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 feuDeForetBordure(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)) # La forêt est enflammée puis stockée - print(F[1], "Rang : 1 (Départ de feu)") - feuDeForet(F) - return F - - -def wildfireBordure(n, p, x=-1, y=-1): - ''' Génération de la forêt selon les paramètres voulus ''' - F = [genForetBordure(n, p)] - print(F[0], "Instant initial") - ''' 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)") - feuDeForetBordure(F) - return F - - -# Affichage - - -def affichage(F): - ''' Utilise la librairie tkinter pour l'affichage de la forêt ''' - 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() - ''' On définit le canevas qui affiche notre forêt ''' - canvas = tk.Canvas(fenetre, width=(F[k].shape[0]+2)*10, - height=(F[k].shape[1]+2)*10) - tracerRectangles(F[k], canvas) - canvas.pack() - bouton = tk.Button(fenetre, text="Suivant", command=fenetre.destroy) - bouton.pack() - fenetre.mainloop() # Affiche la fenêtre - - -def affichage2(F): - ''' Utilise la librairie tkinter pour l'affichage de la forêt ''' - p = 1 # Initialise le 'pas' entre les rang de la forêt - 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[0].shape[0]+2)*10, - height=(F[0].shape[1]+2)*10) - canvas.pack(side=tk.LEFT) - tracerRectangles(F[0], canvas) # On trace la forêt initiale - global k - k = 0 # Le rang - # sPas = tk.Scale(fenetre, variable=p, orient=tk.HORIZONTAL, to=10) - # sPas.pack(side=tk.BOTTOM) - bSuivant = tk.Button(fenetre, text='Suivant '+str(p)+' tours', command=lambda: rangSuivant(F, p, k, canvas)) - bSuivant.pack() - bQuit = tk.Button(fenetre, text='Quitter', command=fenetre.quit) - bQuit.pack(side=tk.BOTTOM) - fenetre.mainloop() - fenetre.destroy() - - -# Fonctions utiles à l'affichage - -def pause(): - input("Appuyer sur Entrée pour continuer . . .") - - -def tracerRectangles(F, canvas): - ''' Trace les cases ''' - for i in range(0, F.shape[0]): - for j in range(0, F.shape[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) - elif F[i, j] == -1: - canvas.create_rectangle((i+1)*10, (j+1)*10, (i+2)*10, (j+2)*10, - fill='red', width=0) - elif F[i, j] == -2: - canvas.create_rectangle((i+1)*10, (j+1)*10, (i+2)*10, (j+2)*10, - fill='black', width=0) - elif F[i, j] == 2: - canvas.create_rectangle((i+1)*10, (j+1)*10, (i+2)*10, (j+2)*10, - fill='#c0c0c0', width=0) - - -def rangSuivant(F, p, r, canvas): - global k - k = r + p # On avance le rang du pas - tracerRectangles(F[k], canvas) - print(k) +# -*- coding: utf-8 -*- +""" +Created on Fri Feb 1 11:30:02 2019 + +@author: LordOf20th +""" + + +import numpy as np +import random +import tkinter as tk + + +""" + Les états possibles de nos cases : + - -1 : un arbre en feu + - -2 : un arbre mort + - 0 : pas d'arbre + - 1 : un arbre sain + - 2 : bordure +""" + +# Fonctions agissant sur la matrice + + +def genForet(n, p): + ''' Fonction générant la forêt ''' + if n >= 2: + foret = np.full(shape=(n, n), fill_value=0) + for i in range(0, foret.shape[0]): + for j in range(0, foret.shape[1]): + if random.random() <= p: + foret[i, j] = 1 + return foret + else: + raise ValueError("n doit prendre une valeur de 2 au moins") + + +def genForetBordure(n, p): + ''' Fonction générant la forêt et une bordure ''' + if n >= 2: + foret = np.full(shape=(n+1, n+1), fill_value=0) + for i in range(0, foret.shape[0]): + for j in range(0, foret.shape[1]): + if i == 0 or j == 0 or j == n or i == n: + foret[i, j] = 2 + else: + if random.random() <= p: + foret[i, j] = 1 + return foret + else: + raise ValueError("n doit prendre une valeur de 2 au moins") + + +def enflammer(foret, x, y): + ''' Fonction mettant le feu aléatoirement à une case ''' + if x == -1: + x = random.randint(0, foret.shape[0]-1) + if y == -1: + y = random.randint(0, foret.shape[1]-1) + foretEnflammée = np.copy(foret) + foretEnflammée[x, y] = -1 + return foretEnflammée + + +def enflammerBordure(foret, x, y): + ''' Fonction mettant le feu aléatoirement à une case + en tenant compte de la bordure''' + if x == -1 or x == 0 or x == foret.shape[0]-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[x, y] = -1 + return foretEnflammée + + +def propager(F, k, i, j): + ''' Propage le feu au k ieme tour ''' + try: + if F[k-1][i-1, j] == 1: # Si la case au dessus est un arbre + F[k][i-1, j] = -1 # La case au dessus brûle + except IndexError: + pass + try: + if F[k-1][i+1, j] == 1: # Si la case au dessous est un arbre + F[k][i+1, j] = -1 # La case en dessous brûle + except IndexError: + pass + try: + if F[k-1][i, j-1] == 1: # Si la case à gauche est un arbre + F[k][i, j-1] = -1 # La case à gauche brûle + except IndexError: + pass + try: + if F[k-1][i, j+1] == 1: # Si la case à droite est un arbre + F[k][i, j+1] = -1 # La case à droite brûle + except IndexError: + pass + + +def propager2(F, k, i, j): + ''' Propage le feu au k ieme tour ''' + print("rang :" + str(k) + " (" + str(i) + "," + str(j) + ")") + # On ajuste les indices pour rester dans les index + i = i-1 + j = j-1 + if i == 0: # On est sur la ligne du haut + if F[k-1][i+1, j] == 1: # Si la case au dessous est un arbre + F[k][i+1, j] = -1 # La case en dessous brûle + elif i == F[k].shape[0]-1: # On est sur la ligne du bas + if F[k-1][i-1, j] == 1: # Si la case au dessus est un arbre + F[k][i-1, j] = -1 # La case au dessus brûle + else: + if F[k-1][i-1, j] == 1: # Si la case au dessus est un arbre + F[k][i-1, j] = -1 # La case au dessus brûle + if F[k-1][i+1, j] == 1: # Si la case au dessous est un arbre + F[k][i+1, j] = -1 # La case en dessous brûle + if j == 0: # On est sur la colonne de gauche + if F[k-1][i, j+1] == 1: # Si la case à droite est un arbre + F[k][i, j+1] = -1 # La case à droite brûle + elif j == F[k].shape[1]-1: # On est sur la colonne de droite + if F[k-1][i, j-1] == 1: # Si la case à gauche est un arbre + F[k][i, j-1] = -1 # La case à gauche brûle + else: # On est sur aucune des colonnes latérales + if F[k-1][i, j-1] == 1: # Si la case à gauche est un arbre + F[k][i, j-1] = -1 # La case à gauche brûle + if F[k-1][i, j+1] == 1: # Si la case à droite est un arbre + F[k][i, j+1] = -1 # La case à droite brûle + + +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 feuDeForetBordure(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)) # La forêt est enflammée puis stockée + print(F[1], "Rang : 1 (Départ de feu)") + feuDeForet(F) + return F + + +def wildfireBordure(n, p, x=-1, y=-1): + ''' Génération de la forêt selon les paramètres voulus ''' + F = [genForetBordure(n, p)] + print(F[0], "Instant initial") + ''' 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)") + feuDeForetBordure(F) + return F + + +# Affichage + + +def affichage(F): + ''' Utilise la librairie tkinter pour l'affichage de la forêt ''' + 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() + ''' On définit le canevas qui affiche notre forêt ''' + canvas = tk.Canvas(fenetre, width=(F[k].shape[0]+2)*10, + height=(F[k].shape[1]+2)*10) + tracerRectangles(F[k], canvas) + canvas.pack() + bouton = tk.Button(fenetre, text="Suivant", command=fenetre.destroy) + bouton.pack() + fenetre.mainloop() # Affiche la fenêtre + + +def affichage2(F): + ''' Utilise la librairie tkinter pour l'affichage de la forêt ''' + p = 1 # Initialise le 'pas' entre les rang de la forêt + 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[0].shape[0]+2)*10, + height=(F[0].shape[1]+2)*10) + canvas.pack(side=tk.LEFT) + tracerRectangles(F[0], canvas) # On trace la forêt initiale + global k + k = 0 # Le rang + # sPas = tk.Scale(fenetre, variable=p, orient=tk.HORIZONTAL, to=10) + # sPas.pack(side=tk.BOTTOM) + bSuivant = tk.Button(fenetre, text='Suivant '+str(p)+' tours', command=lambda: rangSuivant(F, p, k, canvas)) + bSuivant.pack() + bQuit = tk.Button(fenetre, text='Quitter', command=fenetre.quit) + bQuit.pack(side=tk.BOTTOM) + fenetre.mainloop() + fenetre.destroy() + + +# Fonctions utiles à l'affichage + +def pause(): + input("Appuyer sur Entrée pour continuer . . .") + + +def tracerRectangles(F, canvas): + ''' Trace les cases ''' + for i in range(0, F.shape[0]): + for j in range(0, F.shape[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) + elif F[i, j] == -1: + canvas.create_rectangle((i+1)*10, (j+1)*10, (i+2)*10, (j+2)*10, + fill='red', width=0) + elif F[i, j] == -2: + canvas.create_rectangle((i+1)*10, (j+1)*10, (i+2)*10, (j+2)*10, + fill='black', width=0) + elif F[i, j] == 2: + canvas.create_rectangle((i+1)*10, (j+1)*10, (i+2)*10, (j+2)*10, + fill='#c0c0c0', width=0) + + +def rangSuivant(F, p, r, canvas): + global k + k = r + p # On avance le rang du pas + tracerRectangles(F[k], canvas) + print(k) From 00785148280addd1989044c2119279d491b92370 Mon Sep 17 00:00:00 2001 From: LordOf20th Date: Fri, 14 Jun 2019 14:52:15 +0200 Subject: [PATCH 5/5] =?UTF-8?q?Chang=C3=A9=20le=20nom=20du=20fichier=20con?= =?UTF-8?q?tenant=20les=20fonctions=20principales?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 1 + 1 file changed, 1 insertion(+) diff --git a/main.py b/main.py index 3b8e438..f407d59 100644 --- a/main.py +++ b/main.py @@ -18,6 +18,7 @@ import tkinter as tk - 0 : pas d'arbre - 1 : un arbre sain - 2 : bordure + """ # Fonctions agissant sur la matrice