Bonjour, c'est Pierre Huguet,
Bienvenue à cette nouvelle leçon sur le petit circuit de voitures
Dans cette leçon nous allons compter les tours et faire des courses à plusieurs tours
on va définir au départ le nombre de tours à parcourir
et retirer 1à ce nombre à chaque fois que la voiture passera la ligne d'arrivée
Alors je définis la variable "nombreDeTours"
et je l'initialise à 3 au démarrage
ensuite je masque les variables qui ne m'intéressent pas, comme le coefficient et la vitesse,
et je réorganise les autres pour pouvoir jouer plus confortablement.
Ensuite je vais réduire de 1 le nombre de tours,
c'est à dire ajouter - 1 à chaque fois que je touche la ligne d'arrivée
Mais, je ne prendrai le temps et je ne dirai que "j'ai gagné"
que si le nombre de tours est égal à zéro. Donc je rajoute un contrôle
si le nombre de tours est égal à zéro "j'ai gagné" et je mesure le temps.
Nous pouvons maintenant tester cette modification
alors allons-y, je clique sur le drapeau vert
et je vois que le nombre de tour ici, est initialisée à 3.
j'appuie sur la barre d'espace.
et j'arrive au premier tour.
mais il me dit que j'ai gagné,
et le nombre de tours est passé à 0
Donc il y a un bug qu'il faut que je corrige.
alors essayons comprendre ce qui se passe en regardant le code
On compte un tour à chaque fois que la voiture touche la ligne d'arrivée (ou bleu)
Ce test est fait dans la boucle infinie.
Alors que se passe-t-il quand la voiture touche le bleu ?
Après avoir modifié le nombre de tours,
la boucle infinie continue si le nombre de tours est différent de 0
donc le bloc qui teste si la ligne d'arrivée et touchée, est de nouveau exécuté
avant même que la voiture ait dépassé la ligne.
Le nombre de tours est à nouveau modifié
et ça se produit trois fois avant que la voiture n'ait passé la ligne.
Donc le nombre de tours passe à 0 et le programme nous dit que l'on a gagné.
Donc comment faire pour corriger ça ?
Quand la voiture toute la ligne, il faut retirer un tour mais un seul
jusqu'à ce que la voiture ait vraiment refait un tour.
Donc, trouver une condition qui permet de compter le tour une fois
puis qui interdit un nouveau décompte jusqu'à ce que la voiture ait fait presque un tour.
Alors essayez de trouver une solution. Ce n'est pas très facile
L'idée c'est de déclencher une condition
qui n'est satisfaite qu'à la fin de chaque tour Juste avant la ligne d'arrivée
Alors faites une pause vidéo,
et si vous êtes en groupe essayez d'en discuter à plusieurs
Alors, il y a plusieurs solutions, celle que je vous propose
c'est de placer un objet un peu avant la ligne d'arrivée, par ici
et d'interdire le décompte de tours tant que la voiture n'a pas touché cet objet
donc tant que la voiture n'a pas fait un tour.
Ensuite la voiture va atteindre la ligne d'arrivée et un tour sera décompté,
mais immédiatement après ce premier décompte,
on interdira le décompte d'un tour supplémentaire
Pour déterminer si le décompte est autorisé ou pas, je vais créer une variable appelée "decompte"
Nous choisissons que, si cette variable est égale à zéro, c'est qu'on ne peut pas décompter de tour.
et si elle est égale à 1, on peut décompter un tour.
donc je vais l'initialiser à 0.
ensuite je vais créer un objet, dont la forme n'a pas d'importance.
Ici je vais prendre le ballon de basket, et je vais le mettre un peu avant la ligne d'arrivée
avec une taille suffisante pour être certain que la voiture passe dessus.
Donc, cet objet je vais l'appeler "passage"
puis je vais lui demander d'aller au bon endroit au démarrage
Donc, après l'avoir positionné, je vais lui dire d'aller à x= -163, y= 13
qui est le dernier endroit ù je l'ai déplacé
et je vais lui donner une taille de 100%
Ca convient. On peut mettre 80 %
Mais ce qu'il faut c'est être certain que la voiture touche cet objet avant la ligne d'arrivée
Je dois maintenant revenir au script de la voiture et faire 3 choses dans la boucle infinie
1°si la voiture touche le passage,j'autorise le décompte,
c'est à dire je remets la variable "decompte" à 1
2° avant de décompter un tour, c'est-à-dire d'ajouter -1 au nombre de tours
je dois vérifier que le décompte est autorisé, donc je vais sortir ces blocs
pour mettre une condition avant le décompte
Si "decompte" est égal à 1 alors je peux retirer 1 au nombre de tours,
3° immédiatement après avoir réduit de 1 le nombre de tours
il faut que j'interdise tout nouveau décompte avant d'avoir touché l'objet "passage"
donc il faut que je remette la variable "decompte" à zéro
et je remets tout ça dans la condition bleue.
On va maintenant tester notre programme,
J'appuie sur le rouge et sur le vert puis sur la barre d'espace,
je vois que nombre de tours à faire est de 3 et je vois aussi que la variable "decompte" est à 0
Donc pour l'instant, le décompte n'est pas autorisé
Je vais passer sur l'objet "passage", et je vois que la variable "decompte" passe à 1
ensuite la voiture va toucher la ligne d'arrivée,
le "decompte" est passée à 0, et le "nombre de tour" est passé à 2
Donc, pour l'instant ça marche bien,
je continue
La variable "decompte" est à 0, il passe à 1 quand la voiture touche le passage.
ensuite elle passe à 0 quand je franchis la ligne d'arrivée,
et le nombre de tours passe de 2 à 1.
Normalement la prochaine fois je dois être arrivé,
Voilà j'ai fait mes trois tours en 42 secondes
Donc, le programme marche correctement,
mais j'aimerais que vous regardiez 2 choses avant la prochaine leçon.
1° : faire passer la voiture au dessus du lutin "passage", et le rendre invisible ou presque
2° : vérifier le chronomètre
Alors, à la prochaine!