Projet - Carte de voeux#
Dans ce projet, vous allez créer un carte de voeux en utilisant les fonctions prédéfinies dans la section Fonctions - dessin, vos connaissances en Python et votre imagination.
Consignes#
La carte doit contenir:
un ou plusieurs motifs qui se répètent,
au moins un motif répété avec des nuances (changement de couleur, de taille, etc.) effectués au moyen de paramètres,
au moins une forme avec une bordure,
des couleurs personnalisées,
une partie aléatoire (fonction
randint
du module random).
Le code doit contenir:
des variables avec des noms appropriés,
des fonctions avec paramètres,
des boucles pour éviter les répétitions,
des fonctions conditionnelles.
Le code doit être:
organisé correctement (import, définitions de fonction, programme principal),
modulaire (décomposition en fonctions avec/sans paramètres),
commenté,
fonctionnel (sans bogue majeur).
from tdoc import svg
def creation_image(largeur, hauteur, couleur):
global img
img = svg.Image(largeur, hauteur, stroke='black', style='width: 100%; height: 100%')
rectangle(0, 0, largeur, hauteur, couleur)
def rectangle(x, y, largeur, hauteur, remplissage, bord="transparent"):
img.rect(x, y, largeur, hauteur, stroke=bord, fill=remplissage)
def triangle(point_1, point_2, point_3, remplissage, bord="transparent"):
img.polygon(point_1, point_2, point_3, stroke=bord, fill=remplissage)
def cercle(centre_x, centre_y, rayon, remplissage, bord="transparent"):
img.circle(centre_x, centre_y, rayon, stroke=bord, fill=remplissage)
def ellipse(centre_x, centre_y, rayon_x, rayon_y, remplissage, bord="transparent"):
img.ellipse(centre_x, centre_y, rayon_x, rayon_y, stroke=bord, fill=remplissage)
def ligne(x1, y1, x2, y2, couleur, epaisseur):
img.line(x1, y1, x2, y2, stroke=svg.Stroke(couleur, width=epaisseur))
def texte(x, y, texte, couleur, taille):
font = f"font: bold italic {taille}px serif"
img.text(x, y, texte, stroke='transparent', fill=couleur, style=font)
# Affiche l'image
render(img)
Solution
from tdoc import svg
from math import sqrt
from random import randint
def triangle_isocele(pos_x, pos_y, base, hauteur, couleur_remplissage, couleur_bordure="transparent"):
triangle((pos_x, pos_y), (pos_x + base, pos_y), (pos_x + base / 2, pos_y - hauteur), couleur_remplissage, couleur_bordure)
def sapin(pos_x, pos_y, base, hauteur, larg_tronc, couleur):
n_triangles = randint(3, 5)
x = pos_x
y = pos_y
hauteur_tronc = 1.5 * larg_tronc
rectangle(x, y, larg_tronc, hauteur_tronc, "brown")
x = pos_x - 0.5 * (base - larg_tronc)
for _ in range(n_triangles):
triangle_isocele(x, y, base, hauteur, couleur)
y -= 0.4 * hauteur
def etoile(longueur, couleur):
pos_x = randint(0, 560)
pos_y = randint(20, 150)
triangle((pos_x, pos_y), (pos_x + longueur, pos_y), (pos_x + longueur / 2, pos_y - longueur / sqrt(2)), couleur, couleur)
triangle((pos_x, pos_y - longueur / 2), (pos_x + longueur, pos_y - longueur / 2 ), (pos_x + longueur / 2, pos_y - longueur / 2 + longueur / sqrt(2)), couleur, couleur)
def cadeau(pos_x, pos_y, longueur, hauteur, couleur, couleur_ruban):
rectangle(pos_x, pos_y, longueur, hauteur, couleur, couleur)
ligne(pos_x, pos_y + hauteur/2, pos_x + longueur, pos_y + hauteur/2, couleur_ruban, 5)
ligne(pos_x + longueur/2, pos_y, pos_x + longueur/2, pos_y + hauteur, couleur_ruban, 5)
def bonhomme(pos_x, pos_y, rayon):
ellipse(pos_x+rayon+20, pos_y+rayon, rayon*1.5, rayon/2, "gray", "gray")
ellipse(pos_x+rayon+20+1.5*rayon*1.5+10, pos_y+rayon, 2/3*rayon*1.5, 2/3*rayon/2, "gray", "gray")
cercle(pos_x, pos_y, rayon, "white", "white")
r = 2/3*rayon
cercle(pos_x, pos_y - (rayon + r), r, "white", "white")
def guirlande(position_x, position_y, rayon):
for i in range(6):
ligne(position_x, position_y, position_x + 50, position_y + 25, "black", 4)
ligne(position_x + 50, position_y + 25, position_x + 100, position_y, "black", 4)
if i % 2 == 0:
couleur = "red"
else:
couleur = "green"
cercle(position_x + 50, position_y + 25 + rayon, rayon, couleur)
position_x += 100
# Create the image.
creation_image(600, 400, "#7dcbf0")
for i in range(12):
etoile(30, "yellow")
sapin(100, 200, 100, 60, 20, "#16401E")
sapin(200, 250, 120, 70, 20, "#1E9C38")
sapin(50, 230, 80, 40, 10, "green")
sapin(140, 260, 80, 40, 10, "#26C946")
cadeau(430, 120, 100, 70, "pink", "violet")
cadeau(410, 160, 60, 40, "orange", "red")
cadeau(510, 170, 50, 35, "#2367CF", "#6E23CF")
bonhomme(350, 300, 50)
guirlande(0, 20, 10)
texte(50, 310, "Joyeux Noël", "blue", "40")
texte(130, 350, "et", "blue", "40")
texte(30, 390, "Bonne année!", "blue", "40")
Développement et rendu du projet#
# Écrivez le programme ici