Accélérer et ralentir
Durée estimée: 45 minutes
Ce que l’on va faire :
- Réaliser l'extension pour faire avancer la voiture en continu (boucle infinie)
- Utiliser les flèches et une variable pour accélérer et ralentir
- Faire un quiz sur les variables
Notions abordées :
- Les boucles infinies
- Les variables (vitesse)
- Les opérateurs mathématiques + et - et leur utilisation pour mettre à jour une variable.
- Les tests avec les opérateurs mathématiques < et >
- La négation logique
Réalisation
Ressources de départ :
vous pouvez partir du résultat de la leçon précédente, ou du projet ./?sb=scratchCircuit1.
Guide vidéo pour les points 1 et 2
Guide pas à pas pour avancer en continu
- Analyser :
Dans le jeu réalisé, la voiture s'arrête quand on cesse d'appuyer sur la barre d'espace. C'est logique, car le script déclenché par "barre d'espace pressée" oriente et déplace la voiture une seule fois. Si la barre d'espace est restée pressée, l'évènement se produit à nouveau et la voiture continue à avancer. Sinon elle s'arrête.
Pour que la voiture continue à avancer, après avoir relaché la barre d'espace, il faut répéter indéfiniment les commandes de mouvement. On va utiliser une répétition ou itération.
- Modifier le programme :
Ajouter :
- un bloc de contrôle "répéter indéfiniment" dans le script quand barre d’espace pressée
- et mettre toutes les instructions du script à l’intérieur de ce bloc de répétition.
vous pourrez noter que le bloc de répétition infinie a un fond plat et ne permet pas d'accrocher de bloc en dessous. Pourquoi ? Parce que la boucle est infinie. Un bloc accroché en–dessous ne serait jamais exécuté. - Tester:
- Vérifier que la voiture continue à avancer quand on relâche la barre d’espace.
- Il y a deux petits défauts qu'il faudra corriger :
- lorsque la voiture atteint le pointeur de la souris, elle se met à gigoter,
- la voiture continue à avancer à son retour au départ.
Utiliser une variable et les flèches pour accélérer et ralentir
- Regarder la vidéo qui présente la notion de variable:
- Contrôler la vitesse, accélérer et ralentir avec les flèches ↑ et ↓ :
.
- Créer la variable vitesse et définir sa valeur initiale :
- Sélectionner le lutin correspondant à la voiture, puis créer une variable "vitesse" (dans l'onglet des données).
Pour l'instant on laisse coché "pour tous les lutins". On verra plus tard les notions de varibale locale ou globale. - Dans le bloc "avancer de …" remplacer le nombre par la variable vitesse.
- Au démarrage, dans la séquence qui suit le drapeau vert, ajouter un bloc qui met la vitesse à 4.
- Tester : ça marche exactement comme avant, mais avec une variable initiliasée à 4 au lieu du nombre 4.
On va maintenant utiliser les touches ↑ et ↓ pour augmenter ou réduire la vitesse
- Sélectionner le lutin correspondant à la voiture, puis créer une variable "vitesse" (dans l'onglet des données).
- Modifier la variable vitesse avec les flèches :
- Créer un nouveau bloc évènement "quand ↑ pressé" qui va débuter un nouveau script.
- Dans ce script, ajouter un bloc qui augmente la vitesse de 1 :
"mettre la nouvelle valeur de la vitesse à l’ancienne valeur + 1"
ou (c'est plus simple) "ajouter à vitesse 1" - De la même manière, créer un nouveau bloc évènement "quand ↓ pressé" qui va débuter un nouveau script.
- Dans ce script, ajouter un bloc qui réduit la vitesse de 1 :
"mettre la nouvelle valeur de la vitesse à l’ancienne valeur - 1"
ou (c'est plus simple) "ajouter à vitesse -1"
- Tester :
- Vous pouvez accélérer et ralentir. La voiture ne bouge plus quand la vitesse est nulle.
Par contre elle recule si la vitesse et négative ou elle va trop vite si la vitesse dépasse 10.
On va donc corriger ce petit défaut.
- Vous pouvez accélérer et ralentir. La voiture ne bouge plus quand la vitesse est nulle.
Par contre elle recule si la vitesse et négative ou elle va trop vite si la vitesse dépasse 10.
- Limiter la vitesse entre 0 et 10 :
- quand on acccélère, on va la ramener à 10 si elle dépasse 10
- A la fin du script qui accélère (↑), ajouter
un bloc de contrôle "si" qui teste si vitesse > 10,
et à l'intérieur de ce bloc, un 2° bloc qui remet la vitesse à 10. - De même, à la fin du script qui ralentit (↓), ajouter
un bloc de contrôle "si" qui teste si vitesse < 0,
et à l'intérieur de ce bloc, un 2° bloc qui remet la vitesse à 0.
et quand on ralentit on va la ramener à 0 si elle est négative.
- A la fin du script qui accélère (↑), ajouter
- Créer la variable vitesse et définir sa valeur initiale :
Revue des notions mises en oeuvre
- Variables : la variable
nommée "vitesse" contient une "valeur" est utilisée à chaque fois qu'on utilise cette variable dans les blocs à la place d'un chiffre :
.
C'est très pratique car cette variable peut être modifiée dans le programme "vitesse" quand on l'utilise pour faire avancer la voiture. La valeur peut ensuite être modifiée, par exemple pour accélérer .
Les variables sont très très utiles dans tous les programmes.Elles permettent de décrire l'état deu jeu et de traiter -avec les mêmes blocs - un grand nombre de cas, plutôt qu'un seul. - Boucle infinie :
Ce bloc répète indéfiniment la séquence de blocs qui est à l'intérieur. La seule manière de d'interrompre cette boucle, c'est d'arrêter le script. On peut le faire à l'intrieur de la bouce avec le bloc de contrôle "stop ce script".
Par ailleurs, on voit que ce bloc a un fond plat. En effet comme la boucle est infinie les commandes qui suivraient ne seraient jamais exécutées. - Evènements multiples :
Avec les flèches notre programme prend en compte de nouveaux évènements, pour accélérer ou ralentir. La réalisation de votre jeu ou de votre application va consister à définir le comportement de vos lutins pour tous les évènements externes (clavier et messages).
Dans Scratch, le fait qu'un lutin touche une couleur ou un autre lutin n'est pas considéré comme un évènement. Dans ce cas c'est à vous de vérifier si c'est le cas, dans une boucle et de modifier le comportement de votre programme avec des blocs de contrôle, donc les blocs "si, si-sinon" que l'on appelle les blocs de branchement conditionnel.