Tutoriel du module turtle
Avec le module turtle
, vous pouvez dessiner en ordonnant à une tortue (comme celle que l'on trouve par exemple dans LOGO➶) d'avancer, de tourner (à gauche ou à droite), de lever le stylo ou de le poser, de changer sa couleur...
Pour donner des ordres à la tortue, vous devez lui fournir une liste d'instructions (voir documentation pour connaître les commandes). Cette liste est donnée en argument à une fonction de dessin qui va lire les instructions et dessiner l'image dans un fichier SVG.
Installation
Avant toute chose, commencez par installer Guile➶ ainsi que guile-cairo➶. En effet, le module turtle
utilise Cairo➶ pour dessiner des images.
Sous Debian, vous pouvez réaliser ces actions, en exécutant les commandes suivantes:
apt-get -y update
apt-get -y install guile-3.0
apt-get -y install guile-cairo
Pour accéder au module turtle
, rendez-vous sur la page sourcehut du projet discover➶ et clonez le.
git clone [email protected]:~zictozin/discover
Dans ce projet, accédez au répertoire turtle/lib
, vous pouvez dès maintenant vous amusez avec le module turtle
. Pour cela placez les fichiers turtle.scm
et state.scm
dans le même dossier que votre fichier depuis lequel vous allez commander votre tortue. Commencez votre fichier par le bloc de code suivant :
#! /usr/bin/guile -s
!#
;; add the directory that is in the load path
(add-to-load-path (dirname (current-filename)))
;; access turtle public interface
(use-modules (turtle))
Exemple simple
Commençons par dessiner une ligne noire de 60 pixels partant du milieu de l'écran vers la droite. Par défaut, le point de départ de la tortue est au milieu de l'espace de dessin aux coordonnées (100, 100) et elle regarde vers la droite.
Voici la liste d'instructions à écrire pour obtenir notre ligne noire :
;; instruction to draw a black line of 60 pixels
(define black-line (list (forward 60)))
;; draw the black line
(draw black-line)
Dessinons un carré
Pour dessiner un carré, vous devez d'abord définir une liste de commandes pour le construire. Nous appellerons cette liste square
. La liste est ensuite passée en paramètre de la fonction draw
.
;; instructions to draw a square
(define square
(list (forward 40)
(turn-left 90)
(forward 40)
(turn-left 90)
(forward 40)
(turn-left 90)
(forward 40)))
;; draw the square
(draw square)
Nous remarquons que la liste square
est répétitive, elle comporte un motif que nous pouvons extraire. Ce motif sera défini séparément et on pourra le réutiliser. Nommons le side
et nous le répéterons 4 fois grâce à repeat
pour obtenir un carré.
;; instructions to draw a side of a square
(define side
(list (forward 40)
(turn-left 90)))
;; instructions to draw a square with repeat
(define square
(repeat 4 side))
;; draw the square
(draw square)
Dessinons deux carrés
Nous pouvons réutiliser la définition précédente d'un carré afin d'en dessiner deux sur une même image. Il nous faut encore définir une liste d'instructions move
pour se déplacer vers un nouvel emplacement et changer la couleur du style avant de dessiner le deuxième carré.
;; instructions to draw a side of a square
(define side
(list (forward 40)
(turn-left 90)))
;; instructions to draw a square with repeat
(define square
(repeat 4 side))
;; instructions to move and change color
(define move
(list (pen-up)
(turn-right 180)
(forward 40)
(pen-down)
(color 0 0 255)))
;; instructions to draw 2 squares
(define two-squares
(append square move square))
;; draw the squares
(draw two-squares)
Dessinons un carré avec une fonction
Pour pouvoir dessiner des carrés dont la longueur des côtés peut être paramétrée, nous devons définir une fonction. Nous devrons également faire une fonction pour définir un côté de carré dont nous pourrons faire varier la longueur. La variable x
sera la longueur d'un côté.
;; instructions to draw a side with a function
(define (side x)
(list (forward x)
(turn-left 90)))
;; instructions to draw a square with a function
(define (square x)
(repeat 4 (side x)))
;; draw a square of length 60
(draw (square 60))
Dessinons un carré avec ses coordonnées
Vous pouvez également dessiner un carré en ordonnant à la tortue de passer par certains points du plan.
;; instructions to draw a square with its coordinates
(define square
(list (line-to 100 40)
(line-to 40 40)
(line-to 40 100)
(line-to 100 100)))
;; draw a square
(draw square)
Notre tour d'horizon du module turtle
s'achève ici. Pour en savoir plus, n'hésitez pas à parcourir le code du fichier turtle.scm➶ (une centaine de lignes) ou à vous référer à la documentation du module.