Ce tutoriel explique comment réaliser un jeu vidéo de tir inspiré du jeu historique « Spacewar! », avec le logiciel Scratch.
Objectif général
Temps de préparation pour l'animateur
Domaine de compétence
Temps requis pour compléter l'activité (pour l'apprenant)
Nom de l'auteur
Matériel supplémentaire
Ressource originellement créée
Introduction
Nous allons programmer un jeu de tir dans lequel le joueur pilote un vaisseau dans l’espace, qui doit éviter
de se faire toucher par des météorites. On gagne 1 point pour chaque météorite touchée.
Cette réalisation étant un peu complexe à comprendre, à cause de l’utilisation de clones, elle est à réserver à un public déjà habitué à Scratch.
Dessiner l'arrière-plan
Cliquer sur « scène » en bas à gauche puis sur l’onglet « arrière-plans » en haut.
Avec l’outil « Pot de peinture », repeindre l’arrière-plan en noir.
Avec l’outil « Pinceau », faire plein de petits points blancs pour former les étoiles. La taille des points se règle avec le curseur coulissant en bas.
Créer la fusée
Cliquer sur « Nouveau lutin » pour ajouter un lutin et choisir la fusée « Spaceship ». Supprimer le lutin chat.
Cliquer sur l’onglet « Costumes » en haut pour pouvoir modifier la fusée. En cliquant sur la fusée, des poignées apparaissent autour pour permettre de modifier la taille. Réduire la fusée à un cinquième de sa taille actuelle à peu près, en déplaçant une des poignées carrées. Pour réduire la fusée de manière proportionnelle, prendre une poignée dans un des coins, pas celles sur les bords.
Il faut que la fusée tourne avec la souris. Pour que Scratch la fasse tourner correctement, il faut que le dessin soit dans la bonne position de départ, c’est-à-dire pointée vers la droite. Pour cela, avec la poignée ronde, faire tourner la fusée pour la pointer vers la droite.
Bien centrer le lutin : avec l’outil de centrage, placer le croisement des lignes au milieu du lutin.
Dans l’onglet « scripts » de la fusée, ajouter le code ci-dessous :
Explications du code : quand le jeu commence, la fusée se place au centre de l’écran. Elle s’oriente toujours vers le pointeur de la souris.
Créer les météorites
Cliquer sur « Nouveau lutin » pour ajouter un lutin, choisir le lutin « Rocks » et le renommer « Météorite ».
Dans l’onglet « Costumes », réduire la taille du lutin à un tiers à peu près.
Il faut que la météorite se déplace en ligne droite et qu’elle rebondisse sur les bords. Ajouter ce code au script du lutin :
Explication du code : au départ du jeu, la météorite est placée et s’oriente de façon aléatoire. Dans la boucle (répéter indéfiniment), elle avance indéfiniment (de 3). Si elle rencontre un bord, elle rebondit.
Cliquer sur le drapeau vert et tester le résultat.
Si la météorite touche le vaisseau, le jeu doit s’arrêter sur une défaite. Chaque météorite peut faire perdre le jeu, il faut donc ajouter le code suivant, toujours dans le script de la météorite, dans la boucle <répéter indéfiniment> :
Explication du code : si le vaisseau est touché, la météorite dit « Game Over ! » et on arrête tout.
Une seule météorite, ce n’est pas assez pour rendre le jeu intéressant. A chaque fois que la météorite touche le bord, il faut qu’elle se duplique, rendant le jeu petit à petit plus difficile. Ajouter l’instruction suivante à l’intérieur de « si bord touché alors », juste avant l’instruction « rebondir si le bord est atteint » :
Problème : avec le code actuel, la météorite, au départ, pourrait apparaître sur le vaisseau. Le jeu serait alors immédiatement terminé ; il faut donc empêcher que cela arrive. Pour cela, changer les valeurs aléatoires de y pour que la météorite, au départ apparaisse dans la partie haute de l’écran (ici entre 100 et 175) :
Cliquer sur le drapeau vert et tester le résultat. Apparaît alors un problème : les clones sont bien créés lors des rebonds, mais ils ne bougent pas.
C’est parce que chaque clone créé possède le même code que la météorite d’origine. Ce code dit bien que le clone doit bouger quand on clique le drapeau vert, mais comme le clone est créé après que le drapeau vert soit cliqué, ce code n’est jamais déclenché. Et donc le clone ne commence jamais son mouvement.
Il faut donc changer le code des clones, pour qu’ils utilisent « quand je commence comme un clone » à la place de « quand le drapeau vert est cliqué ». Comment faire ? En ajoutant du code à la météorite d’origine, puisque c’est ce code-là qui sera possédé par les clones. Faire un clic droit sur le code principal de la météorite et cliquer « dupliquer », puis changer le premier bloc pour utiliser « quand je commence comme un clone ». Pour éviter que chaque clone ne crée des clones de lui-même, ce qui rendrait le jeu impossible, il faut aussi retirer le bloc « créer un clone de moi-même ».
Ajouter le tir
Il faut maintenant que le vaisseau puisse se défendre. Créer un nouveau lutin avec l’icône « Dessiner un lutin », prendre l’outil cercle, et tracer un rond rouge. Bien centrer le lutin. Nommer le lutin « Boulet ».
Cliquer sur l’onglet « Scripts », pour coder le Boulet. Au début du jeu, il doit être caché ; ajouter le script suivant :
Le joueur devra appuyer sur la barre d’espace pour tirer un boulet avec le vaisseau. Ajouter les blocs ci-dessous au script du boulet :
Explication du code : quand la touche « Espace » est pressée, l’ordinateur place le boulet au milieu de la scène, sous le vaisseau (x=0, y=0) et le fait apparaître (« montrer »). Le boulet est orienté dans la même direction que le pointeur de la souris. Le boulet avance tant qu’il ne touche pas un bord ou une météorite. Si c’est le cas, on le fait disparaître en le cachant.
Cliquer sur le drapeau vert et tester le résultat. Il faut à présent que toucher les météorites les fasse disparaître, car actuellement le boulet ne sert à rien.
Ajouter cela dans la boucle <répéter indéfiniment>. Voici le script complet :
Explication du code : si la météorite est touchée par le boulet, elle disparait. Pour que le jeu puisse continuer, elle va réapparaître ailleurs comme une nouvelle météorite.
Ajouter aussi le code pour les clones pour que ceux-ci disparaissent au contact du boulet, à l’aide de « supprimer ce clone » (pour ne pas supprimer la « vraie » météorite). Il n’est par contre pas nécessaire de les faire apparaître ailleurs.
Cliquer sur le drapeau vert et tester le résultat. Tout fonctionne, mais on ne peut tirer qu’un boulet à la fois. C’est un peu limité. Pour résoudre cela, il est possible de cloner aussi les boulets. Changer le script du boulet comme suit, en le découpant en deux morceaux au lieu d’un :
Explication du code : le « vrai » boulet va rester caché sous le vaisseau et ne va jamais partir. Mais chaque fois que le joueur va tirer, un clone va être créé et c’est ce clone qui va partir dans l’espace. On peut créer autant de clones que l’on veut, et donc tirer autant de boulets que l’on veut. Attention à changer le dernier bloc, pour supprimer le clone et pas le boulet.
Le score
Il ne reste plus qu’à compter les points. Créer une variable « Score », l’initialiser à 0 dans le script de la météorite.
Il suffit d’ajouter un bloc « ajouter à score 1 », mais attention à le placer au bon endroit. Il faut le placer dans les instructions conditionnelles qui testent si le boulet est touché (« si boulet touché alors ») :
Faire la même chose dans le code utilisé par les clones :
Pour aller plus loin
Quelques pistes d’amélioration possible du jeu :
- Ajouter des sons pour le tir et pour les explosions des météorites
- Ajouter un costume « explosion » à la météorite et basculer sur ce costume quand une météorite est touchée par un boulet
- Si le jeu est trop facile, dupliquer le lutin « Météorite »
- Donner une vitesse aléatoire aux clones de météorite pour les rendre plus difficiles à toucher et plus variés
- Faire changer aléatoirement la taille des clones de météorites
Pour aller plus loin
Conseil médiation
Pour aller plus plus loin sur le sujet, nous vous conseillons de vous référer à la fiche outil « Guide de présentation de Scratch«