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.

Habillons Dani avec les messages.

Il y a cependant un concept qui nécessite une précision : les messages. À quoi servent-ils ? Quand les utiliser ? Pourquoi Scarlett Johansson ne m’a pas répondu ? Mis à part la dernière question, c’est ce que je vais essayer de vous expliquer dans ce billet.

Pour suivre ces explications, je vous ai préparé un projet disponible sur le site officiel Scratch. Il s’appelle Demo messages. Attention toutefois, les scripts du projet sont ceux de la fin de ce tuto.

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 coffrer 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.

La scène de notre programme Scratch

Chaque lutin a une action drapeau vert qui le place à son point de départ. Les vêtements ont une action lorsque le lutin est cliqué qui déplace le vêtement sur Dani.

Mise en place des lutins 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 remet range
  • Sinon, on le met sur Dani.

Les scripts sont alors les suivants

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 é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, si nous cliquons sur la chemise, Dani retire le t-shirt ? il faudrait pour ça que nous puissions 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.

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 une 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.

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 top

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.

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.

N’hésitez pas à utiliser les commentaires si vous avez la moindre question.

À 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.