Les structures de contrôle peuvent avoir plus d'une condition. Les mots-clés else et elseif peuvent créer des scénarios supplémentaires pour ce qui doit se passer sous plusieurs conditions. La syntaxe ressemble à ceci :
if isGreen then
print("Go")
elseif isYellow then
print("Slow")
elseif isPedestrians then
print("Wait")
else
print("stop")
endDans ce projet, else et elseif sont utilisés pour coder un parcours de parkour où les coureurs reçoivent des récompenses en fonction de leur temps d'arrivée.

Codez plusieurs conditions
Pour ce projet, vous pourriez écrire une instruction if unique pour chaque médaille à attribuer aux joueurs, mais cela prend beaucoup de temps. Prenez, par exemple, le code imaginaire ci-dessous.
if finishTime < 5 then
-- Obtenir une médaille d'or
end
if finishTime >= 5 and <= 10 then
-- Obtenir une médaille d'argent
end
if finishTime > 10 and <= 15 then
-- Obtenir une médaille de bronze
endUne manière plus lisible et efficace de coder cela est d'utiliser une seule instruction if et d'utiliser le mot-clé elseif pour fournir des conditions alternatives à tester si les conditions précédentes ne sont pas vraies.
if finishTime < 5 then
-- Obtenir une médaille d'or
elseif finishTime >= 5 and <= 10 then
-- Obtenir une médaille d'argent
elseif finishTime > 10 and <= 15 then
-- Obtenir une médaille de bronze
endLorsque l'instruction if/then s'exécute, elle commence en haut et n'exécute le code que pour la première condition vraie qu'elle trouve.
Configurez le parcours de la course
Commencez par placer le point de départ et la ligne d'arrivée du parcours, puis créez un script pour chronométrer le joueur et attribuer différentes médailles.
Créez une partie ancrée nommée FinishLine. Pour rendre les tests plus rapides, placez le départ et l'arrivée près l'un de l'autre. Vous pouvez déplacer la ligne d'arrivée après avoir terminé le script.

Partie d'arrivée 
Parcours entier Dans FinishLine, insérez un script nommé RaceManager. Ensuite, ajoutez une variable pour stocker combien de secondes se sont écoulées depuis le début de la course et une seconde variable pour référencer FinishLine.
local finishLine = script.Parentlocal timePassed = 0Créez une fonction nommée finish().
local timePassed = 0local finishLine = script.Parentlocal function finish()endPar vous-même :
- Codez une fonction nommée partTouched() qui exécute finish() lorsqu'un joueur la touche.
- Connectez la partie de la ligne d'arrivée à partTouched().
- Comparez votre code à l'exemple ci-dessous.
local function finish()print("touched the finish line")endlocal function partTouched(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenfinish()endendfinishLine.Touched:Connect(partTouched)Testez et vérifiez que finish() est appelé lorsque vous touchez la ligne d'arrivée.
Empêcher finish() de se répéter
En ce moment, chaque fois qu'un joueur touche la ligne d'arrivée, finish() est continuellement appelé tant que le joueur touche la partie.
Utilisez un booléen, une variable qui stocke vrai ou faux, pour vous assurer que finish() n'est appelé qu'une seule fois.
Créez une nouvelle variable nommée raceActive et définissez-la sur true.
local timePassed = 0local finishLine = script.Parentlocal raceActive = true-- S'exécute chaque fois que le joueur touche la partie de la ligne d'arrivéelocal function finish()Ajoutez une seconde condition à l'instruction if pour vérifier si raceActive est vrai avant d'appeler finish().
local function partTouched(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and raceActive == true thenfinish()endendPour empêcher finish() d'être appelé à nouveau, définissez raceActive sur false.
local function finish()print("touched the finish line")raceActive = falseendTestez votre jeu pour vérifier que vous ne voyez votre instruction d'impression de test qu'une seule fois.
Suivre le temps
Comme une instruction if, une boucle while peut également utiliser une condition pour voir si elle doit s'exécuter. Pour chronométrer le joueur, créez un chronomètre en utilisant une boucle while true do qui ne s'exécute que lorsque le booléen raceActive est vrai.
En bas du script, tapez while raceActive == true do. Appuyez sur Entrée pour compléter automatiquement et ajouter le end.
finishLine.Touched:Connect(partTouched)while raceActive == true doendPour chronométrer les joueurs, dans la boucle, ajoutez 1 à la variable timePassed une fois par seconde. Incluez une instruction d'impression pour tester votre travail.
finishLine.Touched:Connect(partTouched)while raceActive == true dotask.wait(1)timePassed += 1print(timePassed)endTestez le jeu et vérifiez que vous voyez chaque seconde affichée dans la fenêtre Output.
Récompenser les joueurs avec des médailles
Pour finir, utilisez une instruction if avec plusieurs conditions pour attribuer aux joueurs une médaille de prix différente en fonction de leur performance. Utilisez une instruction if et deux instructions elseif pour vérifier le temps d'arrivée du joueur et leur attribuer la bonne médaille.
Pour confirmer que chaque médaille peut être attribuée, utilisez des instructions d'impression.
local function finish()raceActive = falseprint("You finished in " .. timePassed)endPour attribuer une médaille d'or, codez une instruction if qui compare timePassed au temps d'arrivée souhaité. Cet exemple vérifie si le temps du joueur était inférieur ou égal à 10 secondes.
local function finish()raceActive = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")endendTestez et confirmez que la médaille d'or peut être attribuée.
Ajouter des conditions supplémentaires
Maintenant que vous avez testé pour la médaille d'or, codez des conditions pour les autres médailles en utilisant le mot-clé elseif.
Pour la médaille d'argent, utilisez elseif et la prochaine plage de temps souhaitée. Dans cet exemple, la plage est supérieure à 10 secondes mais inférieure ou égale à 20 secondes.
local function finish()raceActive = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")elseif timePassed > 10 and timePassed <= 20 thenprint("You get a silver medal!")endendUtilisez le même modèle pour la médaille de bronze. Vérifiez votre code avec l'exemple ci-dessous.
local function finish()raceActive = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")elseif timePassed > 10 and timePassed <= 20 thenprint("You get a silver medal!")elseif timePassed > 20 and timePassed <= 30 thenprint("You get a bronze medal!")endendTestez pour les médailles d'argent et de bronze.
Conseils de dépannage
Si vous ne voyez pas les médailles d'argent et de bronze apparaître, essayez l'une des solutions ci-dessous.
- Chaque elseif doit avoir un then après sa condition.
- Dans partTouched(), assurez-vous que la seconde condition de l'instruction if utilise ==, comme dans raceActive == true.
- Vérifiez que chaque elseif est dans le bon contexte. Chaque condition elseif doit être entre la première ligne de l'instruction if/then et son dernier end.
Ajouter la condition else
Si le joueur n'a gagné aucune des médailles, vous devriez l'encourager à réessayer. Dans ce cas, vous pouvez utiliser une instruction else, qui s'exécute si aucune autre condition n'est vraie, pour leur montrer un message.
En dessous du dernier elseif et au-dessus de end, commencez une nouvelle ligne et tapez else. Ne ajoutez pas then. Sous else, utilisez une instruction d'impression pour les inciter à réessayer.
local function finish()raceActive = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")elseif timePassed > 10 and timePassed <= 20 thenprint("You get a silver medal!")elseif timePassed > 20 and timePassed <= 30 thenprint("You get a bronze medal!")elseprint("Try again!")endendTestez pour voir le message else.
Résumé
Les structures de contrôle peuvent avoir plus d'un scénario. Utilisez des instructions if pour configurer l'instruction initiale à vérifier, puis ajoutez autant de conditions elseif que nécessaire. Enfin, utilisez else pour indiquer ce qui doit se passer si toutes les conditions données sont fausses.
En commençant par le haut, toutes les conditions seront vérifiées, et seule la première condition vraie exécutera le code. Les conditions restantes ne seront pas vérifiées, ni leur code exécuté.
Après avoir terminé le projet, vous pouvez développer le script pour ajouter de nouveaux éléments de plusieurs manières supplémentaires.
- Ajoutez du code pour que les joueurs puissent répéter la course en touchant la ligne de départ lorsqu'ils terminent.
- Concevez un moyen d'afficher le temps pendant une course. Vous pouvez soit afficher le temps sur une partie en utilisant une Surface GUI, comme dans le Créer un pont chronométré tutoriel.
local timePassed = 0
local finishLine = script.Parent
-- Utilisé pour empêcher finish() et le chronomètre de se répéter lorsque la course est terminée
local raceActive = true
-- S'exécute lorsque le joueur touche la ligne d'arrivée et leur montre une récompense
local function finish()
raceActive = false
print("You finished in " .. timePassed)
if timePassed <= 10 then
print("You get a gold medal!")
elseif timePassed > 10 and timePassed <= 20 then
print("You get a silver medal!")
elseif timePassed > 20 and timePassed <= 30 then
print("You get a bronze medal!")
else
print("Try again!")
end
end
-- Vérifie si un joueur touche la partie lorsque la course est active
local function partTouched(otherPart)
local character = otherPart.Parent
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
if humanoid and raceActive == true then
finish()
end
end
finishLine.Touched:Connect(partTouched)
-- Suit le temps de course pendant que la course est active. Doit être en bas du script.
while raceActive == true do
task.wait(1)
timePassed += 1
print(timePassed)
end