Projet Isn

Simulateur propagation de feu sur eduphyton

a marqué ce sujet comme résolu.

Bonjour a tous, je suis en terminale option ISN et pour mon projet je bloque un peu car je suis vraiment moyen en programmation.. Alors pour l'instant j'ai créé une grille avec des cases aléatoires (soit vert pour un arbre soit noir pour vide/obstacle) et j'aimerais bien commencez la propagation du feu par un clique mais je n'arrive pas.. Une aide ? :) Merci d'avance (je n'arrive pas a joindre mon algo au message..)

+1 -2

Bonjour,

Il nous faudrait un peu plus d'informations sur ton projet : quel est-il, en quel langage (Python je suppose et j'espère) et surtout où tu bloques ! Je suppose que c'est un algorithme de propagation d'un feu de forêt mais je n'en suis pas sûr.

+1 -0

Il nous faudrait un peu plus d'informations sur ton projet : quel est-il, en quel langage (Python je suppose et j'espère) et surtout où tu bloques ! Je suppose que c'est un algorithme de propagation d'un feu de forêt mais je n'en suis pas sûr.

gustavi

Ce que Gustavi essaie de dire de manière gentille, c'est qu'on est pas là pour faire tes devoirs. Donc à toi de nous montrer ce que tu as déjà fait, où tu bloques (normalement tu as déjà un peu de code, pour l'inclure tu peux cliquer sur les chevron bleu de la barre d'outil de l'éditeur, entre les boutons titre et image) ; et ainsi on pourra te donner des pistes (mais pas de solution toute faite, car ça ne t'apprendra rien) :)

Oui Nodraak je le sais bien sinon j'aurai copier/coller sans gene un programme sur internet aha.. Sinon on code sur EduPython comme je l'ai indiqué. Je bloque vraiment sur la propagation du feu en elle meme, la generation d'une foret j'ai plus ou moins réussi mais par la suite je bloque completement..

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Voici mon programme pour l'instant:


from tkinter import *
from random import *
from colors import *

px=5
nb=eval(input("Largeur (en nombre de carrés) "))
def tracergrille():
    x1, y1, x2, y2 = 0, 0, px, px
    nbCarres = 0
    i = 0
    while i <= nb:
        couleur=["black","green"]
        choix=randint(0,1)
        can.create_rectangle(x1, y1, x2, y2, outline='black', fill=couleur[choix])
        x1 += px
        x2 += px
        nbCarres += 1
        if nbCarres == nb:
            y1 += px
            y2 += px
            x1, x2 = 0, px
            i += 1
            nbCarres = 0

fenetre = Tk()
can = Canvas(fenetre, width=nb*px, height=nb*px, bg='ivory')
can.pack(side=TOP, pady=10)
boutonDessinergrille = Button(fenetre, text='Dessiner la grille', command=tracergrille)
boutonDessinergrille.pack()
boutonQuitter = Button(fenetre, text='Quitter', command=fenetre.destroy)
boutonQuitter.pack()

fenetre.mainloop()

fenetre.destroy

Parfait, ça nous confirme/donne pas mal d'infos (python + tkinter pour commencer) !

Pour propager du feu, tu as besoin :

  • D'une case de départ. Tu voulais la choisir au clic : stackoverflow a l'air de savoir comment récupérer les coordonnées de la souris.
  • Faire bruler les cases voisines d'une case en feu. Pour ça il faut que tu aies quelque part la grille avec l'état de chaque case (brulée, pas brulée ?). Un tableau à deux dimensions devrait faire l'affaire. (mon voisin du dessus propose une autre solution : ne garder que la liste des cases qui brulent, fait ce qui te semble le plus simple)

Ensuite tu n'as plus qu'à faire une boucle, et pour chaque case, si une de ses voisines brule, alors elle va se mettre à bruler aussi. A ce moment tu vas vouloir mettre à jour tkinter, je ne sais pas comment faire, peut être recréer la fenêtre (google devrait t'aider).

PS : je pense que ligne 38 fenetre.destroy est une fonction que tu veux appeler, tu devrais rajouter des parenthèses.

Yep, ça peut aider. Ensuite tu as plusieurs solutions disponibles. Pour mon projet j'ai opté pour une liste qui contient toutes les cases et à partir de là tu peux gérer la propagation en changeant la valeur de la case terrain[indice] et des cases environnantes (je vais te laisser les calculer).

+0 -0

Moi j'aurai proposé une liste de case enflammé, avec chaque point sous forme (x, y). Apres, tu tire aleatoirement, ou selon tes rêgle de "mise a feu" lesquels enflammer entre (x-1, y), (x-1, y-1)… Comme ca, pas besoin de faire une liste de toutes les cases.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte