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 déterminer ce qui devrait se produire sous plusieurs conditions. La syntaxe ressemble à ceci :
Montre la syntaxe pour elseif et elseif isGreen thenprint("Allez")elseif isYellow thenprint("Lent")elseif isPedestrians thenprint("Attendez")elseprint("Arrêtez")end
Dans 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 à remettre aux joueurs, mais cela prend beaucoup de temps. Prenons l'exemple du code imaginaire ci-dessous.
Toutes les instructions ifif finishTime < 5 then-- Obtenir une médaille d'orendif finishTime >= 5 and <= 10 then-- Obtenir une médaille d'argentendif finishTime > 10 and <= 15 then-- Obtenir une médaille de bronzeend
Une manière plus lisible et efficace de coder cela est d'utiliser une seule instruction if et le mot-clé elseif pour fournir des conditions alternatives à tester si les conditions précédentes ne sont pas vraies.
Utilise elseif et elseif finishTime < 5 then-- Obtenir une médaille d'orelseif finishTime >= 5 and <= 10 then-- Obtenir une médaille d'argentelseif finishTime > 10 and <= 15 then-- Obtenir une médaille de bronzeend
Lorsque l'instruction if/then s'exécute, elle commence par le haut et n'exécute le code que pour la première condition vraie qu'elle trouve.
Configurez le parcours
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ébut et la fin assez 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 le nombre de secondes écoulées depuis le début de la course et une deuxième variable pour faire référence à 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() lorsque qu'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("touché la ligne d'arrivée")endlocal function partTouched(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenfinish()endendfinishLine.Touched:Connect(partTouched)Testez le jeu 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 constamment 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 réglez-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 deuxième 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 que finish() soit appelé à nouveau, réglez raceActive sur false.
local function finish()print("touché la ligne d'arrivée")raceActive = falseendTestez votre expérience 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 l'auto-compléter et ajoutez 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 l'expérience 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 leurs performances. 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("Vous avez terminé en " .. 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("Vous avez terminé en " .. timePassed)if timePassed <= 10 thenprint("Vous obtenez une médaille d'or !")endendTestez et confirmez que la médaille d'or peut être attribuée.
Ajoutez 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 désirée. Dans cet exemple, la plage est supérieure à 10 secondes mais inférieure ou égale à 20 secondes.
local function finish()raceActive = falseprint("Vous avez terminé en " .. timePassed)if timePassed <= 10 thenprint("Vous obtenez une médaille d'or !")elseif timePassed > 10 and timePassed <= 20 thenprint("Vous obtenez une médaille d'argent !")endendUtilisez le même schéma pour la médaille de bronze. Vérifiez votre code avec l'exemple ci-dessous.
local function finish()raceActive = falseprint("Vous avez terminé en " .. timePassed)if timePassed <= 10 thenprint("Vous obtenez une médaille d'or !")elseif timePassed > 10 and timePassed <= 20 thenprint("Vous obtenez une médaille d'argent !")elseif timePassed > 20 and timePassed <= 30 thenprint("Vous obtenez une médaille de bronze !")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 deuxième condition de l'instruction if utilise ==, comme dans raceActive == true.
- Vérifiez que chaque elseif est dans la portée. Chaque condition elseif doit être entre la première ligne de l'instruction if/then et son dernier end.
Ajoutez 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 lui montrer un message.
Sous le dernier elseif et au-dessus de end, commencez une nouvelle ligne et tapez else. Ne rajoutez pas then. Sous else, utilisez une instruction print pour les inciter à réessayer.
local function finish()raceActive = falseprint("Vous avez terminé en " .. timePassed)if timePassed <= 10 thenprint("Vous obtenez une médaille d'or !")elseif timePassed > 10 and timePassed <= 20 thenprint("Vous obtenez une médaille d'argent !")elseif timePassed > 20 and timePassed <= 30 thenprint("Vous obtenez une médaille de bronze !")elseprint("Réessayez !")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 établir 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.
- Ajoutez du code pour que les joueurs puissent répéter la course en touchant la ligne de départ lorsqu'ils ont terminé.
- Concevez un moyen d'afficher le temps pendant une course. Vous pouvez soit afficher le temps sur une partie à l'aide d'une Surface GUI, comme dans le Créer un pont chronométré tutoriel.
Script complet
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 lui montre une récompense
local function finish()
raceActive = false
print("Vous avez terminé en " .. timePassed)
if timePassed <= 10 then
print("Vous obtenez une médaille d'or !")
elseif timePassed > 10 and timePassed <= 20 then
print("Vous obtenez une médaille d'argent !")
elseif timePassed > 20 and timePassed <= 30 then
print("Vous obtenez une médaille de bronze !")
else
print("Réessayez !")
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 la course tant que la course est active. Doit être en bas du script.
while raceActive == true do
task.wait(1)
timePassed += 1
print(timePassed)
end