Mokona Guu Center

Apprendre la programmation avec Scratch

Publié le

Cela fait un bon moment que je connais Scratch de nom. J'avais aussi regardé quelques guides dessus, vu que les principes du langage par block avait été repris par d'autres environnements de programmation. Cet été, j'ai enfin profité d'un peu de temps libre pour aller y regarder de plus près.

Deux raisons à cela. Tout d'abord une descendance qui veut en apprendre plus sur la programmation de jeux et pour ma curiosité personnelle, surtout après avoir appris que Scratch était proposé comme support dans les nouveaux programmes du collège, qui remettent la programmation au goût du jour.

Page principale de Scratch

Prise en main

Dans la grande lignée des logiciels en ligne moderne, il me faut d'abord créer un compte, mais l'enregistrement est simple et ne demande ni carte bleue, ni renseignements, ni numéro de sécurité sociale... un bon vieux compte à l'ancienne, et ça fait plaisir.

La majorité de l'affichage est en anglais, mais il est possible de basculer vers du français... temporairement. C'est a priori un bug du site, l'anglais revient régulièrement, et il faut donc basculer régulièrement vers le français. Heureusement, cela se passe uniquement en changeant de page. Dans une session de développement, l'interface ne change pas de langue toute seule. Travailler en anglais me va bien, mais je n'étais pas seul dans cet apprentissage, et j'ai maintenant pris l'habitude des noms français des blocks.

Viennent ensuite les premières manipulations. Sans documentation, on peut faire des petits trucs, mais on se retrouve rapidement avec une belle pagaille à l'écran. C'est ce qui m'était arrivé lors de mes précédentes manipulations. Cette fois, je suis aidé d'un livre qui explique progressivement le fonctionnement de l'environnement.

Reste cependant des choses pas terribles. Par exemple, effacer certains éléments, comme le lutin (traduction française de sprite) de base du projet, des variables ou encore un costume (un sprite est constitué de plusieurs costumes), n'est pas évident de prime abord. La documentation indique bien que l'on peut effacer quelque chose avec un clic droit, mais oublie que depuis que cette documentation a été écrite, Scratch a été réécrit en Flash et que le clic droit, en Flash, c'est pour les paramètres... Finalement, je trouve l'icône des ciseaux qui permet de couper des éléments. Cela ne marche cependant pas sur les variables, et j'ai donc souvent des variables inutiles qui traînent, faute de pouvoir les effacer.

À part ces quelques déboires, l'interface se prend vite en main. Les blocs sont bien rangés dans des catégories qui ont un sens et les marques une fois prises, je peux rapidement aller chercher celui dont j'ai besoin. Allez, des petits raccourcis pour changer de type de blocs aurait été appréciables car évitant plein de clics, mais ça ira. Scratch n'est pas non plus fait pour créer des projets gigantesques.

Blocs dans Scratch Blocs dans Scratch

Ça tourne

Il y a plusieurs choses intéressantes dans Scratch. La découvrabilité tout d'abord : l'ensemble des blocs est à disposition, et l'on peut les regarder et les manipuler pour imaginer quelles sont leurs fonctions. De plus, une fois une série de blocs en place, on peut cliquer dessus afin de les activer. Il est alors possible de les voir agir à travers l'écran de jeu et ainsi de faire les ajustements nécessaires, sans avoir à lancer l'intégralité du programme. Lancement du programme qui est lui-même instantané, pas de compilation, et les changements sont répercutés à chaud.

Tout cela est très agréable lorsque l'on débute pour comprendre ce que l'on fait en direct. Et très agréable lorsqu'on a un peu plus d'expérience en général pour itérer sur une idée rapidement.

Bonus, le « code » constitué par les blocs fonctionne toujours. Pas d'erreur de syntaxe. S'il manque des paramètres à certains blocs, il n'y aura pas de message d'erreur, mais un comportement neutre. Là encore, cela facilite l'apprentissage des bases en ne mettant pas de freins à travers des problèmes techniques inutiles. Il sera toujours temps d'aborder ça plus tard, avec d'autres langages plus complexes.

Modèle de programmation

Les blocs qui structurent un programme Scratch contiennent des conditions, des boucles, des sous-programmes et des événements. Dans les documents que j'ai lu, les événements sont assez vite mis en avant afin de pouvoir gérer plusieurs comportement en simultané. Ça peut rapidement donner quelque chose de fouillis, mais c'est compréhensible, permet un premier niveau de structure si on est attentif. Ces ensembles de blocs, formant les morceaux du programmes, sont chacun associé à un sprite (ou bien à une scène).

Il y a cependant de grosses limitations que l'on atteint rapidement dès que l'on veut faire un programme complet. Les événements ne portent pas de paramètres et s'adressent à tous les objets (on ne peut pas cibler une classe d'entre eux par exemple, ou appeler l'un d'eux en particulier). Il est possible par exemple de savoir qu'un sprite vient d'en toucher un autre. Parfait. Mais on ne peut pas récupérer le sprite en question ni lui adresser un message. Cela amène à quelques contorsions et un programme pas aussi net que l'on voudrait dans son comportement.

Il est aussi possible de créer ses blocs, que l'on peut ensuite appeler avec des paramètres. Cela permet de faire des sous-programmes ou fonctions. La limitation ici est que le nouveau bloc est limité au sprite dans lequel il a été défini. Sa réutilisation nécessite de le dupliquer dans chaque sprite, avec les problèmes qui découlent naturellement d'une duplication.

Les déplacements sont assez simples, mais jusqu'au simpliste. Dans mon exemple, un jeu classique d’astéroïdes, j'ai du reprogrammer le déplacement du sprite du vaisseau, puisque celui-ci est soumis à l'inertie. Dans Scratch, les blocs de basent considèrent que la direction du mouvement et l'orientation du sprite sont une seule et même chose.

Mon jeu test

Après avoir pratiqué un peu le livre d'apprentissage et regardé quelques projets partagés, je me suis lancé dans un développement de jeu de zéro, avec comme objectif d'avoir une boucle complète de jeu, sans aller jusqu'à un polish complet. C'est jouable, mais sans plus.

Jeu Beware the Asteroids en Scratch, page de titre

Comme je l'ai indiqué ci-dessus, j'ai du reprogrammer les mouvements du vaisseau. De même, si j'avais voulu faire tourner les rochers sur eux-mêmes, j'aurais du ruser un peu. Faisable, mais hors de mes objectifs.

Les assets graphiques sont de moi... voilà. Et je n'ai pas joué avec le son, je me rends compte au moment où j'écris ces lignes que j'ai oublié.

Pour montrer ce à quoi cela ressemble, voici une capture d'écran de la programmation du vaisseau du joueur, qui est la partie la plus complexe du jeu (cliquez pour ouvrir en plus grand). Le reste est beaucoup plus simple.

Le vaisseau du jeu