|
|
|
"""Ce fichier permet de dessiner une rue à l'aide des fonctions suivantes :
|
|
|
|
|
|
|
|
+ dessiner_rue_aleatoire()
|
|
|
|
+ dessiner_rue_decrite(rue:dict)
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
|
|
# Importation
|
|
|
|
|
|
|
|
from dessiner import triangle_equilateral
|
|
|
|
from dessiner import rectangle
|
|
|
|
from dessiner import rectangle_arrondi
|
|
|
|
from random import choice
|
|
|
|
|
|
|
|
|
|
|
|
# Constantes
|
|
|
|
|
|
|
|
LARGEUR_IMMEUBLE = 140
|
|
|
|
|
|
|
|
|
|
|
|
# Fonction privées
|
|
|
|
|
|
|
|
def immeuble_aleatoire(numero: int) -> dict:
|
|
|
|
informations = {}
|
|
|
|
informations['couleur_facade'] = couleur_aleatoire()
|
|
|
|
informations['numero'] = numero
|
|
|
|
informations['etages'] = etage_aleatoire() # Ajout de la hauteur des étages
|
|
|
|
informations['porte'] = coordonnees_porte # Coordonées portes pour les fenêtres
|
|
|
|
return informations
|
|
|
|
|
|
|
|
def couleur_aleatoire() -> str:
|
|
|
|
return choice(['red','light green','grey','sky blue','olive','seagreen','mediumaquamarine','peachpuff'])
|
|
|
|
|
|
|
|
def etage_aleatoire() -> str:
|
|
|
|
return choice([80,160,240,320])
|
|
|
|
|
|
|
|
def coordonnees_facade(immeuble:dict) -> tuple:
|
|
|
|
x_gauche = -400+ 200 * immeuble['numero']
|
|
|
|
y_bas = -200
|
|
|
|
return (x_gauche, y_bas)
|
|
|
|
|
|
|
|
def coordonnees_porte(immeuble:dict) -> tuple:
|
|
|
|
x_gauche = -400+ 200 * immeuble['numero'] + choice([12.5,55,97.5])
|
|
|
|
y_bas = -200
|
|
|
|
return (x_gauche, y_bas)
|
|
|
|
|
|
|
|
def coordonnees_fenetres(immeuble:dict) -> tuple:
|
|
|
|
x_gauche = -400+ 200 * immeuble['numero']
|
|
|
|
y_bas = -200
|
|
|
|
return (x_gauche, y_bas)
|
|
|
|
|
|
|
|
def dessiner_facade(immeuble: dict) -> None:
|
|
|
|
# Traduction des données de rue vers dessiner
|
|
|
|
crayon = {}
|
|
|
|
crayon['écriture'] = "black"
|
|
|
|
crayon['fond'] = immeuble['couleur_facade']
|
|
|
|
crayon['épaisseur'] = 1
|
|
|
|
x, y = coordonnees_facade(immeuble) # désempaquatage du couple
|
|
|
|
cote = LARGEUR_IMMEUBLE
|
|
|
|
etages = immeuble['etages'] # Utiliser la hauteur des étages depuis le dictionnaire
|
|
|
|
# Demande d'affichage
|
|
|
|
rectangle(cote, etages, crayon, (x, y))
|
|
|
|
|
|
|
|
def dessiner_porte(immeuble:dict) -> None:
|
|
|
|
# Traduction des données de rue vers dessiner
|
|
|
|
crayon = {}
|
|
|
|
crayon['écriture'] = "black"
|
|
|
|
crayon['fond'] = couleur_aleatoire()
|
|
|
|
crayon['épaisseur'] = 1
|
|
|
|
x, y = coordonnees_porte(immeuble)
|
|
|
|
# Demande d'affichage
|
|
|
|
rectangle(30,50, crayon, (x,y))
|
|
|
|
|
|
|
|
def dessiner_toit(immeuble: dict) -> None:
|
|
|
|
# Traduction des données de rue vers dessiner
|
|
|
|
crayon = {}
|
|
|
|
crayon['écriture'] = "black"
|
|
|
|
crayon['fond'] = 'black' # Choix de la couleur du toit
|
|
|
|
crayon['épaisseur'] = 1
|
|
|
|
x, y = coordonnees_facade(immeuble)
|
|
|
|
cote = LARGEUR_IMMEUBLE
|
|
|
|
hauteur = immeuble['etages'] # Utiliser la hauteur des étages depuis le dictionnaire
|
|
|
|
y_toit = y + hauteur # Positionner le toit au-dessus de la façade
|
|
|
|
# Choix aléatoire du toit et demande d'affichage
|
|
|
|
if choice([0,1]) == 0:
|
|
|
|
triangle_equilateral(cote, crayon, (x, y_toit))
|
|
|
|
else:
|
|
|
|
rectangle_arrondi(cote, 20, crayon, (x, y_toit))
|
|
|
|
|
|
|
|
|
|
|
|
def dessiner_fenetres(immeuble: dict) -> None:
|
|
|
|
# Traduction des données de rue vers dessiner
|
|
|
|
crayon = {}
|
|
|
|
crayon['écriture'] = "black"
|
|
|
|
crayon['fond'] = 'white' # Vous pouvez choisir une autre couleur si vous le souhaitez
|
|
|
|
crayon['épaisseur'] = 1
|
|
|
|
x, y = coordonnees_fenetres(immeuble)
|
|
|
|
cote = LARGEUR_IMMEUBLE
|
|
|
|
hauteur = immeuble['etages'] # Utiliser la hauteur des étages depuis le dictionnaire
|
|
|
|
etages = int(hauteur / 80) # Conversion en nombre d'étages (80 pixels par étage)
|
|
|
|
|
|
|
|
# Calcul du décalage vertical pour chaque étage
|
|
|
|
for i in range(etages):
|
|
|
|
y_fenetre = y + (i * 80) + 20 # Chaque fenêtre est à 80 pixels de distance en hauteur, avec un décalage de 20
|
|
|
|
|
|
|
|
# Trois fenêtres par étage
|
|
|
|
rectangle(30, 30, crayon, (x + 12.5, y_fenetre))
|
|
|
|
rectangle(30, 30, crayon, (x + 55, y_fenetre))
|
|
|
|
rectangle(30, 30, crayon, (x + 97.5, y_fenetre))
|
|
|
|
|
|
|
|
|
|
|
|
def dessiner_immeuble(immeuble: dict) -> None:
|
|
|
|
dessiner_facade(immeuble)
|
|
|
|
dessiner_fenetres(immeuble)
|
|
|
|
dessiner_porte(immeuble)
|
|
|
|
dessiner_toit(immeuble)
|
|
|
|
# à compléter avec d'autres fonctions pour le reste : toit, fenêtres...
|
|
|
|
|
|
|
|
|
|
|
|
# Fonction publiques
|
|
|
|
|
|
|
|
def dessiner_rue_aleatoire() -> None:
|
|
|
|
for n in range(4):
|
|
|
|
informations_immeuble = immeuble_aleatoire(n)
|
|
|
|
dessiner_immeuble(informations_immeuble)
|
|
|
|
|
|
|
|
def dessiner_rue_decrite(rue:'?') -> None:
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
# Programme principal
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
dessiner_rue_aleatoire()
|
|
|
|
|
|
|
|
|
|
|
|
|