Scratch : comprendre les messages
Par Darko Stankovski, 08/02/2018 (Mise à jour 18/04/2026) — Débutant
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 à travers un projet très simple.
Précision
Cette publication a été écrite quand la version française de Scratch appelait encore les sprites des lutins. J'ai mis à jour le texte mais les captures datant de cette époque, le mot lutin apparait. Retenez donc que lutin signifie sprite.
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 sprite a une action drapeau vert. J'utilise cette action pour l’initialiser, c'est à dire le placer à son point de départ. Les vêtements ont également une action lorsqu'ils sont cliqués, 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 qu'il n'ai qu'un vêtement sur Dani, le click sur un vêtement doit déclencher les actions suivantes :
- 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, ce dernier doit être rangé
- le vêtement doit aller sur Dani
Dit autrement, le click sur un sprite doit entrainer l'exécution d'un script d'un autre sprite. 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. Dans le cas de Scratch, considérez que qu'un message est crié pour que tout le monde l'entende et réagisse si nécessaire. Il faut donc deux acteurs : celui qui envoi le message et celui qui le reçoit. Et il y a évidemment 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 sprite chemise est cliqué, si ce vêtement ne touche pas Dani (sinon de la condition), nous allons envoyer un message pour dire que ce sprite va aller sur Dani. Je vais appeler ce message Changer top. Et en ce qui concerne celui qui envoi le message, c'est tout. Il n'a pas à se soucier de qui fait quoi de cette information.
Dans les scripts du sprite 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.
Ce comportement doit être le même pour la chemise, il faut donc lui ajouter le script. Et c'est là que la condition "si le sprite est sur Dani" dans le bloc Quand je reçois changer top prend tout son sens : vu que tous les tops 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…
Oui, les messages, c'est pas vraiment quelqu'un qui crie pour que tout le monde entende et réagisse mais plutôt écrit sur un mur pour que tous le monde lise ce qu'il doit faire… sans savoir qui l'a écrit…
É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.