Logo de pulpico

pulpico

Ô flots impétueux, menez moi ici.

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)
Une ligne noire

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)
Un carré noir

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)
Un carré noir

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)
Deux carrés: l'un bleu, l'autre noir

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))
Un carré noir un peu plus grand que les précédents

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)
Un carré noir placé à un autre endroit que les précédents

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.