Variable Squeak
From OFSET Wiki
Contents |
[edit] Avant propos sur les variables
Ou Les variables numériques et de couleur dans les scripts de déplacement.
Commandes directes: On peut faire exécuter des commandes dans le visualiseur de scripts à l'aide du point d'exclamation jaune.
Ce procédé est utilisé ici pour explorer la démarche qui va nous conduire à l'utilisation de variables.
Comment rédiger un script qui permette d'obtenir automatiquement ce genre de résultat chaque fois qu'il sera activé ?
Il nous faut par programme augmenter la valeur de la commande avance' à chaque répétition ?
La solution est d'utiliser une variable pour gérer cette valeur.
Une variable permet de conserver une valeur, de la modifier et de la transmettre à une instruction.
Les propriétés des objets telles que les coordonnées, le cap ou la couleur sont aussi des variables, mais en plus elles ont une action sur l'objet, ce que l'on appelle un effet de bord. Les variables par contre n'ont pas d'effet de bord, elles se contentent de garder et transmettre une valeur.
Dans la fenêtre du visualiseur, nous avons, dans la partie supérieure, la lettre V (VARIABLE) entourée d'un cercle, à côté du nom de l'objet, et qui va nous donner la solution de ce problème.
[edit] Créer une variable
La variable est une commande supplémentaire que l'on va créer de toute pièce et qui se comportera comme les commandes de propriétés. La seule différence est que pour les propriétés, la modification de la valeur est accompagnée d'un effet, par exemple changement de la couleur d'un objet ou changement de position de cet objet, ce qui s'appelle effet de bord. Pour une variable, il n'y a que action sur la valeur sans effet de bord.
[edit] Nommer une variable
En cliquant sur ce V on obtient une fenêtre qui propose de donner un nom quelconque à cette variable.
On pourra l'appeler comme on veut, mais il est recommandé de donner un nom qui a un sens:
- ANGLE si elle fonctionne avec la commande TOURNE DE...
- AV si elle est associée à AVANCE DE...
- ORIENTATION pour l'indication d'un CAP.
- COULEUR pour choisir une COULEUR.
- etc.
Le nom sera suivi d'un nombre s'il est déjà utilisé car les noms doivent être uniques.
[edit] Choisir le type de variable
[edit] Notion de type
Les variables ont un type' lié à la valeur qu'elles représentent. Tout à la droite de la variable se trouve un élément d'interface pour lui donner une valeu. Cet élément dépend du type de la variable, pour une variable de type couleur, c'est un carré indiquant la couleur, en cliquant sur ce carré on obtient le nuancier de choix des couleurs et la pipette, pour une valeur numérique c'est une zone de saisie de nombre avec des flèches vertes pour augmenter ou diminuer le nombre.
Chaque commande a son mode de fonctionnement propre.
Pour certaines, c'est une indication numériquequi détermine l'action qu'elle exerce sur un objet :
- Rectangle avance de ! 1, nombre que l'on va faire évoluer dans un sens ou un autre grâce aux flèches vertes verticales qui le précèdent, et l'objet avance ou recule de x pixels.
- Rectangle tourne de ! 90 (les chiffres renvoient à des degrés d'angles)
Pour d'autres les moyens d'action se situent dans d'autres registres :
- un nuancier pour choisir la couleur,
- vrai ou faux pour crayon baissé.
- etc.
[edit] Choix du type
Il va donc falloir commencer par attribuer à la variable le type qui lui permettra de fonctionner avec la valeur de la commande à laquelle elle sera associée.
Pour celà, nous allons pointer le mini menu situé à côté du nom de la variable d'un objet :
- cliquer sur le rectangle précédant la variable "ANGLE" ou "AV" du rectangle.
- un menu s'ouvre dans lequel nous choisirons changer le type de variable
Nous avons alors un 2eme menu qui propose les types que nous venons de citer
Dans le cas présenté ici, nous choisissons :
- nombre pour une variable qui accompagnera des commandes de déplacement ou de pivotement. Des nombres s'installent aussitôt dans la case qui suit la flèche.
- couleur pour une variable liée à la commande de changement de couleur. Un carré coloré prend la place des nombres et permettra, en cliquant dessus, pour choisir la couleur désirée dans le nuancier qui s'installe au-dessous.
Chaque type de variable a une réponse spécifique pour le choix qui est fait.
[edit] Utilisation de variables
Une fois le type de la variable mis en harmonie avec celui de la commande qu'elle va accompagner, il reste à les associer. L'opération se fait en 2 temps.
[edit] Script de lancement, initialisation des variables
On construit un premier script que l'on pourrait appeler SCRIPT DE DEMARRAGE et dans lequel on peut, éventuellement mais pas nécessairement, situer la place de l'objet au départ (x et y), son orientation, mais surtout :
Affecter une valeur initiale à la variable appartenant au même type que celui de la valeur de la commande qu'elle doit accompagner. Ceci se fait tirant sa brique à partir de la flèche pour la déposer à l'intérieur du script.
Ici la variable AV est numérique car elle va être associée à la commande AVANCE DE:!
Dans ce cas précis, le chiffre va représenter la longueur du déplacement de l'objet au moment du DEMARRAGE de la programmation lorsque cette variable aura été jumelée avec sa commande (le rectangle avancera de 5).
Elle pourrait être associée à la commande TOURNE DE: et, à ce moment là, son indication chiffrée représenterait, en degré, son angle de pivotement
Puis on place, à l'intérieur de ce 1er script une commande issue de la catégorie Contrôle des scripts qui permettra d'activer le 2eme script quand il aura été construit (on le mettra en place en appuyant la souris sur script vide, ce qui permettra de faire apparaître la liste des scripts et de choisir celui que l'on veut activer.
[edit] Script de fonctionnement, utilisation des variables
On construit ensuite le SCRIPT DE FONCTIONNEMENT.
Pour les besoins de la démonstration, nous allons nous intéresser, pour débuter, uniquement aux variables qui permettent de faire évoluer des commandes de déplacement (avance de...).
Nous allons rédiger un script de déplacement dans lequel la variable AV attachée à la commande AVANCE DE: va permettre à un objet de parcourir des longueurs de trajet dont la taille augnentera ou diminuera régulièrement à chaque changement de direction.
Pour rendre plus visible ce jeu de la variable, nous demanderons au rectangle de se transformer en objet traceur, nous l'appellerons "TORTUE". Nous le ferons avancer d'une distance augmentant à chaque fois de 1 pixel après avoir pivoté de 90° et nous observerons ensuite les caractéristiques du tracé qu'il laisse sur l'écran.
On peut tirer une commande script vide dans la catégorie script et placer la commande TORTUE AVANCE DE: dans ce script. Il est aussi possible de tirer directement la commande TORTUE AVANCE DE: et de la lâcher dans le monde, ce qui ouvre un script contenant cette commande.
La première opération, pour la construction du script "GRANDIT", va donc consister à remplacer le nombre de la commande AVANCE DE: par le déplacement initial de la tortue donné par la variable AV dans le script d'initialisation.
Prendre cette variable dans le visualiseur des commandes par sa brique(tortue av ) et en la déposer sur la commande du script TORTUE AVANCE DE: en remplacement de la valeur numérique de cette commande.
Ce qui revient à dire :
Tortue avance du même nombre de pixels que celui donné par la variable Av dans le script "départ" (c'est à dire, ici, avance de 1)
Autrement dit, la nouvelle commande : tortue avance de|tortue.AV renvoie à la dimension donnée, pour AV, dans le script précédent.
Mais ce dispositif ne suffit pas pour construire une progression ou une régression. Il faut maintenant augmenter ou diminuer la valeur de la variable AV.
Il va falloir reprendre une 2eme fois la commande AV dans le visualiseur, mais cette fois par sa flèche(affectation) et la déposer également dans le script "GRANDIT" sous la précédente commande.
En appuyant, avec la souris, sur les flèches verticales qui précèdent le nom de la variable (AV) on fait apparaître un certain nombre de propositions (augmenter de.., diminuer de.., multiplier par...)
Dans le cas présent, nous choisissons AUGMENTER DE... et nous décidons du type d'augmentation en ajustant le chiffre qui suit.
AUGMENTER DE ....1 , 2. etc.
A partir de maintenant, nous avons une programmation qui va permettre à la tortue de tracer sur l'écran (CRAYON BAISSE - VRAI) une succession de traits pivotant à angle droit et augmentant à chaque fois d'un pixel.
Sortir les feux de circulation (contrôle des script) du tiroir Accessoires.
Il suffit d'activer le bouton DEPART qui lance le 1er script, et, automatiquement, il lance le script GRANDIT.
Le résultat de cette programmation est une progression sans fin de la taille du trait, la figure pouvant envahir tout l'écran. Arrêter à l'aide du bouton stop des feux de circulation.
Nous sommes dans un système répétitif qui tourne en boucle quand le script est activé et qui rappelle la récursivité des procédures LOGO. Mais il nous manque ici le dispositif restrictif qui va permettre d'arrêter la progression de la boucle.
L'introduction, dans le script, de la plage de test, que nous avons déjà utilisée plusieurs fois pour interrompre ou modifier des actions, va nous rendre ce service.
Dans le cas d'une figure dont la taille du tracé augmente, il faut donner la dimension au-de-là de laquelle l'action ne sera pas poursuivie parce que le script sera arrêté ou mis en pause (ce qui est le cas ici).
Si Tortue.AV >50 alors Tortue|pause script|Grossit
Ou en bon français, si l'avancée de la tortue est supérieure à 50 pixels, alors la tortue doit mettre le script Grossit en pause.
Dans un script dans lequel la taille du tracé va aller en diminuant, il est évident qu'il va falloir inverser les manoeuvres et avoir un script DIMINUE à la place du script "GROSSIT".
Par conséquent on va partir, dans le script "DEPART", d'une longueur maximale (50) qui diminuera progressivement de 1 pixel et ne pourra pas aller au-delà de la taille 1 Pixel. (en l'absence de test d'arrêt la progression se poursuivrait avec les chiffres négatifs)
[edit] Les traces sur l'écran de la tortue
A partir de maintenant, nous sommes en possession d'un outil qui va nous permettre, par voie de programmation, de faire, sur l'écran, un nombre très important de tracés progressifs ou dégressifs de formes diversifiées. Nous allons pouvoir utiliser nos 2 scripts (DEPART - GROSSIT ... ou l'autre couple) et modifier à volonté : ...l'angle du pivotement ...la taille de l'avancée au départ. ...la taille de l'avancée à l'arrivée. ...l'action progressive ou dégressive de AV pourra avoir une valeur supérieure ou inférieur à 1. (Tortue AV augmenter de 1/4 )
Ci-dessus une suite de graphes construite en activant le bouton "DEPART" après avoir, à chaque fois, modifié les 4 paramètres énumérés plus haut - le projet
Le projet, à télécharger et étudier :
Les tracés examinés jusqu'ici sont réalisés avec une seule variable (variable de longueur), mais l'on peut en introduire d'autres :
- Faire varier en même temps taille et angulation
- Introduire une variable de couleur ou sonore
Le champ des possibilités est très vaste.
[edit] Des déplacements sans traces
Les tracés ci-dessus sont essentiellement à finalité de création graphique.
Mais on peut utiliser le même type de programmation pour construire des parcours d'objets jouant un rôle dans un projet, et qui ne laissent pas de traces lors de leurs déplacements.
On trouve des exemples de ce procédé dans les projet de MENATALLA (le projet FLEUR et ABEILLE) et dans celui de NISHAANTHAN et TIAGO (le projet FOOT pour le BLOG).
Ils font décrire à leurs objets des trajets dégressifs courbes ou rectilignes avec variables Le premier projet : Menatalla fait parcourir à son abeille un trajet circulaire qui va en se rétrécissant .
Test d'arret : Lorsque la tête de l'abeille (jaune) passe sur le coeur de la fleur (orange), le script stoppe l'action.
Le projet de NishaanThan et Tiago n'a pas de test d'arrêt à proprement parler, mais un test d'alternance : La position Y du ballon faisant passer le script de montée du ballon, LANCE au script de descente, SHOOTE, ce qui crée un mouvement perpétuel qui ne peut être interrompu que par l'intervention des bouton de la réglette "GO / STOP"
D'autre part, Menatalla utilise, pour stopper le vol de l'abeille, un procédé non encore utilisé dans ces pages : Le test "COULEURS VUES"
Dans ce test, c'est la rencontre de la couleur de l'objet mobile (jaune - la couleur qui voit) avec une seconde couleur, (orange – le coeur de la fleur , la couleur qui est vue) qui va provoquer la mise en pause du script.
La couleur jaune est transférée à l'intérieur de la commande en cliquant successivement sur la première plage rouge de la commande, puis sur la tête de l'abeille. La couleur jaune est reproduite dans le premier rectangle.
La couleur orange est transférée dans le 2eme rectangle de la même façon. Ce procédé permet d'avoir une parfaite identité entre la couleur de l'objet et la couleur à l'intérieur du script.
- Le projet de Menatalla :
- Le projet de Nishaantan et Tiago :
Ces projets ont été réalisés par des élèves de 7 ème d'un collège de Genève (12 ans)
L'essai qui précède est schématique et n'épuise pas le problème des variables qui est très riche et demande à être développé. C'est juste une tentative limitée au cas de déplacements simples pour essayer de comprendre la logique de ce type de programmation dans le monde de Squeak.

