You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
144 lines
5.2 KiB
144 lines
5.2 KiB
""" |
|
Ce programme permet de lire le fichier "ma_rue.txt" et de le convertir de façon à pouvoir afficher une rue correspondant |
|
aux informations écrites (si les règles du "README.txt" sont respectées) |
|
""" |
|
|
|
|
|
# Importation |
|
|
|
from rue import couleur_aleatoire,couleur_aleatoire_fonce,dessiner_rue_decrite |
|
import random as rd |
|
obj_rue = open('ma_rue.txt', 'r', encoding="utf-8") |
|
|
|
|
|
# Constantes |
|
|
|
LIGNE = [] |
|
for a in obj_rue: |
|
LIGNE.append(a) |
|
NB = int(LIGNE[0][0]) |
|
COULEURS = ('yellow', 'magenta', 'green', 'cyan') |
|
obj_rue.close() |
|
|
|
# Fonction privées |
|
|
|
def lire_ligne_liste(l) -> list : |
|
""" |
|
Transforme une ligne de description d'un immeuble en une liste formatée pour générer ses attributs. |
|
|
|
Cette fonction prend en entrée une chaîne représentant les caractéristiques d'un immeuble, séparées par ' - ', et |
|
retourne une liste contenant ces attributs. Les valeurs incorrectes ou non spécifiées sont remplacées par "aléatoire". |
|
|
|
Paramètres: |
|
l (str): La ligne de description de l'immeuble sous forme de chaîne. |
|
|
|
Retourne: |
|
list: Une liste contenant les attributs de l'immeuble dans l'ordre suivant : |
|
- Couleur de la façade |
|
- Nombre d'étages |
|
- Position de la porte (0 = gauche, 1 = milieu, 2 = droite) |
|
- Type de toit (False = rectangle, True = triangle) |
|
- Type de fenêtre (0 = simple, 1 = balcon, 2 = carreaux) |
|
Les valeurs non spécifiées ou incorrectes sont remplacées par "aléatoire". |
|
""" |
|
l = l.split(' - ') |
|
if l[0] not in COULEURS : |
|
l[0] = 'aléatoire' |
|
|
|
if type(int(l[1])) != int : |
|
l[1] = 'aléatoire' |
|
else : |
|
l[1] = int(l[1]) |
|
|
|
if l[2] == "gauche" : |
|
l[2] = 0 |
|
elif l[2] == "mileu" : |
|
l[2] = 1 |
|
elif l[2] == 'droite' : |
|
l[2] = 2 |
|
else : |
|
l[2] = 'aléatoire' |
|
|
|
if l[3] == 'lisse' : |
|
l[3] = False |
|
elif l[3] == 'pointu' : |
|
l[3] = True |
|
else : |
|
l[3] = 'aléatoire' |
|
|
|
if l[4] == 'careaux\n' or l[4] == 'careaux' : |
|
l[4] = 2 |
|
elif l[4] == 'balcon\n' or l[4] == 'balcon' : |
|
l[4] = 1 |
|
elif l[4] == 'simple\n' or l[4] == 'simple' : |
|
l[4] = 0 |
|
else : |
|
l[4] = 'aléatoire' |
|
|
|
return l |
|
|
|
#Fonctions Publiques |
|
def lire_rue() -> list : |
|
""" |
|
Génère la description complète d'une rue en créant une liste de dictionnaires, chaque dictionnaire représentant un immeuble. |
|
|
|
Cette fonction utilise les données de la liste LIGNE pour lire les attributs de chaque immeuble. Lorsqu'une valeur |
|
n'est pas définie, elle est remplacée par une valeur par défaut ou générée aléatoirement. |
|
|
|
Retourne: |
|
list: Une liste de dictionnaires, chaque dictionnaire contient les informations de l'immeuble suivant : |
|
- 'couleur_facade' (str) : couleur de la façade |
|
- 'numero' (int) : numéro de l'immeuble dans la rue |
|
- 'nb_etage' (int) : nombre d'étages (entre 1 et 5 par défaut) |
|
- 'pos_porte' (int) : position de la porte (0 = gauche, 1 = milieu, 2 = droite) |
|
- 'couleur_porte' (str) : couleur de la porte |
|
- 'type_fenetre' (list) : type de chaque fenêtre (0 = normal, 1 = balcon, 2 = carreaux) |
|
- 'type_toit' (bool) : forme du toit (False = rectangle, True = triangle) |
|
""" |
|
rue = [] |
|
for i in range(NB) : |
|
informations = {} |
|
liste = lire_ligne_liste(LIGNE[i+1]) |
|
#info immeuble |
|
if liste[0] != 'aléatoire' : |
|
informations['couleur_facade'] = liste[0] |
|
else : |
|
informations['couleur_facade'] = couleur_aleatoire() |
|
informations['numero'] = i |
|
if liste[1] != 'aléatoire' : |
|
informations['nb_etage'] = liste[1] |
|
else : |
|
informations['nb_etage'] = rd.randint(1,5) |
|
|
|
#info porte |
|
if liste[2] != 'aléatoire' : |
|
informations['pos_porte'] = liste[2] |
|
else : |
|
informations['pos_porte'] = rd.randint(0,2) |
|
informations['couleur_porte'] = couleur_aleatoire_fonce() |
|
|
|
#info fenetre |
|
informations['type_fenetre'] = [] |
|
if liste[4] == 2 : |
|
for _ in range(int(informations['nb_etage'])*3) : |
|
informations['type_fenetre'].append(2) # 0 -> normal, 1 -> balcon, 2 -> carreaux |
|
elif liste[4] == 1 : |
|
for _ in range(int(informations['nb_etage'])*3) : |
|
informations['type_fenetre'].append(1) # 0 -> normal, 1 -> balcon, 2 -> carreaux |
|
elif liste[4] == 0 : |
|
for _ in range(int(informations['nb_etage'])*3) : |
|
informations['type_fenetre'].append(0) # 0 -> normal, 1 -> balcon, 2 -> carreaux |
|
else : |
|
for _ in range(int(informations['nb_etage'])*3) : |
|
informations['type_fenetre'].append(rd.randint(0,2)) # 0 -> normal, 1 -> balcon, 2 -> carreaux |
|
|
|
#info toit |
|
if liste[3] != 'aléatoire' : |
|
informations['type_toit'] = liste[3] # False -> rectangle, True -> triangle |
|
else : |
|
informations['type_toit'] = bool(rd.randint(0,1)) |
|
rue.append(informations) |
|
return rue |
|
|
|
|
|
dessiner_rue_decrite(lire_rue()) |