Salut, est-ce que il y aurait quelqu'un qui saurait coder un automate cellulaire simple a l'aide de tkinter ?Voici les règles et le squelette du programme :
le temps est discret. On exécute les cellules dans un ordre que vous fixerez.
Exécuter une cellule signifie faire ´évoluer le passager qui est dans la cellule
si il n’est pas encore arrive à sa destination et qu’il peut bouger.
• un passager avance dans le couloir de 1 cellule par unit´e de temps si il
n’y a personne sur la cellule suivante. Sinon il est bloquée pendant cet
intervalle de temps.
• il y a une seule entrée dans l’avion et un seul passager peut entrer par
unit´e de temps. D`es que l’entr´ee est vide, un nouveau passager arrive si
l’avion n’est pas plein (il y a 180 si`eges et donc 180 passagers qui doivent
arriver `a leur si`ege).
• un passager poss`ede un num´ero de si`ege (sa destination) et il doit la respecter.
• un passager a des bagages `a main (entre 0 et 2) et le coffre `a bagage `a une
capacit´e illimit´ee. Donc le passager pourra toujours d´eposer ses bagages
mais cela prend du temps.
1
• lorsque le passager a fini d’avancer dans le couloir, il doit ranger ses
bagages avant de rejoindre son siège. Mettre un bagage dans le coffre
prend une unité de temps par bagage et pendant ce temps l`a, le passager
ne bouge pas et il bloque le couloir.
• Pour rejoindre son siège, si le passager est bloquée par un autre passager
déjà arrivé, alors les deux passagers doivent bouger en même temps en
´échangeant leur cellule.
Par exemple, supposons que le passager 6 voulant rejoindre le siège (1,5)
est en (4,5) , et il est bloqué par le passager 7 arrive à sa place en (2,5),
alors pendant le un intervalle de temps, les passagers 6 et 7 ´échangent leur
position. Puis pendant l’ intervalle suivant, le client 6 rejoint la cellule
(1, 5), il libère (2, 5) que le client 7 peut alors rejoindre
import tkinter as tk
import random as rd
SIEGES_VIDES = "steel blue"
COULOIR = "light steel blue"
ZERO_BAGAGE = "yellow"
UN_BAGAGE = "orange"
DEUX_BAGAGES = "red"
SIEGES_OCCUPEES = "green"
LARGEUR = 140
HAUTEUR = 600
screen = tk.Tk()
screen.title("Simulation avion")
COTE = 20
NB_COl = LARGEUR // COTE
NB_LINE = HAUTEUR // COTE
- Initialisations des listes et des variables
tableau = None
coordonnées = None #Numéros des places dans l'avion
liste_passagers = None #Liste des 180 passagers
voisins_milieu = 0
voisins_gauche = 0
voisisns_droite = 0
def sieges_couloir():
global COTE, SIEGES, COULOIR
"""Création des sièges de l'avion et du couloir de l'avion"""
for i in range (7): #Création des colonnes
for j in range (30): #Création des lignes
celule = canvas.create_rectangle(i*COTE, j*COTE, (1+i)*COTE, (1+j)*COTE, fill = SIEGES)
if i == 3:
canvas.itemconfig(celule, fill = COULOIR)
def coordonnees_sieges():
"""Attribue une coordonnée à chaques sièges de l'avion sous forme
de tableau à deux dimensions"""
coordonnées = []
for col in range (1,4):
for line in range (1,31):
coordonnées.append([col, line]) #Sièges à gauche du couloir
for col in range (4, 8):
for line in range (1, 31):
coordonnées.append([col, line]) #Sièges à droite du couloir
return coordonnées
def tableau_2D():
"""Création d'un tableau à deux dimension permettant de connaître
le rôle de chaque celule, le couloir est initilisé à 0, tandis
que les sièges sont initialisés à 1"""
global tableau
tableau = []
for i in range(NB_COl):
if i == 3:
tableau.append([0]*NB_LINE) #Couloir
else:
tableau.append([1]*NB_LINE) #Sièges
return tableau
def création_passagers_bagages():
"""Création des 180 passagers numéroté de 0 à 179 à qui on affecte un chiffre
entre 0 et 2 qui correspond au nombre de bagage(s) et une place au sein de l'avion"""
global coordonnées
liste_passagers = []
place = []
max_nb_hasard = 179
nb = 0
for passagers in range (180):
liste_passagers.append([passagers]) #Donne un numéro à chaque passager entre 0 et 179
for bagages in range (1):
liste_passagers[passagers].append(rd.randint(0,2)) #Donne entre 0 et 2 bagages aléatoirement
for i in range(1, 8): #Création des coordonnées des places de l'avion
if i == 4: #Exclus la colonne du couloir pour avoir les coordonnées des 180 sièges
continue
for j in range(1, 31):
place.append([i , j]) #Ajoute les coordonnées dans la liste place
for i in range(180):
nb_hasard = rd.randint(0, max_nb_hasard) #Choisi un nombre au hasard
liste_passagers[nb].append(place[nb_hasard]) #Ajoute la coordonnée dans la liste liste_passagers à partir de l'indice donné aléatoirement par nb_hasard
del place[nb_hasard] #Supprime la coordonnée de la liste place
max_nb_hasard -= 1
nb += 1
return liste_passagers
def voisins_couloir():
"""Examine le couloir de l'avion pour savoir si les passagers ont
des voisins devant eux"""
global tableau
voisins_milieu = 0
for v in range(3, 4):
for w in range(NB_LINE):
if tableau[v][w] != 0 and [v, w] != [i, j]:
voisins_milieu += 1
return voisins_milieu
def voisins_sièges_gauche():
"""Examine les sièges à gauche du couloir pour voir si un passager
est déjà placé"""
global tableau
voisins_gauche = 0
for v in range(0, 3):
for w in range(NB_LINE):
if tableau[v][w] != 0 and [v, w] != [i, j]:
voisins_gauche += 1
return voisins_gauche
def voisins_sièges_droite():
global tableau
"""Examine les sièges à droite du couloir pour voir si un passager
est déjà placé"""
voisins_droite = 0
for v in range(4, 7):
for w in range(NB_LINE):
if tableau[v][w] != 0 and [v, w] != [i, j]:
voisins_droite += 1
return voisins_droite
def legende():
"""Création d'une légende pour définir chaques carrés de couleur"""
canvas.create_rectangle((180, 40), (200, 60), fill = SIEGES_VIDES)
leg_siege = tk.Label(screen, text = "Siège", font = "Arial")
leg_siege.grid(column = 1, row = 0)
canvas.create_rectangle((180, 140), (200, 160), fill = COULOIR)
leg_couloir = tk.Label(screen, text = "Couloir", font = "Arial")
leg_couloir.grid(column =1, row = 1)
canvas.create_rectangle((180, 240), (200, 260), fill = ZERO_BAGAGE)
leg_zero_bagage = tk.Label(screen, text = "Passager avec aucun bagage", font = "Arial")
leg_zero_bagage.grid(column = 1, row = 2)
canvas.create_rectangle((180, 340), (200, 360), fill = UN_BAGAGE)
leg_un_bagage = tk.Label(screen, text = "Passager avec un bagage", font = "Arial")
leg_un_bagage.grid(column = 1, row = 3)
canvas.create_rectangle((180, 440), (200, 460), fill = DEUX_BAGAGES)
leg_deux_bagage = tk.Label(screen, text = "Passager avec deux bagages", font = "Arial")
leg_deux_bagage.grid(column = 1, row =4)
canvas.create_rectangle((180, 540), (200, 560), fill = SIEGES_OCCUPEES)
leg_place = tk.Label(screen, text = "Passager assis à sa place", font = "Arial")
leg_place.grid(column = 1, row = 5)
- ############################## PROGRAMME PRINCIPALE
canvas = tk.Canvas(screen, width = 280, height = 600, borderwidth=0, highlightthickness=0, bg = "black")
sieges_couloir()
legende()
canvas.grid(column = 0, row = 0, rowspan = 6)
screen.mainloop()
Ce serait incroyable si vous pouviez le faire, merci d'avance.