E-toys idiomes de programmation
From OFSET Wiki
Voir aussi Idiomes pour composer des jeux EToys
Contents |
[edit] Introduction
Cette page référence et commente des procédés de programmation propres au système de scripts E-toys appelés idiomes E-toys. Ces idiomes sont des solutions apportées à des problèmes de programmation apparus lors de réalisation de projets. Ils sont d'une part liés à un projet et apportent une solution à un problème réel et d'autre part assez généraux pour être utilisés et adaptés à d'autres situations. Livrés pour l'instant en vrac, ils pourront être en différentes catégories le moment venu. Deux critères de classement pourront être envisagés.
- A partir des commandes utilisées.
- A partir du type de problème à résoudre.
[edit] Idiomes
[edit] Comptage des objets dans une scène
[edit] Total des objets
La commande nombre d'objets dans la catégorie Collection de la scène suffit pour ce but. Il suffit de la tirer et de la déposer dans le monde, elle se transforme en affichage de la valeur.
[edit] Nombre d'objets de différents types.
Des variables dans la scène serviront de compteur, une par type d'objets.
La scène contiendra un script compter
- Qui mettra à zéro les variables
- Qui dira à tous les objets contenus dans la scène d'exécuter le script compteMoi.
Chaque objet contiendra un script compteMoi qui augmentera de 1 la variable le concernant.
Après exécution du script compter, les variables contiendront les nombres d'objets. Comme ci-dessus, on peut tirer dans le monde les briques des variables pour afficher les valeurs.
[edit] Une étoile mange des pastilles
Cet idiome pose le problème du bon choix de qui sait quoi - qui fait quoi.
Le but de cet exemple est que l'étoile (unique) mange les pillules (représentées par des ellipses).
Les pilules savent si elles touchent l'étoile et peuvent agir en conséquence: Se cacher si elle la touchent pour simuler l'action d'être mangée.
L'étoile sait si elle touche l'une des ellipse, mais ne peut savoir laquelle et la faire se cacher. Il faut alors qu'elle demande aux ellipses de se cacher si elles touchent l'étoile.
Le script qui cache l'ellipse ne peut être que dans l'ellipse.
Si ce script est actif, (contrôle la situation périodiquement, cela suffit mais on a un grand nombre de scripts actifs si les ellipses sont nombreuses.
En procédant en 2 étapes on se limite à un seul script actf et l'exécution des scripts dans les ellipses qu'en cas de collision.
- Détecter une collision par l'étoile, (Seul script actif).
- Si collision : Faire exécuter le script des ellipses.
Pour tester la première solution.
- Mettre le script de 'étoile à normal, ce script n'intervient plus.
- Activer le script d'une ellipse.
- Mettre le même statut à toute la fratrie.(même menu que pour choisir le statut, dernière ligne).
[edit] Qui me touche ?
[edit] Dernier acteur
Lors d'une collision, il est parfois utile de savoir avec qui la collision a lieu.
Dans la traduction actuelle, la brique 'tell all contents' de la catégorie collection a été oubliée, elle sera traduite par 'dire à tous' lors d'une prochaine mise à jour de la traduction.
Dans l'exemple suivant, l'étoile veut savoir quel objet de la scène, donc parmi les ellipses, elle touche.
Le mécanisme est le suivant: Chaque acteur a un script moi qui lui permet de s'anoncer en mettant son identité dans la variable enCollision de l'étoile.
L'étoile a un script qui me touche :
- qui met d'abord Etoile (elle même) dans la variable enCollision de l'étoile.
- qui demande à tous les acteurs de la scène d'exécuter leur script moi.
Après exécution du script qui me touche, s'il n'y a pas de collision, la variable enCollision contient l'étoile, sinon cette variable contient le dernier acteur qui touche l'étoile.
Le mot dernier se rapporte à l'ordre des objets dans la scène (voir catégorie divers : numéro d'élément.)
[edit] Liste des acteurs
La recherche de tous les acteurs touchant un acteur illustre un idiome permettant de représenter des acteurs.
En effet il faut regrouper des références aux acteurs et non les acteurs eux-mêmes. Problème trivial dans un langage textuel comme Smalltalk, tous les noms sont en fait des références, qui est difficile dans la représentation visuelle de E-toys.
Dans un récipient, on place les acteurs eux-même, non une référence aux acteurs.
Pour résoudre le problème, on va utiliser un acteur représentation qui représentera l'acteur et contiendra une variable référence. Cet acteur servira de modèle et sera copié, la copie sera placée dans le récipient lorsqu'une collision est trouvée:
- On met l'identité de l'acteur dans la variable référence du modèle.
- On place une copie du modèle dans le récipient quiTouche.
Dans l'exemple suivant, l'étoile veut savoir quels sont tous les objets (ici des ellipses) qu'elle touche.
C'est le script moi de chaque acteur qui fait ce travail. Le script quiMeTouche de l'étoile lance l'opération pour tous les acteurs.
[edit] Piloter un objet avec les touches fléchées
La brique lastKeyStroke permet de tester la dernière touche appuyée dont une copie est déposée dans cette variable. on peut affecter quelle que chose dans cette variable pour qu'une deuxième lecture soit ignorée par les tests si aucune touche n'a été appuyée depuis.
[edit] Création d'une copie d'un morph par programme, les anneaux du serpent
La brique copie retourne comme valeur le morph créé. Il est nécessaire d'affecter cette valeur à une variable de type acteur pour pouvoir envoyer des mesages à ce nouveau morph.
Dans le cas d'un nouvel anneau du serpent, il faut connecter ce maillon à l'anneau qui le précède et dire au serpent que c'est maintenant lui le dernier.
Il y a donc :
- Création d'un nouveau morph par copie et la commande inclure: qui dit où le morph doit être créé.
- Initialisation et mise à jour de certaines valeurs.
On remarquera le caractère récursif du script bouge qui déplace l'anneau suivant avant de bouger lui-même.
A remarquer que les notions mises en jeu ici sont très difficiles pour des enfants, faisant appel à la représentation symbolique qui se met en place au début de l'adolescence. Heureusement la manipulation concrète que permet Squeak facilite cette mise en place. Cela signifie qu'il faut d'abord mettre en place les scripts en copiant avec le halo vert et en utilisant les désignateurs (widgets du type acteur) pour remplir les variables à la souris. Une fois la démarche comprise, on peut l'automatiser dans un script.







