Les structures de contrôle peuvent avoir plus d'un 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 laSyntaxe pour else et pour 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 codifier un parcours de parkour où les coureurs reçoivent des récompenses en fonction de leur temps de finition.
Codage de plusieurs conditions
Pour ce projet, vous pourriez écrire une déclaration unique pour chaque médaille pour attribuer aux joueurs, mais cela prend beaucoup de temps. Prenez, par instance, le code imaginaire ci-dessous.
Toutes les déclarations
if finishTime < 5 then-- Obtenez une médaille d'orendif finishTime >= 5 and <= 10 then-- Obtenez une médaille d'argentendif finishTime > 10 and <= 15 then-- Obtenez une médaille de bronzeend
Une façon plus lisible et plus efficace de coder ceci est d'utiliser une seule if statement et d'utiliser le mot-clé elseif pour fournir des conditions alternatives à tester si les conditions précédentes ne sont pas vraies.
Utilise else et autre
if finishTime < 5 then-- Obtenez une médaille d'orelseif finishTime >= 5 and <= 10 then-- Obtenez une médaille d'argentelseif finishTime > 10 and <= 15 then-- Obtenez une médaille de bronzeend
Lorsque la déclaration if/then s'exécute, elle s'exécute en haut et ne s'exécute que le code pour la première condition vraie que trouvera.
Configurer le parcours de course
Commencez en plaçant le point de départ du parcours et la ligne d'arrivée, puis créez un script pour mesurer le joueur et attribuer différentes médailles.
Créez une partie ancrée nommée FinishLine. Pour accélérer le test, placez le début et la fin à côté l'un de l'autre. Vous pouvez déplacer la ligne d'arrivée après avoir terminé le script.
Dans FinishLine, insérez un script nommé RaceManager. Puis, 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 FinishLine.
local finishLine = script.Parentlocal timePassed = 0Créer une fonction nommée finish() .
local timePassed = 0local finishLine = script.Parentlocal function finish()endSur posséder:
- Cliquez sur une fonction nommée partTouched() qui s'exécute finish() quand 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.
Gardez fin() De la répétition
En ce moment, chaque fois qu'un joueur touche la ligne d'arrivée, finish() est appelé de manière continue tant que le joueur touche la partie.
Utilisez un boîtier de vérité ou de faux , une variable qui stocke vrai ou faux, pour vous assurer que finir() n'est appelé qu'une 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 toujours lorsque 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 vraie avant d'appeler finish() .
local function partTouched(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and raceActive == true thenfinish()endendPour arrêter finish() d'être appelé à nouveau, définissez raceActive sur false.
local function finish()print("touched the finish line")raceActive = falseendTestez votre jeu pour vous assurer que vous ne voyez que votre déclaration de test une fois.
Garder la trace du temps
Comme une if statement, un while loop peut également utiliser une condition pour voir si il doit s'lancer. Pour timer le joueur, créez un timer en utilisant un while true do loop qui ne s'exécute que lorsque le raceActive bouton est vrai.
Au bas du script, tapez while raceActive == true do . Appuyez sur Entrée pour terminer automatiquement et ajouter le end.
finishLine.Touched:Connect(partTouched)while raceActive == true doendPour synchroniser les joueurs, dans le boucle, ajoutez 1 à la variable timePassed une fois tous 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.
Attribution de médailles
Pour terminer, utilisez une if statement avec plusieurs conditions pour attribuer aux joueurs un prix différent en fonction de leur performance. Utilisez une if statement et deux clause de fin pour vérifier le temps de fin du joueur et leur attribuer la bonne médaille.
Pour confirmer qu'une médaille peut être attribuée, utilisez les déclarations d'impression.
local function finish()raceActive = falseprint("You finished in " .. timePassed)endPour attribuer une médaille d'or, codez une if statement qui compare timePassed à la durée 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!")endendTester le jeu et confirmer 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, des conditions de code pour les autres médailles en utilisant le elseif mot-clé.
Pour la médaille d'argent, utilisez elseif - et la prochaine tranche de temps souhaitée. Dans cet exemple, la tranche est plus grande que 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 motif 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 le jeu pour les médailles d'argent et de bronze.
Conseils de débogage
Si vous ne voyez pas les métaux d'argent et de bronze apparaître, essayez l'un des éléments ci-dessous.
- Chaque elseif ../fr/promo-fr/promo-fr/promo-fr/promo-fr/promo-fr/promo-fr/promo-fr/promo-fr/promo-fr/promo-fr/promo-fr/promo-fr/promo-fr/promo-fr/promo-fr/promo-fr/promo-fr/promo-fr/promo-fr/promo-fr/promo-fr/promo-fr/promo-fr/promo-fr/promo-fr/promo-fr/promo-fr/promo-fr/promo-fr/promo-fr/promo-fr/promo-fr/promo-fr/promo-fr/promo-fr/promo-fr/promo-fr/promo-fr/promo-fr/promo-
- 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 d'application. Chaque elseif condition doit être entre la première ligne de la déclaration if/then et son dernier end.
Ajouter la condition d'autre
Si le joueur n'a pas gagné l'une des médailles, vous devriez les 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.
Sous le dernier elseif et au-dessus de end, commencez une nouvelle ligne et tapez else . 1> Ne les1> pas ajouter alors. En dessous, utilisez une déclaration d'impression pour les inviter à 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 prochain message.
Résumé
Les structures de contrôle peuvent avoir plus d'un scénario. Utilisez si les déclarations pour configurer la déclaration initiale pour vérifier, et ensuite ajouter autant de elseif conditions que nécessaire. Enfin, utilisez else pour définir ce qui devrait se produire si toutes les conditions données sont fausses.
À partir du haut, toutes les conditions seront vérifiées, et seuls les premiers vraies conditions exécuteront le code. Les conditions restantes ne seront pas vérifiées, ni leur code ne sera lancer.
Après avoir terminé le projet, vous pouvez étendre 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 un moyen 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 tutoriel sur la création d'un pont temporel.
Completed script
local timePassed = 0
local finishLine = script.Parent
-- Utilisé pour garder fin() et timer 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 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)
-- Garde la trace du 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