Plusieurs conditions

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

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 then
print("Go")
elseif isYellow then
print("Slow")
elseif isPedestrians then
print("Wait")
else
print("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'or
end
if finishTime >= 5 and <= 10 then
-- Obtenez une médaille d'argent
end
if finishTime > 10 and <= 15 then
-- Obtenir une médaille de bronze
end

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'or
elseif finishTime >= 5 and <= 10 then
-- Obtenez une médaille d'argent
elseif finishTime > 10 and <= 15 then
-- Obtenir une médaille de bronze
end

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.

  1. 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
    >

  2. 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.Parent
    local timePassed = 0
  3. Créez une fonction nommée finish().


    local timePassed = 0
    local finishLine = script.Parent
    local function finish()
    end
  4. Sur 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")
    end
    local function partTouched(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    finish()
    end
    end
    finishLine.Touched:Connect(partTouched)
  5. 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.

  1. Créez une nouvelle variable nommée raceActive et définissez-la sur true.


    local timePassed = 0
    local finishLine = script.Parent
    local raceActive = true
    -- Exécute chaque fois que le joueur touche la partie de la ligne d'arrivée
    local function finish()
  2. 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.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid and raceActive == true then
    finish()
    end
    end
  3. Pour empêcher finish() d'être appelé à nouveau, définissez raceActive à false.


    local function finish()
    print("touched the finish line")
    raceActive = false
    end
  4. Testez 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.

  1. 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 do
    end
  2. Pour 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 do
    task.wait(1)
    timePassed += 1
    print(timePassed)
    end
  3. Jouez 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.

  1. Pour confirmer que chaque médaille peut être décernée, utilisez des déclarations d'impression.


    local function finish()
    raceActive = false
    print("You finished in " .. timePassed)
    end
  2. Pour 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 = false
    print("You finished in " .. timePassed)
    if timePassed <= 10 then
    print("You get a gold medal!")
    end
    end
  3. Testez 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.

  1. 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 = 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!")
    end
    end
  2. Utilisez le même modèle pour la médaille de bronze. Vérifiez votre code avec l'exemple ci-dessous.


    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!")
    end
    end
  3. Test 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.

  1. 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 = 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

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