Scratch : comment créer un chronomètre

Étiquettes

, ,

Horloge

Scratch permet assez facilement de mesurer le temps. Dans la partie « capteurs », on trouve en effet deux fonctions : « réinitialiser le chronomètre » et « chronomètre ». La première permet de remettre le chronomètre à zéro et la seconde correspond à une simple valeur représentant la durée de fonctionnement depuis la dernière réinitialisation du chronomètre ou le démarrage du programme, une sorte d’uptime pour les connaisseurs.

« Chronomètre » fonctionne en sens ascendant, de zéro vers l’infini (et au-delà…), et peut permettre de capturer le temps parcouru sur un niveau dans un jeu par exemple ou encore mieux d’y mettre une limite. Dans ce cas, il faut pouvoir fonctionner à rebours en affichant le nombre de secondes de manière descendante. De l’infini vers zéro (et pas au-delà).

L’astuce est assez simple. On crée une variable qui va contenir le temps restant. Celle-ci est ensuite constamment recalculée en retranchant le nombre de secondes enregistrée par la fonction « Chronomètre ». Comme Scratch mesure jusqu’au centième de seconde, on utilise la fonction « arrondi » pour calculer et afficher le résultat.

Chronomètre

Scratch : le jeu du labyrinthe, la suite !

Étiquettes

, , ,

labyrinthe project

Chose promise, chose due, nous allons compléter notre labyrinthe. Il lui manque, à mon sens, trois choses pour ressembler un peu plus à un jeu : une musique, un score et un système de gestion de niveaux.

Commençons par le plus simple : la musique. Nous allons placer le code sur le décor, de manière à ne pas encombrer le reste. Choisissons une boucle musicale dans la bibliothèque de sons. On peut aussi importer ses propres fichiers au format MP3 ou WAV. Je vous conseille cependant de prendre le MP3 moins lourd. Lorsque nous cliquons sur le drapeau vert pour démarrer le jeu, une boucle va répéter sans cesse notre musique. Attention à bien choisir l’instruction « jouer le son ### jusqu’au bout ». L’instruction « jouer le son ### » redémarre en effet sans cesse au début du son sans aller plus loin.

musique

Attaquons-nous ensuite au score. Dans ce type de jeu, le plus simple est d’utiliser un chronomètre et nous avons de la chance car Scratch en possède un. On place le code sur le chat et nous allons d’une part ré-initialiser le chronomètre, c’est-à-dire le mettre à zéro, au démarrage du jeu, d’autre part modifier légèrement notre code de manière à indiquer le nombre de secondes une fois que le chat a touché la pomme. « C’est presque trop facile… » (Et celui ou celle qui sait me dire de quel film est tirée cette dernière phrase gagne toute mon estime… Et peut-être autre chose, test and see !)

chrono

Mais… Mais… Mais oui… Comme vous le constatez, tel James Bond (non, rien à voir avec la citation ci-dessus), le chat ne meurt jamais. On peut en effet le laisser invincible et redémarrer sans cesse au début ou lui accorder un certain nombre de chances. Au delà, point de salut.

Pour cela, il nous faut créer une variable, par exemple « vies ». On affiche le nombre de vies en haut à gauche. On le met au chiffre de notre choix, pour ma part 5, au démarrage du jeu et chaque fois que le chat touche le rouge, il perd une vie. Lorsque le nombre de vies tombe à zéro, la partie est perdue.

vies

Au tour des différents niveaux maintenant et, pour paraphraser quelqu’un que je ne citerai pas, mais cette fois de manière humoristique et sans ostracisation voulue, « Quand il y en a un, ça va. C’est quand il y en a beaucoup qu’il y a des problèmes. » En effet, gérer un seul niveau ne pose pas de soucis. En gérer plusieurs demande pas mal de manipulation du code. Attention à ne pas vous lancer là-dedans avec des novices.

En effet, le problème vient de l’entrée et de la sortie du labyrinthe. Comme le tracé sera sans cesse différent, les coordonnées du chat et de la pomme vont devoir varier à chaque niveau.

Commençons par créer une variable « niveau » qui va nous permettre de savoir où nous nous situons. Lorsque le jeu démarre, la variable porte la valeur « 1 ». Créons ensuite plusieurs niveaux supplémentaires, en fait plusieurs arrière-plans, que l’on va nommer successivement « niveau1 », « niveau2 », « niveau3 », etc. C’est là que cela se complique un peu. En effet, comme le jeu comporte plusieurs niveaux, on ne peut plus placer tout notre code sous le seul événement « drapeau vert cliqué » sinon il faudrait redémarrer plusieurs fois. Nous allons donc créer un nouvel événement, un message que j’ai pour ma part nommé « start » qui va permettre de démarrer le jeu et chacun des niveaux.

niveau1

C’est bien beau tout cela mais que fait-on quand on envoie « start » ? Premièrement, mettre l’arrière-plan correspondant au niveau, mais aussi déterminer les coordonnées de départ du chat et celles de la sortie, pour lesquelles il va nous falloir créer quatre variables, par exemple Xchat, Ychat, Xsortie, Ysortie. Je vous avais prévenu que cela allait se compliquer un peu. De plus, il faut préciser ces coordonnées en fonction du niveau. Un peu de Paracétamol ? 😉

niveaux_choix

(Certes, on pourrait coder cela de manière plus élégante en utilisant des listes et j’y reviendrai dans un autre article mais, pour l’instant, ne nous embrouillons pas plus…) Le message « go » sert à prévenir le chat et la pomme qu’il est temps d’agir. Nous allons donc modifier leur code comme suit pour la pomme.

niveau_pomme

Et pour le chat.

niveau_chat

Sans oublier de modifier notre boucle pour que l’on passe au niveau suivant quand le chat touche la pomme et que l’on termine le jeu si le niveau est le dernier soit 3, dans mon exemple.

jeu_fin

Et j’ai l’impression que c’est terminé. Enfin presque. Il reste à nettoyer l’écran en cachant les variables qui n’ont d’utilité que lorsque vous développez votre programme.

masque_variables

Fini ? Si vous voulez vous en tenir là, oui le jeu est fini. Mais ce n’est qu’un prototype. Il est « fonctionnel », c’est-à-dire que le « moteur » est créé et qu’il ne comporte plus de bugs. On peut aller plus loin en changeant les personnages, créant des décors de manière aléatoire à l’aide des instructions « stylo », ajoutant des sons différents, une animation lorsque l’on change de niveau et des effets graphiques, un système de score qui récupère les valeurs du chronomètre par niveau, en créant un mode multijoueurs… Bref, en passant encore pas mal d’heures sur Scratch. Pourquoi pas ? A suivre !

En attendant, le code se trouve sur cette page.

Scratch : le jeu du labyrinthe

Labyrinthe

C’est un des premiers exercices que je fais faire en atelier. Le jeu du labyrinthe est en effet facile à comprendre, rapide à réaliser et laisse une grande part à l’imagination. L’objectif est simple : déplacer un personnage dans un labyrinthe sans toucher les bords jusqu’à ce qu’il atteigne la sortie. Cela permet de découvrir comment faire bouger un personnage à l’écran et créer différentes interactions entre le décor et le « héros ».

Commençons par planter le décor en créant un fond coloré à l’aide de l’outil « pot de peinture ».

Décor 1

A l’aide de la gomme dont on règle la taille au maximum, on dessine ensuite grossièrement un circuit.

Décor 2

Occupons-nous maintenant du chat, Scratch, pour lui permettre de se déplacer à l’écran.

Scratch mouvements

Plaçons le à l’entrée du labyrinthe et ajustons sa taille de manière à ce qu’il puisse se déplacer sans toucher les bords.

Scratch taille

Ajoutons un élément qui va symboliser la sortie à l’aide d’un nouveau lutin.

Labyrinthe sortie

Il ne reste plus qu’à créer une boucle et deux conditions qui vont tester si le chat touche les bords du labyrinthe ou atteint la pomme.

Labyrinthe conditions

Le jeu est fini, tout au moins opérationnel. On peut encore y ajouter une musique, un score, d’autres niveaux. A venir dans un prochain article ! En attendant, vous pouvez trouver le code de ce jeu en suivant ce lien.