From b52083fc57a3e718e3bb553d5cfb1aa9e4dd6300 Mon Sep 17 00:00:00 2001 From: "Dorian.D" Date: Thu, 16 Nov 2023 15:07:08 +0100 Subject: [PATCH] Update 'avec la doc/rue.py' --- avec la doc/rue.py | 542 ++++++++++++++++++++++----------------------- 1 file changed, 271 insertions(+), 271 deletions(-) diff --git a/avec la doc/rue.py b/avec la doc/rue.py index beb49cf..00ae3e6 100644 --- a/avec la doc/rue.py +++ b/avec la doc/rue.py @@ -1,271 +1,271 @@ -"""Ce fichier permet de dessiner une rue à l'aide des fonctions suivantes : - -+ dessiner_rue_aleatoire() -+ dessiner_rue_decrite(rue:dict) -""" - - -# Importation - -import dessiner as ds -import turtle as trt -import random as rd -trt.bgcolor("lightskyblue") - -# Constantes - -LARGEUR_IMMEUBLE = 140 - - -# Fonction privées - - -def immeuble_aleatoire(numero:int) -> dict: - """Renvoie les différents paramètres pour un immeuble crée aleatoirement - - :: param numero(int) :: le numero de l'immeuble pour savoir le repérer - - """ - - informations = {} - informations['couleur_facade'] = couleur_aleatoire() - informations['numero'] = numero - informations['etages'] = rd.randint(2,5) - informations['toit'] = rd.randint(1,2) - informations['porte'] = 3 - return informations - -def couleur_aleatoire() -> str: - """Renvoie une couleur aleatoirement - - """ - - liste = ['snow', 'ghost white', 'white smoke', 'gainsboro', 'floral white', 'old lace', - 'linen', 'antique white', 'papaya whip', 'blanched almond', 'bisque', 'peach puff', - 'navajo white', 'lemon chiffon', 'mint cream', 'azure', 'alice blue', 'lavender', - 'lavender blush', 'misty rose', 'dark slate gray', 'dim gray', 'slate gray', - 'light slate gray', 'gray', 'light gray', 'midnight blue', 'navy', 'cornflower blue', 'dark slate blue', - 'slate blue', 'medium slate blue', 'light slate blue', 'medium blue', 'royal blue', 'blue', - 'dodger blue', 'deep sky blue', 'sky blue', 'light sky blue', 'steel blue', 'light steel blue', - 'light blue', 'powder blue', 'pale turquoise', 'dark turquoise', 'medium turquoise', 'turquoise', - 'cyan', 'light cyan', 'cadet blue', 'medium aquamarine', 'aquamarine', 'dark green', 'dark olive green', - 'dark sea green', 'sea green', 'medium sea green', 'light sea green', 'pale green', 'spring green', - 'lawn green', 'medium spring green', 'green yellow', 'lime green', 'yellow green', - 'forest green', 'olive drab', 'dark khaki', 'khaki', 'pale goldenrod', 'light goldenrod yellow', - 'light yellow', 'yellow', 'gold', 'light goldenrod', 'goldenrod', 'dark goldenrod', 'rosy brown', - 'indian red', 'saddle brown', 'sandy brown', - 'dark salmon', 'salmon', 'light salmon', 'orange', 'dark orange', - 'coral', 'light coral', 'tomato', 'orange red', 'red', 'hot pink', 'deep pink', 'pink', 'light pink', - 'pale violet red', 'maroon', 'medium violet red', 'violet red', - 'medium orchid', 'dark orchid', 'dark violet', 'blue violet', 'purple', 'medium purple', - 'thistle', 'snow2', 'snow3', - 'snow4', 'seashell2', 'seashell3', 'seashell4', 'AntiqueWhite1', 'AntiqueWhite2', - 'AntiqueWhite3', 'AntiqueWhite4', 'bisque2', 'bisque3', 'bisque4', 'PeachPuff2', - 'PeachPuff3', 'PeachPuff4', 'NavajoWhite2', 'NavajoWhite3', 'NavajoWhite4', - 'LemonChiffon2', 'LemonChiffon3', 'LemonChiffon4', 'cornsilk2', 'cornsilk3', - 'cornsilk4', 'ivory2', 'ivory3', 'ivory4', 'honeydew2', 'honeydew3', 'honeydew4', - 'LavenderBlush2', 'LavenderBlush3', 'LavenderBlush4', 'MistyRose2', 'MistyRose3', - 'MistyRose4', 'azure2', 'azure3', 'azure4', 'SlateBlue1', 'SlateBlue2', 'SlateBlue3', - 'SlateBlue4', 'RoyalBlue1', 'RoyalBlue2', 'RoyalBlue3', 'RoyalBlue4', 'blue2', 'blue4', - 'DodgerBlue2', 'DodgerBlue3', 'DodgerBlue4', 'SteelBlue1', 'SteelBlue2', - 'SteelBlue3', 'SteelBlue4', 'DeepSkyBlue2', 'DeepSkyBlue3', 'DeepSkyBlue4', - 'SkyBlue1', 'SkyBlue2', 'SkyBlue3', 'SkyBlue4', 'Slategray1', 'Slategray2', 'Slategray3', - 'Slategray4', 'LightSteelBlue1', 'LightSteelBlue2', 'LightSteelBlue3', - 'LightSteelBlue4', 'LightBlue1', 'LightBlue2', 'LightBlue3', 'LightBlue4', - 'LightCyan2', 'LightCyan3', 'LightCyan4', 'PaleTurquoise1', 'PaleTurquoise2', - 'PaleTurquoise3', 'PaleTurquoise4', 'CadetBlue1', 'CadetBlue2', 'CadetBlue3', - 'CadetBlue4', 'turquoise1', 'turquoise2', 'turquoise3', 'turquoise4', 'cyan2', 'cyan3', - 'cyan4', 'DarkSlategray1', 'DarkSlategray2', 'DarkSlategray3', 'DarkSlategray4', - 'aquamarine2', 'aquamarine4', 'DarkSeaGreen1', 'DarkSeaGreen2', 'DarkSeaGreen3', - 'DarkSeaGreen4', 'SeaGreen1', 'SeaGreen2', 'SeaGreen3', 'PaleGreen1', 'PaleGreen2', - 'PaleGreen3', 'PaleGreen4', 'SpringGreen2', 'SpringGreen3', 'SpringGreen4', - 'green2', 'green3', 'green4', 'chartreuse2', 'chartreuse3', 'chartreuse4', - 'OliveDrab1', 'OliveDrab2', 'OliveDrab4', 'DarkOliveGreen1', 'DarkOliveGreen2', - 'DarkOliveGreen3', 'DarkOliveGreen4', 'khaki1', 'khaki2', 'khaki3', 'khaki4', - 'LightGoldenrod1', 'LightGoldenrod2', 'LightGoldenrod3', 'LightGoldenrod4', - 'LightYellow2', 'LightYellow3', 'LightYellow4', 'yellow2', 'yellow3', 'yellow4', - 'gold2', 'gold3', 'gold4', 'goldenrod1', 'goldenrod2', 'goldenrod3', 'goldenrod4', - 'DarkGoldenrod1', 'DarkGoldenrod2', 'DarkGoldenrod3', 'DarkGoldenrod4', - 'RosyBrown1', 'RosyBrown2', 'RosyBrown3', 'RosyBrown4', 'IndianRed1', 'IndianRed2', - 'IndianRed3', 'IndianRed4', 'sienna1', 'sienna2', 'sienna3', 'sienna4', 'burlywood1', - 'burlywood2', 'burlywood3', 'burlywood4', 'wheat1', 'wheat2', 'wheat3', 'wheat4', 'tan1', - 'tan2', 'tan4', 'chocolate1', 'chocolate2', 'chocolate3', 'firebrick1', 'firebrick2', - 'firebrick3', 'firebrick4', 'brown1', 'brown2', 'brown3', 'brown4', 'salmon1', 'salmon2', - 'salmon3', 'salmon4', 'LightSalmon2', 'LightSalmon3', 'LightSalmon4', 'orange2', - 'orange3', 'orange4', 'DarkOrange1', 'DarkOrange2', 'DarkOrange3', 'DarkOrange4', - 'coral1', 'coral2', 'coral3', 'coral4', 'tomato2', 'tomato3', 'tomato4', 'OrangeRed2', - 'OrangeRed3', 'OrangeRed4', 'red2', 'red3', 'red4', 'DeepPink2', 'DeepPink3', 'DeepPink4', - 'HotPink1', 'HotPink2', 'HotPink3', 'HotPink4', 'pink1', 'pink2', 'pink3', 'pink4', - 'LightPink1', 'LightPink2', 'LightPink3', 'LightPink4', 'PaleVioletRed1', - 'PaleVioletRed2', 'PaleVioletRed3', 'PaleVioletRed4', 'maroon1', 'maroon2', - 'maroon3', 'maroon4', 'VioletRed1', 'VioletRed2', 'VioletRed3', 'VioletRed4', - 'magenta2', 'magenta3', 'magenta4', 'orchid1', 'orchid2', 'orchid3', 'orchid4', 'plum1', - 'plum2', 'plum3', 'plum4', 'MediumOrchid1', 'MediumOrchid2', 'MediumOrchid3', - 'MediumOrchid4', 'DarkOrchid1', 'DarkOrchid2', 'DarkOrchid3', 'DarkOrchid4', - 'purple1', 'purple2', 'purple3', 'purple4', 'MediumPurple1', 'MediumPurple2', - 'MediumPurple3', 'MediumPurple4', 'thistle1', 'thistle2', 'thistle3', 'thistle4', - 'grey1', 'grey2', 'grey3', 'grey4', 'grey5', 'grey6', 'grey7', 'grey8', 'grey9', 'grey10', - 'grey11', 'grey12', 'grey13', 'grey14', 'grey15', 'grey16', 'grey17', 'grey18', 'grey19', - 'grey20', 'grey21', 'grey22', 'grey23', 'grey24', 'grey25', 'grey26', 'grey27', 'grey28', - 'grey29', 'grey30', 'grey31', 'grey32', 'grey33', 'grey34', 'grey35', 'grey36', 'grey37', - 'grey38', 'grey39', 'grey40', 'grey42', 'grey43', 'grey44', 'grey45', 'grey46', 'grey47', - 'grey48', 'grey49', 'grey50', 'grey51', 'grey52', 'grey53', 'grey54', 'grey55', 'grey56', - 'grey57', 'grey58', 'grey59', 'grey60', 'grey61', 'grey62', 'grey63', 'grey64', 'grey65', - 'grey66', 'grey67', 'grey68', 'grey69', 'grey70', 'grey71', 'grey72', 'grey73', 'grey74', - 'grey75', 'grey76', 'grey77', 'grey78', 'grey79', 'grey80', 'grey81', 'grey82', 'grey83', - 'grey84', 'grey85', 'grey86', 'grey87', 'grey88', 'grey89', 'grey90', 'grey91', 'grey92', - 'grey93', 'grey94', 'grey95', 'grey97', 'grey98', 'grey99'] - - couleur = rd.randint(0,len(liste)-1) - return liste[couleur] - -def coordonnees_facade(immeuble:dict) -> tuple: - """Renvoie les différents paramètres pour un immeuble crée aleatoirement - - :: param numero(int) :: le numero de l'immeuble pour savoir le repérer - - """ - x_gauche = -200 + 200 * immeuble['numero'] - y_bas = -100 - return (x_gauche, y_bas) - - -def dessiner_facade(immeuble:dict) -> None: - """fait appel au code dessiner pour dessiner la facade de l'immeuble en fonction des paramètres envoyer - - """ - # Traduction des données de rue vers dessiner - crayon = {} - crayon['écriture'] = "grey" - crayon['fond'] = immeuble['couleur_facade'] - crayon['épaisseur'] = 3 - x, y = coordonnees_facade(immeuble) # désempaquatage du couple - cote = LARGEUR_IMMEUBLE - # Demande d'affichage - for i in range(immeuble['etages']): - ds.rectangle(80, cote, crayon, (x,y + i * 80)) - -def dessiner_porte(immeuble:dict) -> None: - """fait appel au code dessiner pour dessiner la porte et sa possition par rapport à l'immeuble en fonction des paramètres envoyer - - """ - # Traduction des données de rue vers dessiner - crayon = {} - crayon['écriture'] = 'black' - crayon['fond'] = 'brown' - crayon['épaisseur'] = 2 - x, y = coordonnees_facade(immeuble) - position = None - if immeuble["porte"] == "gauche": - position = 0 - elif immeuble["porte"] == "milieu": - position = 1 - elif immeuble["porte"] == "droite": - position = 2 - else: - position = rd.randint(0,2) - x = x -95 + 42.5*position - y = y - ds.rectangle(55, 30, crayon, (x,y)) - -def dessiner_porte_fenetre(immeuble:dict) -> None: - """fait appel au code dessiner pour dessiner une porte-fenetre et sa possition par rapport à l'étage en fonction des paramètres envoyer - - """ - crayon = {} - crayon['écriture'] = 'white' - crayon['fond'] = 'blue' - crayon['épaisseur'] = 2 - x, y = coordonnees_facade(immeuble) - x = x -95 + 42.5*position - y = y + 25 + etage * 80 - largeur = 50 - longeur = 30 - ds.rectangle(largeur, longeur, crayon, (x,y)) - -def fenetre_aleatoire(immeuble): - """fonction qui déffinie aleatoirement une des 2 types de fenetres qui sont etre placées sur l'immeuble - - """ - toutes = [dessiner_fenetre, dessiner_porte_fenetre] #création d'un tableau avec juste le nom des fonction sans les () pour juste avoir le nom des fonction - i = rd.randint(0,1) #ici une fonction ramdom qui choisit aléatoirement entre l'une des deux fonctions que l'on va stoker dans i - toutes[i](immeuble) #on appel la fonction choisit en lui donnant son argument (immeuble) - -def dessiner_fenetre(immeuble:dict, etage:int, position:int) -> None: - """fait appel au code dessiner pour dessiner une fenetre et sa possition par rapport à l'étage en fonction des paramètres envoyer - - """ - crayon = {} - crayon['écriture'] = 'white' - crayon['fond'] = 'gold' - crayon['épaisseur'] = 2 - x, y = coordonnees_facade(immeuble) - x = x -95 + 42.5*position - y = y + 25 + etage * 80 - cote = 30 - ds.rectangle(cote, cote, crayon, (x,y)) - -def dessiner_fenetres(immeuble:dict) -> None: - """on repete la fonction dessiner feunetre pour avoir des fenetres à tous les différents étages de l'immeuble - - """ - for etage in range(immeuble['etages']): - for position in range(3): - dessiner_fenetre(immeuble, etage, position) - -def dessiner_toit(immeuble:dict) -> None: - """fait appel au code dessiner pour dessiner un toit entre 2 possibilité en fonction des paramètres envoyer - - """ - # Traduction des données de rue vers dessiner - crayon = {} - crayon['écriture'] = "grey" - crayon['fond'] = "black" - crayon['épaisseur'] = 3 - x, y = coordonnees_facade(immeuble) # désempaquatage du couple - y = y + 0 - x = x -140 - cote = LARGEUR_IMMEUBLE - nb = immeuble['etages'] - if immeuble['toit'] == 1: - ds.rectangle(10, cote + 40 , crayon, (x + 160,y + nb * 80)) - elif immeuble['toit'] == 2: - ds.triangle_isocele(cote, crayon, (x,y + nb * 80)) - elif immeuble['toit'] == "pointu": - ds.triangle_isocele(cote, crayon, (x,y + nb * 80)) - elif immeuble['toit'] == "plat": - ds.rectangle(10, cote + 40 , crayon, (x + 160,y + nb * 80)) - -def dessiner_immeuble(immeuble:dict) -> None: - """on fait appel a toutes les fonctions si-dessus pour créer notre immeuble - - """ - dessiner_facade(immeuble) - dessiner_toit(immeuble) - fenetre_aleatoire(immeuble) - dessiner_porte(immeuble) - # à compléter avec d'autres fonctions pour le reste : toit, fenêtres... - -def dessiner_rue_aleatoire() -> None: - """fonction pour dessiner toute une rue aleatoirement de 4 immeubles - - """ - for n in range(4): - informations_immeuble = immeuble_aleatoire(n) - dessiner_immeuble(informations_immeuble) - -def dessiner_rue_decrite(rue:list[dict]) -> dict: - """fonction pour dessiner toute une rue qui est décrite dans un fichier texte à part du nombre d'immeubles - - """ - for immeuble in rue: - print(immeuble) - information_immeuble = immeuble - dessiner_immeuble(information_immeuble) - - -# Programme principal - -if __name__ == '__main__': - dessiner_rue_aleatoire() - +"""Ce fichier permet de dessiner une rue à l'aide des fonctions suivantes : + ++ dessiner_rue_aleatoire() ++ dessiner_rue_decrite(rue:dict) +""" + + +# Importation + +import dessiner as ds +import turtle as trt +import random as rd +trt.bgcolor("lightskyblue") + +# Constantes + +LARGEUR_IMMEUBLE = 140 + + +# Fonction privées + + +def immeuble_aleatoire(numero:int) -> dict: + """Renvoie les différents paramètres pour un immeuble crée aleatoirement + + :: param numero(int) :: le numero de l'immeuble pour savoir le repérer + + """ + + informations = {} + informations['couleur_facade'] = couleur_aleatoire() + informations['numero'] = numero + informations['etages'] = rd.randint(2,5) + informations['toit'] = rd.randint(1,2) + informations['porte'] = 3 + return informations + +def couleur_aleatoire() -> str: + """Renvoie une couleur aleatoirement + + """ + + liste = ['snow', 'ghost white', 'white smoke', 'gainsboro', 'floral white', 'old lace', + 'linen', 'antique white', 'papaya whip', 'blanched almond', 'bisque', 'peach puff', + 'navajo white', 'lemon chiffon', 'mint cream', 'azure', 'alice blue', 'lavender', + 'lavender blush', 'misty rose', 'dark slate gray', 'dim gray', 'slate gray', + 'light slate gray', 'gray', 'light gray', 'midnight blue', 'navy', 'cornflower blue', 'dark slate blue', + 'slate blue', 'medium slate blue', 'light slate blue', 'medium blue', 'royal blue', 'blue', + 'dodger blue', 'deep sky blue', 'sky blue', 'light sky blue', 'steel blue', 'light steel blue', + 'light blue', 'powder blue', 'pale turquoise', 'dark turquoise', 'medium turquoise', 'turquoise', + 'cyan', 'light cyan', 'cadet blue', 'medium aquamarine', 'aquamarine', 'dark green', 'dark olive green', + 'dark sea green', 'sea green', 'medium sea green', 'light sea green', 'pale green', 'spring green', + 'lawn green', 'medium spring green', 'green yellow', 'lime green', 'yellow green', + 'forest green', 'olive drab', 'dark khaki', 'khaki', 'pale goldenrod', 'light goldenrod yellow', + 'light yellow', 'yellow', 'gold', 'light goldenrod', 'goldenrod', 'dark goldenrod', 'rosy brown', + 'indian red', 'saddle brown', 'sandy brown', + 'dark salmon', 'salmon', 'light salmon', 'orange', 'dark orange', + 'coral', 'light coral', 'tomato', 'orange red', 'red', 'hot pink', 'deep pink', 'pink', 'light pink', + 'pale violet red', 'maroon', 'medium violet red', 'violet red', + 'medium orchid', 'dark orchid', 'dark violet', 'blue violet', 'purple', 'medium purple', + 'thistle', 'snow2', 'snow3', + 'snow4', 'seashell2', 'seashell3', 'seashell4', 'AntiqueWhite1', 'AntiqueWhite2', + 'AntiqueWhite3', 'AntiqueWhite4', 'bisque2', 'bisque3', 'bisque4', 'PeachPuff2', + 'PeachPuff3', 'PeachPuff4', 'NavajoWhite2', 'NavajoWhite3', 'NavajoWhite4', + 'LemonChiffon2', 'LemonChiffon3', 'LemonChiffon4', 'cornsilk2', 'cornsilk3', + 'cornsilk4', 'ivory2', 'ivory3', 'ivory4', 'honeydew2', 'honeydew3', 'honeydew4', + 'LavenderBlush2', 'LavenderBlush3', 'LavenderBlush4', 'MistyRose2', 'MistyRose3', + 'MistyRose4', 'azure2', 'azure3', 'azure4', 'SlateBlue1', 'SlateBlue2', 'SlateBlue3', + 'SlateBlue4', 'RoyalBlue1', 'RoyalBlue2', 'RoyalBlue3', 'RoyalBlue4', 'blue2', 'blue4', + 'DodgerBlue2', 'DodgerBlue3', 'DodgerBlue4', 'SteelBlue1', 'SteelBlue2', + 'SteelBlue3', 'SteelBlue4', 'DeepSkyBlue2', 'DeepSkyBlue3', 'DeepSkyBlue4', + 'SkyBlue1', 'SkyBlue2', 'SkyBlue3', 'SkyBlue4', 'Slategray1', 'Slategray2', 'Slategray3', + 'Slategray4', 'LightSteelBlue1', 'LightSteelBlue2', 'LightSteelBlue3', + 'LightSteelBlue4', 'LightBlue1', 'LightBlue2', 'LightBlue3', 'LightBlue4', + 'LightCyan2', 'LightCyan3', 'LightCyan4', 'PaleTurquoise1', 'PaleTurquoise2', + 'PaleTurquoise3', 'PaleTurquoise4', 'CadetBlue1', 'CadetBlue2', 'CadetBlue3', + 'CadetBlue4', 'turquoise1', 'turquoise2', 'turquoise3', 'turquoise4', 'cyan2', 'cyan3', + 'cyan4', 'DarkSlategray1', 'DarkSlategray2', 'DarkSlategray3', 'DarkSlategray4', + 'aquamarine2', 'aquamarine4', 'DarkSeaGreen1', 'DarkSeaGreen2', 'DarkSeaGreen3', + 'DarkSeaGreen4', 'SeaGreen1', 'SeaGreen2', 'SeaGreen3', 'PaleGreen1', 'PaleGreen2', + 'PaleGreen3', 'PaleGreen4', 'SpringGreen2', 'SpringGreen3', 'SpringGreen4', + 'green2', 'green3', 'green4', 'chartreuse2', 'chartreuse3', 'chartreuse4', + 'OliveDrab1', 'OliveDrab2', 'OliveDrab4', 'DarkOliveGreen1', 'DarkOliveGreen2', + 'DarkOliveGreen3', 'DarkOliveGreen4', 'khaki1', 'khaki2', 'khaki3', 'khaki4', + 'LightGoldenrod1', 'LightGoldenrod2', 'LightGoldenrod3', 'LightGoldenrod4', + 'LightYellow2', 'LightYellow3', 'LightYellow4', 'yellow2', 'yellow3', 'yellow4', + 'gold2', 'gold3', 'gold4', 'goldenrod1', 'goldenrod2', 'goldenrod3', 'goldenrod4', + 'DarkGoldenrod1', 'DarkGoldenrod2', 'DarkGoldenrod3', 'DarkGoldenrod4', + 'RosyBrown1', 'RosyBrown2', 'RosyBrown3', 'RosyBrown4', 'IndianRed1', 'IndianRed2', + 'IndianRed3', 'IndianRed4', 'sienna1', 'sienna2', 'sienna3', 'sienna4', 'burlywood1', + 'burlywood2', 'burlywood3', 'burlywood4', 'wheat1', 'wheat2', 'wheat3', 'wheat4', 'tan1', + 'tan2', 'tan4', 'chocolate1', 'chocolate2', 'chocolate3', 'firebrick1', 'firebrick2', + 'firebrick3', 'firebrick4', 'brown1', 'brown2', 'brown3', 'brown4', 'salmon1', 'salmon2', + 'salmon3', 'salmon4', 'LightSalmon2', 'LightSalmon3', 'LightSalmon4', 'orange2', + 'orange3', 'orange4', 'DarkOrange1', 'DarkOrange2', 'DarkOrange3', 'DarkOrange4', + 'coral1', 'coral2', 'coral3', 'coral4', 'tomato2', 'tomato3', 'tomato4', 'OrangeRed2', + 'OrangeRed3', 'OrangeRed4', 'red2', 'red3', 'red4', 'DeepPink2', 'DeepPink3', 'DeepPink4', + 'HotPink1', 'HotPink2', 'HotPink3', 'HotPink4', 'pink1', 'pink2', 'pink3', 'pink4', + 'LightPink1', 'LightPink2', 'LightPink3', 'LightPink4', 'PaleVioletRed1', + 'PaleVioletRed2', 'PaleVioletRed3', 'PaleVioletRed4', 'maroon1', 'maroon2', + 'maroon3', 'maroon4', 'VioletRed1', 'VioletRed2', 'VioletRed3', 'VioletRed4', + 'magenta2', 'magenta3', 'magenta4', 'orchid1', 'orchid2', 'orchid3', 'orchid4', 'plum1', + 'plum2', 'plum3', 'plum4', 'MediumOrchid1', 'MediumOrchid2', 'MediumOrchid3', + 'MediumOrchid4', 'DarkOrchid1', 'DarkOrchid2', 'DarkOrchid3', 'DarkOrchid4', + 'purple1', 'purple2', 'purple3', 'purple4', 'MediumPurple1', 'MediumPurple2', + 'MediumPurple3', 'MediumPurple4', 'thistle1', 'thistle2', 'thistle3', 'thistle4', + 'grey1', 'grey2', 'grey3', 'grey4', 'grey5', 'grey6', 'grey7', 'grey8', 'grey9', 'grey10', + 'grey11', 'grey12', 'grey13', 'grey14', 'grey15', 'grey16', 'grey17', 'grey18', 'grey19', + 'grey20', 'grey21', 'grey22', 'grey23', 'grey24', 'grey25', 'grey26', 'grey27', 'grey28', + 'grey29', 'grey30', 'grey31', 'grey32', 'grey33', 'grey34', 'grey35', 'grey36', 'grey37', + 'grey38', 'grey39', 'grey40', 'grey42', 'grey43', 'grey44', 'grey45', 'grey46', 'grey47', + 'grey48', 'grey49', 'grey50', 'grey51', 'grey52', 'grey53', 'grey54', 'grey55', 'grey56', + 'grey57', 'grey58', 'grey59', 'grey60', 'grey61', 'grey62', 'grey63', 'grey64', 'grey65', + 'grey66', 'grey67', 'grey68', 'grey69', 'grey70', 'grey71', 'grey72', 'grey73', 'grey74', + 'grey75', 'grey76', 'grey77', 'grey78', 'grey79', 'grey80', 'grey81', 'grey82', 'grey83', + 'grey84', 'grey85', 'grey86', 'grey87', 'grey88', 'grey89', 'grey90', 'grey91', 'grey92', + 'grey93', 'grey94', 'grey95', 'grey97', 'grey98', 'grey99'] + + couleur = rd.randint(0,len(liste)-1) + return liste[couleur] + +def coordonnees_facade(immeuble:dict) -> tuple: + """Renvoie les différents paramètres pour un immeuble crée aleatoirement + + :: param numero(int) :: le numero de l'immeuble pour savoir le repérer + + """ + x_gauche = -200 + 200 * immeuble['numero'] + y_bas = -100 + return (x_gauche, y_bas) + + +def dessiner_facade(immeuble:dict) -> None: + """fait appel au code dessiner pour dessiner la facade de l'immeuble en fonction des paramètres envoyer + + """ + # Traduction des données de rue vers dessiner + crayon = {} + crayon['écriture'] = "grey" + crayon['fond'] = immeuble['couleur_facade'] + crayon['épaisseur'] = 3 + x, y = coordonnees_facade(immeuble) # désempaquatage du couple + cote = LARGEUR_IMMEUBLE + # Demande d'affichage + for i in range(immeuble['etages']): + ds.rectangle(80, cote, crayon, (x,y + i * 80)) + +def dessiner_porte(immeuble:dict) -> None: + """fait appel au code dessiner pour dessiner la porte et sa possition par rapport à l'immeuble en fonction des paramètres envoyer + + """ + # Traduction des données de rue vers dessiner + crayon = {} + crayon['écriture'] = 'black' + crayon['fond'] = 'brown' + crayon['épaisseur'] = 2 + x, y = coordonnees_facade(immeuble) + position = None + if immeuble["porte"] == "gauche": + position = 0 + elif immeuble["porte"] == "milieu": + position = 1 + elif immeuble["porte"] == "droite": + position = 2 + else: + position = rd.randint(0,2) + x = x -95 + 42.5*position + y = y + ds.rectangle(55, 30, crayon, (x,y)) + +def dessiner_porte_fenetre(immeuble:dict) -> None: + """fait appel au code dessiner pour dessiner une porte-fenetre et sa possition par rapport à l'étage en fonction des paramètres envoyer + + """ + crayon = {} + crayon['écriture'] = 'white' + crayon['fond'] = 'blue' + crayon['épaisseur'] = 2 + x, y = coordonnees_facade(immeuble) + x = x -95 + 42.5*position + y = y + 25 + etage * 80 + largeur = 50 + longeur = 30 + ds.rectangle(largeur, longeur, crayon, (x,y)) + +def fenetre_aleatoire(immeuble): + """fonction qui déffinie aleatoirement une des 2 types de fenetres qui sont etre placées sur l'immeuble + + """ + toutes = [dessiner_fenetre, dessiner_porte_fenetre] #création d'un tableau avec juste le nom des fonction sans les () pour juste avoir le nom des fonction + i = rd.randint(0,1) #ici une fonction ramdom qui choisit aléatoirement entre l'une des deux fonctions que l'on va stoker dans i + toutes[i](immeuble) #on appel la fonction choisit en lui donnant son argument (immeuble) + +def dessiner_fenetre(immeuble:dict, etage:int, position:int) -> None: + """fait appel au code dessiner pour dessiner une fenetre et sa possition par rapport à l'étage en fonction des paramètres envoyer + + """ + crayon = {} + crayon['écriture'] = 'white' + crayon['fond'] = 'gold' + crayon['épaisseur'] = 2 + x, y = coordonnees_facade(immeuble) + x = x -95 + 42.5*position + y = y + 25 + etage * 80 + cote = 30 + ds.rectangle(cote, cote, crayon, (x,y)) + +def dessiner_fenetres(immeuble:dict) -> None: + """on repete la fonction dessiner feunetre pour avoir des fenetres à tous les différents étages de l'immeuble + + """ + for etage in range(immeuble['etages']): + for position in range(3): + dessiner_fenetre(immeuble, etage, position) + +def dessiner_toit(immeuble:dict) -> None: + """fait appel au code dessiner pour dessiner un toit entre 2 possibilité en fonction des paramètres envoyer + + """ + # Traduction des données de rue vers dessiner + crayon = {} + crayon['écriture'] = "grey" + crayon['fond'] = "black" + crayon['épaisseur'] = 3 + x, y = coordonnees_facade(immeuble) # désempaquatage du couple + y = y + 0 + x = x -140 + cote = LARGEUR_IMMEUBLE + nb = immeuble['etages'] + if immeuble['toit'] == 1: + ds.rectangle(10, cote + 40 , crayon, (x + 160,y + nb * 80)) + elif immeuble['toit'] == 2: + ds.triangle_isocele(cote, crayon, (x,y + nb * 80)) + elif immeuble['toit'] == "pointu": + ds.triangle_isocele(cote, crayon, (x,y + nb * 80)) + elif immeuble['toit'] == "plat": + ds.rectangle(10, cote + 40 , crayon, (x + 160,y + nb * 80)) + +def dessiner_immeuble(immeuble:dict) -> None: + """on fait appel a toutes les fonctions si-dessus pour créer notre immeuble + + """ + dessiner_facade(immeuble) + dessiner_toit(immeuble) + dessiner_fenetres(immeuble) + dessiner_porte(immeuble) + # à compléter avec d'autres fonctions pour le reste : toit, fenêtres... + +def dessiner_rue_aleatoire() -> None: + """fonction pour dessiner toute une rue aleatoirement de 4 immeubles + + """ + for n in range(4): + informations_immeuble = immeuble_aleatoire(n) + dessiner_immeuble(informations_immeuble) + +def dessiner_rue_decrite(rue:list[dict]) -> dict: + """fonction pour dessiner toute une rue qui est décrite dans un fichier texte à part du nombre d'immeubles + + """ + for immeuble in rue: + print(immeuble) + information_immeuble = immeuble + dessiner_immeuble(information_immeuble) + + +# Programme principal + +if __name__ == '__main__': + dessiner_rue_aleatoire() +