5. Cloner - Turtle
¶
Dans Programmation I nous avons fait connaissance avec un style de programmation que nous appelons programmation procédurale. Dans cette deuxième partie, nous allons découvrir un nouveau style de programmation qui s’appelle programmation orientée objet.
Le premier changement que nous allons voir est que nous pouvons créer des tortues à volonté. Jusqu’à maintenant nous avons travaillé avec une seule tortue. Dès maintenant nous allons créer autant de tortues que nous voulons. Les tortues sont des objets dérivés de la classe Turtle
. Nous allons voir que :
la classe
Turtle
permet de produire multiples tortues,la ligne de code
bob = Turtle()
crée une nouvelle tortue appeléebob
,la méthode
bob.clone()
crée un clone de la tortuebob
.
5.1. Reproduire des tortues¶
Jusqu’à maintenant, nous avons utilisé une seule tortue. Mais nous pouvons en créer autant que nous voulons. Chaque tortue possède sa couleur, sa position, son orientation, sa vitesse, sa forme, etc. Dans le programme suivant nous créons une tortue ana
, une tortue bob
et une tortue mia
.
Exercice : Créez encore une autre tortue, choisissez sa couleur et faites la bouger quelque part.
5.2. La course des tortues¶
Dans le programme ci-dessous deux tortues, Ana et Bob, font la course.
On crée d’abord la tortue ana
qui est la tortue par défaut getturtle()
et on configure
sa forme
sa vitesse
sa couleur
son épaisseur de trait
Ensuite nous faisons une copie identique avec ana.clone()
.
Pour les faire bouger, vous devez appuyer sur les touches
a
pour faire avancerana
(rouge).b
pour faire avancerbob
(bleu).
5.3. Méthodes Turtle¶
La fonction dir()
permet d’afficher toutes les méthodes que possède la classe Turtle
. Il y en a environ 72 et vous en connaissez déjà une grande partie.
Dans la liste de compréhension, nous excluons les méthodes spéciales qui commencent avec un tiret bas _
et affichons toutes les méthodes pour un objet Turtle
.
Les 4 méthodes de mouvement et leurs raccourcis
forward
,fd
- avancerbackward
,back
,bk
- reculerleft
,lt
- tourner à gaucheright
,rt
- tourner à droite
Les méthodes pour colorier
begin_fill
,end_fill
- pour entourer la forme à remplircolor
- les 2 couleurs (ligne et remplissage)colormode
- le mode (1 ou 255)pencolor
- couleur de lignefillcolor
- couleur de remplissage
Les méthodes de dessin
dot
- dessiner un pointcircle
- dessiner un cerclestamp
- dessiner un tampon de la tortuewrite
- écrire un texte
Les méthodes d’initialisation
clear
- effacer les traceshome
- retourner à l’originereset
- réinitialiser la tortue
Les méthodes de la tortue
shape
- choisir la formespeed
- choisir la vitessewidth
,pensize
- épaisseur du traithideturtle
,ht
- masquer la tortueshowturtle
,st
- afficher la tortuedown
,pendown
,pd
- baisser le styloup
,penup
,pu
- lever le styloisdown
,isvisible
,fill
- info sur l’état (True/False)clone
- créer une copie de la tortue
Les méthodes de position et leurs raccourcis
position
,pos
- lire la positionsetposition
,setpos
,goto
- changer la positionxcor
,ycor
- lire une coordonnéesetx
,sety
- changer une coordonnéetowards
,heading
- lire l’orientationsetheading
,seth
- changer l’orientationdistance
- distance vers une tortuedegrees
,radians
- choisir l’unité
Les méthodes pour trouver la référence aux objets
getpen
,getturtle
- objet tortuegetscreen
- objet écran
Les méthodes pour la taille de la fenêtre
window_height
window_width
Les méthodes pour définir les fonctions de rappel
onclick
- cliquer la tortueondrag
- tirer la tortueonrelease
- relâcher la tortue
La méthode pour entrer dans la boucle principale
done
,mainloop
Les méthodes pour contrôler l’animation de la tortue
delay
- délai entre les animationstracer
- activer ou désactiver l’animationupdate
- redessiner la scène
Prudence
Si vous exécutez ce code directement en Python avec un éditeur externe comme Thonny, vous constatez un nombre bien plus élevé d’objets (plus que 130).
Ceci est dû au fait que dans ce site votre code est traduit en JavaScript et exécuté par Skulpt directement dans votre navigateur. Le module en JavaScript ne traduit pas tous les objets, mais les méthodes essentielles sont toutes présentes.
5.4. Une tortue texte¶
Nous allons maintenant introduire une deuxième tortue qui sera responsable uniquement pour écrire du texte. L’expression text = Turtle()
crée une nouvelle tortue appelée text
. Pour appeler des méthodes sur cette nouvelle tortue nous devons utiliser la méthode dotée, donc précéder les instructions par text.
Exercice : Ajoutez une fonction de rappel pour faire tourner la tortue.
5.5. Bouger deux tortues¶
Nous pouvons utiliser des fonctions de rappel pour faire bouger les deux tortues à l’aide des touches du clavier.
La fonction clone()
permet de cloner la tortue ana
. La nouvelle tortue est un objet séparé qui sera initialisé avec les bonnes valeurs pour la forme et la vitesse. Pour bob
il faudra juste changer sa couleur en bleu.
5.6. Créer en boucle¶
Dans l’exemple suivant, nous allons créer 10 tortues à des positions aléatoires, avec des couleurs aléatoires.
Appuyer sur la touche espace fait les avancer de 10 pixels. La fonction s.turtles()
renvoie une liste de toutes les tortues créées. Dans une boucle nous déplaçons chaque tortue de 10 pixels.
5.7. Créer par un clic¶
Dans l’exemple suivant, nous créons des tortues en cliquant avec la souris.
La stratégie adopte est de crée une première tortue cachée au centre qui a les propriétés suivantes:
forme de tortue
vitesse maximale
stylo levé
À chaque clic de souris, cette tortue invisible au centre est clonée. Il suffit alors de la colorier, placer, orienter et montrer.
Appuyer sur la touche espace fait les avancer de 10 pixels.
5.8. Une tortue parmi 10¶
Dans l’exemple suivant, nous allons créer 10 tortues à des endroits aléatoires. Cliquer sur une des tortues, change sa couleur en rouge et la rend active. Son déplacement peut être contrôlé par les touches flèches.
5.9. Exercice¶
La course¶
Dans la course des tortues :
ajoutez une ligne de départ une ligne d’arrivé,
affichez le nom du gagnant,
affichez le temps utilisé,
affichez les clics par seconde