Apprentissage de la programmation en P_LOGO
Les multi-tortues.

 

 

Retour au sommaire

Une tortue, c'est bien joli. Plusieurs tortues sur un même écran, qui se contrôlent en même temps ou indépendamment, c'est mieux. C'est ce que propose cette partie.

Quand on fait dessiner à la tortue des figures, sans le savoir, on s'adresse à la tortue numéro 0, c'est celle par défaut, c'est aussi la seule apparente au départ. En fait, de nombreux logos permettent de commander plusieurs tortues en même temps. C'est le cas de notre P_LOGO favori.

La nouvelle primitive est FTORTUE (pour fixe tortue). Elle permet de choisir à quelle tortue on s'adresse désormais. On peut l'utiliser de deux façon différentes :

FTORTUE 3 choisit la tortue numéro 3 comme tortue active.

FTORTUE [2 5 12] choisit les tortues numéro 2 5 et 12 comme tortue active.

Les ordres donnés s'appliquent à (/aux) tortues actives.

Par exemple, si on veut faire un carré et un rond avec deux tortues différentes :

VE

FTORTUE 0 LC FPOS [-100 0] BC

FTORTUE 1 MT LC FPOS [100 0] BC

On remarquera que seule la tortue 0 est visible. Pour rendre visible la tortue 1, il faut le lui demander avec un MT.

FTORTUE 0 FCC 11 CERCLE 30

FTORTUE 1 FCC 14 REPETE 4 [AV 60 TD 90]

Le tour est joué. Les deux tortues sont indépendantes, ont chacune répondu aux ordres qui ont suivit le FTORTUE.

On peut aussi s'amuser à commander la même chose aux deux tortues.

FTORTUE [0 1]

REPETE 8 [AV 10 TG 45]

Pour connaître la (/les) tortue(s) active(s), il faut consulter la variable TORTUE, qui rend soit un numéro, soit une liste…

On va faire une petite procédure qui fixe différents angles aux tortues. Pour cela, un peu de récursivité et l'usage des listes sont bien utiles.

POUR TOURNETORTUE :LISTETORTUES

SI EGALè COMPTE :LISTETORTUES 17 [STOP]

FTORTUE :LISTETORTUES

TD 22.5

TOURNETORTUE MD COMPTE :LISTETORTUES :LISTETORTUES

FIN

VE TOURNETORTUE [0] MT

Un peu d'explication… c'est parti. La procédure TOURNETORTUE requiert un paramètre qui doit être une liste. La première liste doit contenir la valeur 0 et elle seule. La ligne SI… examine le nombre d'éléments dans la liste :LISTETORTUES, s'il y en a 17, la procédure s'achève. La dernière ligne (juste avant FIN) exécute de nouveau la procédure TOURNETORTUE (c'est encore de la récursivité terminale) avec comme paramètre la liste :LISTETORTUE à laquelle a été ajouté le nombre d'éléments de cette même liste. Autrement dit, à la première exécution, :LISTETORTUE contient [0] et le nombre d'élément est 1, au deuxième passage, elle contient [0 1], au troisième, elle contient [0 1 2], etc.

Entre les deux lignes expliquées, on choisit de s'adresser à toutes les tortues de la liste :LISTETORTUE et on leur demande de tourner de 22,5 degrés. Si bien que la tortue 0 tournera de 22,5 degrés 16 fois (=360), la tortue 1 tournera de 22,5 degrés 15 fois… la tortue 15 tournera de 22,5 degré une fois seulement.

Un MT permet de voir… un nuage de tortues qui s'enchevêtrent. Pour en être convaincu, on peut leur demander d'avancer de 100 pas (AV 100).

Un petit programme de démonstration, pour s'amuser :

POUR BOUGEHASARD

FCC HASARD 16

AV HASARD 5

TD DIFF HASARD 80 40

FIN

Comme son nom l'indique, la procédure BOUGEHASARD fait évoluer les tortues actives d'une manière (couleur de crayon, nombre de pas et angle) aléatoire.

POUR DEPART

VE ENR

TOURNETORTUE [0]

LC CT

AV 10

BC

REPETE 300 [BOUGEHASARD]

FIN

Ca peut faire de très jolies choses pleines de couleurs. A essayer plusieurs fois.

Que c'est beau, le LOGO !

Chapître suivant


Webmaster : Sinclair ( philippe.lucidarme@wanadoo.fr ) dernière mise à jour : 1 aout1999.