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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170
| import tkinter as tk
import random as rd
################################ INITIALISATION
screen = tk.Tk()
screen.title("Simulation avion")
################################# CONSTANTES
SIEGES_VIDES = "steel blue"
COULOIR = "light steel blue"
ZERO_BAGAGE = "yellow"
UN_BAGAGE = "orange"
DEUX_BAGAGES = "red"
SIEGES_OCCUPEES = "green"
LARGEUR = 140
HAUTEUR = 600
# Longeur des carrés qui constituent le quadrillage
COTE = 20
NB_COl = LARGEUR // COTE
NB_LINE = HAUTEUR // COTE
################################# VARIABLES
# 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
################################# FONCTIONS
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="blue")
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()
################################# PLACEMENT DES WIDGETS
canvas.grid(column=0, row=0, rowspan=6)
################################# FIN DE LA BOUCLE
screen.mainloop() |
Partager