![]() |
Apprentissage de la programmation en
P_LOGO
|
![]() |
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 !
|
|