Une page de Le Lab de la taverne

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.

Scratch app démo messages
Habillons Dani avec les messages

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.

Scratch la scène de démo des messages
La scène de notre programme Scratch

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.

Scratch messages setup
Mise en place des sprites et action de base

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

Scratch déplacement basique au click
L’action du click avec une condition.

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.

Scratch les blocs liés aux messages
Les blocs relatifs aux messages dans le groupe des évènements.

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.

Scratch échange avec messages
La mise en œuvre des messages pour ranger un vêtement si il est sur Dani. Ces deux groupes doivent être présents dans tous les tops

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.

Scratch ensemble des scripts
L’ensemble des scripts pour un vêtement avec la réponse à deux messages.

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.

Licence Creative Commons

Licence Creative Commons Attribution - Pas d'Utilisation Commerciale - Pas de Modification 4.0 International