Scratch : comprendre les messages
Scratch est un logiciel formidable pour comprendre les principes de la programmation et permet même de faire de nombreuses choses de manière intuitive sans avoir besoin d’apprendre un langage complexe. Si vous ne le connaissez pas encore, vous pouvez consulter mon article sur l’ouvrage J’apprends à coder avec Scratch. ou 25 défis pour coder avec Scratch.
Il y a cependant un concept qui nécessite une précision : les messages. À quoi servent-ils ? Quand les utiliser ? Pourquoi Scarlett Johansson ne réponds pas à mes appels ? Je n’ai pas de réponse à la dernière question mais pour les autres, je vais essayer de vous donner une réponse dans ce billet.
Pour suivre ces explications, je vous ai préparé un projet disponible hébergé sur le site officiel Scratch. Il s’appelle Demo messages. Attention toutefois, le projet est composé des scripts finaux présentés ici.
Mise en place
Pour expliquer les messages, il faut partir de quelque chose. Je vais me baser sur le Jeu de Mode que vous pouvez trouver dans le coffret J’apprends à coder avec Scratch ou sur les fiches (en anglais) sur le site officiel. Mon point de départ est donc le personnage de Dani, un T-shirt, une chemise et un pantalon.
Chaque lutin a une action drapeau vert qui va l’initialiser, donc le placer à son point de départ. Les vêtements ont une action lorsque le lutin est cliqué, action qui déplace le vêtement sur Dani.
La dernière carte de la série nous montre comment réagir en fonction de l’endroit où est le vêtement. Ainsi, si on click sur le vêtement :
- si le vêtement touche Dani, on le range
- Sinon, on le met sur Dani.
Les scripts complets sont alors les suivants
Il ne fait pas si froid
Mon exemple propose 2 vêtements pour le torse : t-shirt ou chemise. Si l’un est déjà sur Dani, un click sur le second l’amènera également sur Dani qui se retrouvera avec un t-shirt sous une chemise. Si nous voulons éviter ça, il faut cliquer sur le vêtement que porte Dani pour lui retirer avant d’en mettre un nouveau.
Comment simplifier les choses de telle manière à ce que, par exemple, si Dani porte le t-shirt et que nous cliquons sur la chemise, Dani retire le t-shirt ? il faudrait avoir le comportement suivant :
- si le vêtement est sur Dani, il est rangé
- sinon (le vêtement n’est pas sur Dani) :
- si il y a un vêtement sur Dani, il doit être rangé
- le vêtement doit aller sur Dani
C’est là qu’entrent en jeu les messages.
Qu’est-ce qu’un message ?
Un message, c’est exactement ce que son nom indique, une information qui va être transmise. Il faut donc deux acteurs : celui qui envoi le message et celui qui le reçoit. Et il y a le contenu du message.
Commençons par le contenu, il s’agit simplement d’un texte. Ce texte doit décrire spécifiquement l’action attendue. Dans l’idéal, il devrait se limiter à un mot et plus précisément un verbe. N’oubliez pas en effet qu’il apparait dans les menus déroulants des blocs, on doit facilement l’identifier.
L’expéditeur d’un message, c’est donc une action qui possède un bloc Envoyer à tous. Ce bloc est explicite sur le destinataire du message : tous les lutins. Pour répondre à un message, un lutin doit avoir un bloc commençant par un évènement Quand je reçois configuré au message envoyé.
Enlève ce t-shirt
Dans notre cas, comment allons nous faire ? Et bien dans le script lorsque le lutin chemise est cliqué, si ce vêtement ne touche pas Dani (sinon de la condition), nous allons demander aux autres lutins, si ils touchent Dani, de se ranger. Pour cela, nous allons donc envoyer un message que nous appellerons Changer top.
Dans les scripts du lutin t-shirt, nous allons ajouter un nouveau bloc répondant à l’évènement Quand je reçois changer top. Ce bloc déplacera ce lutin à sa position de départ si il est sur Dani. Oui, cette condition est importante, nous allons voir pourquoi après l’essai.
Vous pouvez faire l’essai avec ces scripts. Si vous cliquez sur le t-shirt, celui-ci glissera sur Dani. Si vous cliquez ensuite sur la chemise, vous verrez que le t-shirt se déplacera à sa position de départ.
Bien sûr, ces scripts doivent aussi être présents de manière à ce qu’un click sur le t-shirt retire également la chemise si elle est sur Dani. C’est là que la condition dans le bloc Quand je reçois changer top prend tout son sens : vu que tous les top réagissent à ce message, ils réagissent également au message envoyé par eux-même. Et comme les blocs s’exécutent en même temps, sans cette condition, le vêtement n’ira plus sur Dani puisqu’il aura instruction de se ranger.
Évitons la duplication
On pourrait s’arrêter là mais une chose me dérange maintenant. Nous avons, pour chaque lutin vêtement, dans 3 blocs différents une instruction destinée à les ranger. En informatique, on appelle ça de la duplication de code et c’est pas bien. C’est pas bien pour deux raisons principales :
- Les informaticiens sont des fainéants, écrire plusieurs fois la même chose est contre-nature
- C’est source d’erreurs surtout si il faut corriger quelque chose : si nous devons changer la place du vêtement, il faut bien faire attention à modifier les coordonnées sur toutes les copies
Nous pouvons éviter cette répétition, pour cela, nous allons simplement ajouter un script commun qui se déclenchera par un message. Là, le message sera spécifique à chaque vêtement. Pour le t-shirt, je l’appellerai ranger t-shirt. Pour la chemise, ce sera ranger chemise. Dans notre cas, ce bloc ne contient qu’un seul bloc mais qui a des paramètres (les coordonnées) spécifiques.
Et qui va envoyer ce message ? Et bien les trois scripts qui demandent à ranger ce lutin : le script drapeau vert pour préparer l’activité, le script quand ce lutin est cliqué si Dani est touché pour le ranger et le script quand je reçois changer top, dans sa condition si Dani est touché afin de ranger ce vêtement pour qu’un autre prenne sa place.
Ainsi, si vous voulez changer la place du lutin dans la scène, vous n’avez qu’un seul bloc où modifier les coordonnées. Si vous devez ajouter des blocs d’instructions pour ranger un vêtement, vous n’avez qu’un seul script où le modifier.
En conclusion
Les messages servent donc à déclencher des scripts spécifiques. En général, on les utilise pour déclencher des scripts dans d’autres lutins. Mais ils peuvent également servir à déclencher des sous-scripts qui sont des instructions communes à plusieurs scripts afin de ne pas dupliquer celles-ci.
Si vous voulez voir la mise en œuvre de ce projet, il est hébergé parmi mes projets Scratch en tant que Demo Messages.
Si vous avez aimé ce post, n’hésitez pas à laisser un commentaire ci-dessous ou sur la page Facebook 😉
À propos de... Darko Stankovski
iT guy, photographe et papa 3.0, je vous fais partager mon expérience et découvertes dans ces domaines. Vous pouvez me suivre sur les liens ci-dessous.
1 réponse
[…] chapitres, seront expliqués les variables pour compter les scores et plus loin les points de vie, les messages, les contrôles à la souris, les animations du […]