Programme feu de foret

Messages postés
1
Date d'inscription
samedi 11 mars 2017
Statut
Membre
Dernière intervention
11 mars 2017
-
Bonjour,

Actuellement en licence informatique nous devons coder un automate cellulaire , notre programme ne fonctionne que si on initialise le foyer du feu au coin droit .La solution serait d'utiliser l'algorithme BFS (algorithme de parcours en largeur ) ,nous avons des difficultés pour l'appliquer .Je vous met le code de notre programme ci-dessous en attente d'une réponse claire .De plus nous avons des difficultés à récupérer la valeur du scale (ligne 19).
from tkinter import*
import time
import random
global Coté
global m
cpix=10
pierre=0
arbre=1
eau=2
cendre=3
feu=4
pcarbre=70
pcpierre=15
pceau=15
taille = Tk()
taille.title("Taille forêt")
label = Label(taille, text="Saisir la taille de la forêt:")
label.pack()
spn = Spinbox(taille,from_=2, to=1000)
label = Label(taille, text="Saisir la taille de la forêt:")
spn.pack()
def test():
    a=spn.get()
    i=int(a)
    global Coté
    Coté= i
def exe():
    def menus():
        print("salut Anis ca marche pas encore")
    global cell
 
    global m
    cell = [[0 for row in range( Coté)] for col in range( Coté)]
    m = [[1 for row in range(Coté)] for col in range(Coté)]
    for ligne in range(Coté):
            for colonne in range(Coté):
                c= random.randint(0,pcarbre+pcpierre+pceau)
                if c<=pcarbre:
                    m[ligne][colonne]=1
                if c>=pcarbre and c<=pcarbre+pcpierre:
                    m[ligne][colonne]=0
                if c>=pcarbre+pcpierre :
                    m[ligne][colonne]=2
    def a_propos():
        merci=Tk()
        l = LabelFrame(merci, text="Merci", padx=20, pady=20)
        l.pack(fill="both", expand="yes")
        Label(l, text="MERCI A TOUS \r\n MASSYL ANIS \r\n HAITEM FLORENT").pack()
    def vent(): # interroge et affiche la valeur retour
     
        vent=   Tk()
        vent.title("gestion de la direction du vent")
        vent.configure(width=500,height=500)
        cadre=   Frame(vent)       
        retour0=   IntVar()
        bouton1=   Radiobutton(cadre, text="ouest", variable=retour0, value=1)
        bouton2=   Radiobutton(cadre, text="sud", variable=retour0, value=3)
        bouton3=   Radiobutton(cadre, text="est", variable=retour0, value=2)
        bouton4=   Radiobutton(cadre, text="nord", variable=retour0, value=4)
        bouton5=   Radiobutton(cadre, text="neutre", variable=retour0, value=5)
        bouton1.grid(row=1, column=0)
        bouton2.grid(row=2, column=1)
        bouton3.grid(row=1, column=2)
        bouton4.grid(row=0, column=1)
        bouton5.grid(row=1, column=1)
         
        cadre.pack(side=   TOP)
         
        bouton0=   Button(vent, text="valider", command=vent.quit)
        bouton0.pack(side=   BOTTOM)
        
        vent.mainloop()
        return retour0.get()
    def init():
        for x in range(Coté):
            for y in range(Coté):
                cell[x][y] = canvas.create_rectangle((x*cpix, y*cpix, (x+1)*cpix, (y+1)*cpix), outline="gray", fill="white")
     
    def CALCULER):
        for x in range(Coté):
            for y in range(Coté):
                nb_voisins_feu = voisins_feu(x,y)
                nb_voisins_arbre = voisins_arbre(x,y)
                if m[x][y] == arbre and nb_voisins_feu >0:
                    m[x][y] = feu
                if m[x][y]==feu and nb_voisins_arbre==0:
                    m[x][y]=cendre
                 
                
     
    def tableau():
        calculer()
        dessiner()
        fenetre.after(10, TABLEAU)
    def nb_voisin_total(i,j):
        if(i==0 and j==0):
            return 3
        if(i==Coté-1 and j ==Coté-1):
            return 3
        if(i==Coté-1 and j==0):
            return 3
        if(i==0 and j==Coté-1):
            return 3
        if(i==0 and(j!=0 or j!=Coté-1)):
            return 5
        if(i==Coté-1 and(j!=0 or j!=Coté-1)):
            return 5
        if(j==0 and(i!=0 or i!=Coté-1)):
            return 5
        if(j==Coté-1 and(i!=0 or i!=Coté-1)):
            return 5
         
        else:
            return 8
    def voisins_feu(x,y):
    
        z=feu
        voisin=0
        #cote en haut a gauche
        if nb_voisin_total(x,y)==3:
            if x==0 and y==0:
                if m[x+1][y+1]==z:
                    voisin+=1
                if m[x+1][y]==z:
                    voisin+=1
                if m[x][y+1]==z:
                    voisin+=1
                return voisin
            #cote en haut a droite
            if x==0 and y==Coté-1:
                if m[x+1][y]==z:
                    voisin+=1
                if m[x+1][y-1]==z:
                    voisin+=1
                if m[x][y-1]==z:
                    voisin+=1
                return voisin
        #cote en bas a gauche
            if x==Coté-1 and y==0:
                if m[x-1][y]==z:
                    voisin+=1
                if m[x-1][y+1]==z:
                    voisin+=1
                if m[x][y+1]==z:
                    voisin+=1
                return voisin
        #cote en bas a droite
            if x==Coté-1 and y==Coté-1:
                if m[x][y-1]==z:
                    voisin+=1
                if m[x-1][y-1]==z:
                    voisin+=1
                if m[x-1][y]==z:
                    voisin+=1
                return voisin
    #carreaux sur le bord
        if nb_voisin_total(x,y)==5:
            if x==0:
                if m[x][y-1]==z:           
                    voisin+=1              
                if m[x+1][y-1]==z:           
                    voisin+=1              
                if m[x+1][y]==z:           
                    voisin+=1              
                if m[x+1][y+1]==z:           
                    voisin+=1            
                if m[x][y+1]==z:           
                    voisin+=1
                return voisin
            if x==Coté-1:
                if m[x][y-1]==z:           
                    voisin+=1
                if m[x-1][y-1]==z:           
                    voisin+=1
                if m[x-1][y]==z:           
                    voisin+=1  
                if m[x-1][y+1]==z:           
                    voisin+=1
                if m[x][y+1]==z:           
                    voisin+=1
                return voisin
            if y==0: 
                if m[x-1][y]==z:           
                    voisin+=1
                if m[x-1][y+1]==z:           
                    voisin+=1
                if m[x][y+1]==z:           
                    voisin+=1  
                if m[x+1][y+1]==z:           
                    voisin+=1
                if m[x+1][y]==z:           
                    voisin+=1
                return voisin
            if y==Coté-1: 
                if m[x-1][y]==z:           
                    voisin+=1
                if m[x-1][y-1]==z:           
                    voisin+=1
                if m[x][y-1]==z:           
                    voisin+=1  
                if m[x+1][y-1]==z:           
                    voisin+=1
                if m[x+1][y]==z:           
                    voisin+=1
                return voisin
        if nb_voisin_total(x,y)==8:
            if m[x-1][y-1]==z:           
                voisin+=1
            if m[x-1][y]==z:           
                voisin+=1
            if m[x-1][y+1]==z:           
                voisin+=1
            if m[x][y+1]==z:           
                voisin+=1
            if m[x+1][y+1]==z:           
                voisin+=1
            if m[x+1][y]==z:           
                voisin+=1
            if m[x+1][y-1]==z:           
                voisin+=1
            if m[x][y-1]==z:           
                voisin+=1
        return voisin
         
    def voisins_arbre(x,y):
    
        z=arbre
        voisin=0
        #cote en haut a gauche
        if nb_voisin_total(x,y)==3:
            if x==0 and y==0:
                if m[x+1][y+1]==z:
                    voisin+=1
                if m[x+1][y]==z:
                    voisin+=1
                if m[x][y+1]==z:
                    voisin+=1
                return voisin
            #cote en haut a droite
            if x==0 and y==Coté-1:
                if m[x+1][y]==z:
                    voisin+=1
                if m[x+1][y-1]==z:
                    voisin+=1
                if m[x][y-1]==z:
                    voisin+=1
                return voisin
        #cote en bas a gauche
            if x==Coté-1 and y==0:
                if m[x-1][y]==z:
                    voisin+=1
                if m[x-1][y+1]==z:
                    voisin+=1
                if m[x][y+1]==z:
                    voisin+=1
                return voisin
        #cote en bas a droite
            if x==Coté-1 and y==Coté-1:
                if m[x][y-1]==z:
                    voisin+=1
                if m[x-1][y-1]==z:
                    voisin+=1
                if m[x-1][y]==z:
                    voisin+=1
                return voisin
    #carreaux sur le bord
        if nb_voisin_total(x,y)==5:
            if x==0:
                if m[x][y-1]==z:           
                    voisin+=1              
                if m[x+1][y-1]==z:           
                    voisin+=1              
                if m[x+1][y]==z:           
                    voisin+=1              
                if m[x+1][y+1]==z:           
                    voisin+=1            
                if m[x][y+1]==z:           
                    voisin+=1
                return voisin
            if x==Coté-1:
                if m[x][y-1]==z:           
                    voisin+=1
                if m[x-1][y-1]==z:           
                    voisin+=1
                if m[x-1][y]==z:           
                    voisin+=1  
                if m[x-1][y+1]==z:           
                    voisin+=1
                if m[x][y+1]==z:           
                    voisin+=1
                return voisin
            if y==0: 
                if m[x-1][y]==z:           
                    voisin+=1
                if m[x-1][y+1]==z:           
                    voisin+=1
                if m[x][y+1]==z:           
                    voisin+=1  
                if m[x+1][y+1]==z:           
                    voisin+=1
                if m[x+1][y]==z:           
                    voisin+=1
                return voisin
            if y==Coté-1: 
                if m[x-1][y]==z:           
                    voisin+=1
                if m[x-1][y-1]==z:           
                    voisin+=1
                if m[x][y-1]==z:           
                    voisin+=1  
                if m[x+1][y-1]==z:           
                    voisin+=1
                if m[x+1][y]==z:           
                    voisin+=1
                return voisin
        if nb_voisin_total(x,y)==8:
            if m[x-1][y-1]==z:           
                voisin+=1
            if m[x-1][y]==z:           
                voisin+=1
            if m[x-1][y+1]==z:           
                voisin+=1
            if m[x][y+1]==z:           
                voisin+=1
            if m[x+1][y+1]==z:           
                voisin+=1
            if m[x+1][y]==z:           
                voisin+=1
            if m[x+1][y-1]==z:           
                voisin+=1
            if m[x][y-1]==z:           
                voisin+=1
             
         
         
        return voisin
         
       
             
         
                 
    def dessiner():
        for ligne in range(Coté):
            for colonne in range(Coté):
                if m[ligne][colonne]==1 :
                    couleur="green"
                if m[ligne][colonne]==0 :
                    couleur="brown"
                if m[ligne][colonne]==2 :
                    couleur="blue"
                if m[ligne][colonne]==3 :
                    couleur="grey"
                if m[ligne][colonne]==4:
                    couleur="orange"
                
                canvas.itemconfig(cell[ligne][colonne], fill=couleur)
                canvas.bind("<Button-1>", modifierTableau)
     
    def modifierTableau(evt):
        
         pos_x = int(evt.x / cpix)
         pos_y = int(evt.y / cpix)
         liste=[pos_x,pos_y]
         if  m[pos_x][pos_y]==arbre:
             m[pos_x][pos_y]=feu
  
 
    
     
    fenetre = Tk()
    fenetre.title("feu de foret")
    menubar = MENUfenetre)
    menu1 = Menu(menubar, tearoff=0)
    menu1.add_command(label="Créer", command=exe)
    menu1.add_command(label="Editer", command=menus)
    menu1.add_separator()
    menu1.add_command(label="Quitter", command=fenetre.destroy)
    menubar.add_cascade(label="Fichier", MENU=menu1)
     
    menu2 = Menu(menubar, tearoff=0)
    menu2.add_command(label="vent", command=vent)
     
    menubar.add_cascade(label="Editer", menu=menu2)
     
    menu3 = MENUmenubar, tearoff=0)
    menu3.add_command(label="A propos", command=a_propos)
    menubar.add_cascade(label="Aide", menu=menu3)
     
    fenetre.config(menu=menubar)
    canvas = Canvas(fenetre, width=Coté*cpix, height=Coté*cpix, highlightthickness=0)
    canvas.pack()
    init()
    tableau()
    fenetre.mainloop()
     
     
Button(taille, text="sauvgarder", command=test).pack()
Button(taille, text="validé", command=exe).pack()
taille.destroy
taille.mainloop()
Afficher la suite