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 devrait se produire sous plusieurs conditions.La syntaxe ressemble à :
Affiche la syntaxe pour elseif et else
if isGreen thenprint("Go")elseif isYellow thenprint("Slow")elseif isPedestrians thenprint("Wait")elseprint("stop")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 de finition.

Code plusieurs conditions
Pour ce projet, vous pouvez écrire une déclaration if unique pour chaque médaille pour récompenser les joueurs, mais cela prend beaucoup de temps.Prenez, par instance, le code imaginaire ci-dessous.
Toutes les déclarations if
if finishTime < 5 then-- Obtenir une médaille d'orendif finishTime >= 5 and <= 10 then-- Obtenez une médaille d'argentendif finishTime > 10 and <= 15 then-- Obtenir une médaille de bronzeend
Un moyen plus lisible et plus efficace de coder ceci est d'utiliser une seule déclaration if et d'utiliser le mot-clé elseif pour fournir des conditions alternatives pour tester si les conditions précédentes ne sont pas vraies.
Utilise elseif et else
if finishTime < 5 then-- Obtenir une médaille d'orelseif finishTime >= 5 and <= 10 then-- Obtenez une médaille d'argentelseif finishTime > 10 and <= 15 then-- Obtenir une médaille de bronzeend
Lorsque la déclaration if/then s'exécute, elle commence au sommet et ne s'exécute que le code pour la première condition vraie qu'elle trouve.
Configurer le parcours de 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éer une partie ancrée nommée FinishLine.Pour accélérer les tests, placez le début et la fin ensemble.Vous pouvez déplacer la ligne d'arrivée après avoir terminé le script.
Terminer la partie >Toute la course >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 référencer la ligne d'arrivée.
local finishLine = script.Parentlocal timePassed = 0Créez une fonction nommée finish().
local timePassed = 0local finishLine = script.Parentlocal function finish()endSur votre propre posséder:
- Codez une fonction nommée partTouched() qui s'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 appelé en continu tant que le joueur touche la partie.
Utilisez un booléen , une variable qui stocke vrai ou faux, pour vous assurer que finish() ne soit 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-- Exécute chaque fois que le joueur touche la partie de la ligne d'arrivéelocal function finish()Ajoutez une deuxième condition à la déclaration 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 à false.
local function finish()print("touched the finish line")raceActive = falseendTestez votre jeu pour vérifier que vous ne voyez votre déclaration d'impression de test qu'une seule fois.
Suivre le temps
Comme une déclaration if, une boucle while peut également utiliser une condition pour voir si elle doit s'exécuter.Pour synchroniser le joueur, créez une minuterie en utilisant une boucle while true qui ne s'exécute que lorsque le raceActive boolean 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 synchroniser les joueurs, dans la boucle, ajoutez 1 à la variable timePassed une fois toutes les secondes. Incluez une déclaration d'impression pour tester votre travail.
finishLine.Touched:Connect(partTouched)while raceActive == true dotask.wait(1)timePassed += 1print(timePassed)endJouez au jeu et vérifiez que vous voyez chaque seconde affichée dans la fenêtre de sortie.
Médailles de joueur de récompense
Pour terminer, utilisez une déclaration if avec plusieurs conditions pour attribuer aux joueurs une médaille de prix différente en fonction de leurs performances.Utilisez une déclaration if et deux déclarations elseif pour vérifier le temps de fin du joueur et lui attribuer la médaille correcte.
Pour confirmer que chaque médaille peut être décernée, utilisez des déclarations d'impression.
local function finish()raceActive = falseprint("You finished in " .. timePassed)endPour attribuer une médaille d'or, codez une déclaration if qui compare timePassed à l'heure de fin souhaitée.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 décernée.
Ajouter des conditions supplémentaires
Maintenant que vous avez testé pour la médaille d'or, les conditions de code pour les autres médailles en utilisant le mot-clé elseif.
Pour la médaille d'argent, utilisez elseif et la plage de temps suivante souhaitée.Dans cet exemple, la portée 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!")endendTest de jeu pour les médailles d'argent et de bronze.
Conseils de dépannage
Si vous ne voyez pas apparaître les métaux argent et bronze, essayez l'une des options suivantes.
- Chacun elseif devrait avoir un ensuite après sa condition.
- Dans partTouched() , assurez-vous que la deuxième condition de la déclaration if utilise == , comme dans raceActive == true .
- Vérifiez que chaque elseif est dans le champ. Chaque condition elseif doit être entre la première ligne de la déclaration if/then et sa dernière end .
Ajoutez la condition else
Si le joueur n'a gagné aucune des médailles, vous devez l'encourager à réessayer.Dans ce cas, vous pouvez utiliser une déclaration else, qui s'exécute si aucune autre condition n'est vraie , pour leur montrer un message.
En dessous de la dernière elseif et au-dessus de end, commencez une nouvelle ligne et saisissez else. Ne pas ajouter ensuite.En dessous de tout autre, utilisez une déclaration 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!")endend
2. Testez le jeu pour voir le message else.
Sommaire
Les structures de contrôle peuvent avoir plus d'un scénario.Utilisez les déclarations if pour configurer la déclaration initiale à vérifier, puis ajoutez autant de conditions elseif nécessaires.Enfin, utilisez else pour indiquer ce qui devrait se produire si toutes les conditions données sont fausses.
À partir du sommet, toutes les conditions seront vérifiées, et seule la première condition réelle exécutera le code.Les conditions restantes ne seront pas vérifiées, et leur code ne s'lancerpas.
Après avoir terminé le projet, vous pouvez élargir le script pour ajouter de nouveaux éléments de quelques façons supplémentaires.
- Ajoutez du code pour que les joueurs puissent répéter la course en touchant la ligne de départ lorsqu'ils finissent.
- Concevez une façon d'afficher le temps pendant une course.Vous pouvez soit afficher le temps sur une partie en utilisant une interface utilisateur graphiquede surface, comme dans le Créer un tutoriel de pont temporel.
Completed script
local timePassed = 0
local finishLine = script.Parent
-- Utilisé pour empêcher la répétition de finish() et de timer lorsque la course est terminée
local raceActive = true
-- S'exécute lorsque le joueur touche la ligne d'arrivée et lui montre un prix
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 lorsqu'une 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 lorsque la course est active. Doit être au bas du script.
while raceActive == true do
task.wait(1)
timePassed += 1
print(timePassed)
end