Programmation
Ce thème a pour objectif de vous faire acquérir les bases de la programmation, à travers du dessin paramétrique avec Turtle.
A la fin des quelques chapitres que comporte ce thème, vous serez capable de réaliser des dessins simples avec une grande efficacité, et surtout une grande souplesse !
Mais qu'est-ce qu'il raconte ?
Le but du dessin paramétrique est de pouvoir modifier facilement des aspects (les paramètres) d'un dessin.
Par exemple : le nombre de maisons, la couleur des sapins, la taille des montagnes, ...
Et ensuite, à laisser le programme re-générer le dessin à chaque modification.
Par exemple, pour passer de ça :

A çà :

Il faut quelques secondes !
Code de démo
Le code avec sa configurataion de base :
from turtle import *
from random import randint
speed(0)
# Ces variables servent a être modifiées
# Et la valeur des modifs pour la démo
taille_maisons = 1.0 #0.7
positions_maisons = [-350, -50, 120, 300]
couleur_maisons = "wheat" #plum
taille_sapins_bg = 1.5 #1.3
positions_sapins_bg = [-300, 100, 350]
taille_sapins_fg = 1.7 #1.0
positions_sapins_fg = [-400, -150, 190] #+ [0]
def dessiner_rectangle(base_x, base_y, taille_x, taille_y, couleur):
penup()
goto(base_x - taille_x/2, base_y)
pendown()
setheading(0)
pencolor(couleur)
fillcolor(couleur)
begin_fill()
forward(taille_x)
left(90)
forward(taille_y)
left(90)
forward(taille_x)
left(90)
forward(taille_y)
end_fill()
def dessiner_triangle_equi(base_x, base_y, taille, couleur):
penup()
goto(base_x - taille/2, base_y)
pendown()
setheading(0)
pencolor(couleur)
fillcolor(couleur)
begin_fill()
forward(taille)
left(120)
forward(taille)
left(120)
forward(taille)
end_fill()
#on ajoute les parametres x y
def dessiner_maison(x, y):
dessiner_rectangle(x, y, 100 * taille_maisons, 100 * taille_maisons, couleur_maisons) #on les utilise
dessiner_rectangle(20 * taille_maisons + x, y, 30 * taille_maisons, 60 * taille_maisons, "steelblue")
dessiner_triangle_equi(x, 100 * taille_maisons + y, 150 * taille_maisons, "firebrick")
def dessiner_sapin(x, y, taille):
dessiner_rectangle(x, y, 30 * taille, 30 * taille, "brown") #on les utilise
dessiner_triangle_equi(x, 30 * taille + y, 90 * taille, "green")
dessiner_triangle_equi(x, 70 * taille + y, 70 * taille, "green")
dessiner_triangle_equi(x, 100 * taille + y, 70 * taille, "green")
def maisons():
for i in positions_maisons:
dessiner_maison(i, -150)
def sapins_bg():
for i in positions_sapins_bg:
dessiner_sapin(i, -150, taille_sapins_bg)
def sapins_fg():
for i in positions_sapins_fg:
dessiner_sapin(i, -150, taille_sapins_fg)
#on dessine plusieurs maisons
dessiner_rectangle(-400, -150, 2000, 400, "lightblue")
goto(-50, 175)
fillcolor("yellow")
begin_fill()
circle(100)
end_fill()
dessiner_triangle_equi(-100, -150, 500, "gray")
dessiner_triangle_equi(-300, -150, 400, "gray")
dessiner_triangle_equi(300, -150, 350, "gray")
sapins_bg()
maisons()
sapins_fg()
dessiner_rectangle(-400, -550, 2000, 400, "lightgreen")
done()
A la fin de ce thème, vous aurez donc réalisé un dessin du même genre, avec peut-être moins de paramètres...
Ou peut être plus, par exemple :
De la perspective

Code de démo
from turtle import *
from random import randint
speed(0)
# Ces variables servent a être modifiées
# Et la valeur des modifs pour la démo
taille_maisons = 0.7 #0.7
positions_maisons = [-350, -50, 120, 300]
couleur_maisons = "plum" #plum
taille_sapins_bg = 1 #1.3
positions_sapins_bg = [-300, 100, 350]
taille_sapins_fg = 1.7 #1.0
positions_sapins_fg = [-400, -150, 0, 190]
def dessiner_rectangle(base_x, base_y, taille_x, taille_y, couleur):
penup()
goto(base_x - taille_x/2, base_y)
pendown()
setheading(0)
pencolor(couleur)
fillcolor(couleur)
begin_fill()
forward(taille_x)
left(90)
forward(taille_y)
left(90)
forward(taille_x)
left(90)
forward(taille_y)
end_fill()
def dessiner_triangle_equi(base_x, base_y, taille, couleur):
penup()
goto(base_x - taille/2, base_y)
pendown()
setheading(0)
pencolor(couleur)
fillcolor(couleur)
begin_fill()
forward(taille)
left(120)
forward(taille)
left(120)
forward(taille)
end_fill()
#on ajoute les parametres x y
def dessiner_maison(x, y):
dessiner_rectangle(x, y, 100 * taille_maisons, 100 * taille_maisons, couleur_maisons) #on les utilise
dessiner_rectangle(20 * taille_maisons + x, y, 30 * taille_maisons, 60 * taille_maisons, "steelblue")
dessiner_triangle_equi(x, 100 * taille_maisons + y, 150 * taille_maisons, "firebrick")
def dessiner_sapin(x, y, taille):
dessiner_rectangle(x, y, 30 * taille, 30 * taille, "brown") #on les utilise
dessiner_triangle_equi(x, 30 * taille + y, 90 * taille, "green")
dessiner_triangle_equi(x, 70 * taille + y, 70 * taille, "green")
dessiner_triangle_equi(x, 100 * taille + y, 70 * taille, "green")
def maisons(y):
for i in positions_maisons:
dessiner_maison(i, y)
def sapins_bg(y):
for i in positions_sapins_bg:
dessiner_sapin(i, y, taille_sapins_bg)
def sapins_fg(y):
for i in positions_sapins_fg:
dessiner_sapin(i, y, taille_sapins_fg)
#on dessine plusieurs maisons
dessiner_rectangle(-400, -150, 2000, 400, "lightblue")
goto(-50, 175)
fillcolor("yellow")
begin_fill()
circle(100)
end_fill()
dessiner_triangle_equi(-100, -150, 500, "gray")
dessiner_triangle_equi(-300, -150, 400, "gray")
dessiner_triangle_equi(300, -150, 350, "gray")
dessiner_rectangle(-400, -550, 2000, 400, "lightgreen")
sapins_bg(-155)
maisons(-170)
sapins_fg(-190)
done()
Plus flagrant dans une forêt :

De la génération aléatoire
(entre ces 3 images, je n'ai fait que relancer le programme :)



Code de démo
from turtle import *
from random import randint
speed(0)
# Ces variables servent a être modifiées
# Et la valeur des modifs pour la démo
taille_maisons = 0.7 #0.7
positions_maisons = [-350, -50, 120, 300]
couleur_maisons = "plum" #plum
taille_sapins_bg = 1 #1.3
positions_sapins_bg = [-300, 100, 350]
taille_sapins_fg = 1.7 #1.0
positions_sapins_fg = [-400, -150, 0, 190]
def dessiner_rectangle(base_x, base_y, taille_x, taille_y, couleur):
penup()
goto(base_x - taille_x/2, base_y)
pendown()
setheading(0)
pencolor(couleur)
fillcolor(couleur)
begin_fill()
forward(taille_x)
left(90)
forward(taille_y)
left(90)
forward(taille_x)
left(90)
forward(taille_y)
end_fill()
def dessiner_triangle_equi(base_x, base_y, taille, couleur):
penup()
goto(base_x - taille/2, base_y)
pendown()
setheading(0)
pencolor(couleur)
fillcolor(couleur)
begin_fill()
forward(taille)
left(120)
forward(taille)
left(120)
forward(taille)
end_fill()
#on ajoute les parametres x y
def dessiner_maison(x, y):
dessiner_rectangle(x, y, 100 * taille_maisons, 100 * taille_maisons, couleur_maisons) #on les utilise
dessiner_rectangle(20 * taille_maisons + x, y, 30 * taille_maisons, 60 * taille_maisons, "steelblue")
dessiner_triangle_equi(x, 100 * taille_maisons + y, 150 * taille_maisons, "firebrick")
def dessiner_sapin(x, y, taille):
dessiner_rectangle(x, y, 30 * taille, 30 * taille, "brown") #on les utilise
dessiner_triangle_equi(x, 30 * taille + y, randint(70, 100) * taille, "green")
dessiner_triangle_equi(x, 70 * taille + y, randint(50, 80) * taille, "green")
dessiner_triangle_equi(x, 100 * taille + y, randint(30, 60) * taille, "green")
def maisons(y):
for i in positions_maisons:
dessiner_maison(i, y)
def sapins_bg(y):
for i in positions_sapins_bg:
dessiner_sapin(i, y, taille_sapins_bg)
def sapins_fg(y):
for i in positions_sapins_fg:
dessiner_sapin(i, y, taille_sapins_fg)
#on dessine plusieurs maisons
dessiner_rectangle(-400, -150, 2000, 400, "lightblue")
goto(-50, 175)
fillcolor("yellow")
begin_fill()
circle(100)
end_fill()
dessiner_triangle_equi(-100, -150, 500, "gray")
dessiner_triangle_equi(-300, -150, 400, "gray")
dessiner_triangle_equi(300, -150, 350, "gray")
dessiner_rectangle(-400, -550, 2000, 400, "lightgreen")
sapins_bg(-155)
maisons(-170)
sapins_fg(-190)
done()
Ce thème est le premier à aborder pour aborder ce cours : il sera réutilisé dans tous les autres thèmes de manière optionnelle ou non.
notes prof
Progression :
- Quelques enjeux, basthon
- Séquence et Turtle
- Les boucles for
- Les variables -> paramétrisation. Faire des exos de paramétrisation pour faire transition avec la suite (fonctions)
- Fonctions -> une fonction = 1 "objet". P-E en extension (de la DAO ? illustrer l'abstraction en fournissant un outils qui rends "dessin triangle/dessin carré" en SVG ?)
- IF et calcul
- While
- Mini projet : dessin