Controle structuren kunnen meer dan één voorwaarde hebben. De sleutelwoorden else en elseif kunnen extra scenario's creëren voor wat er moet gebeuren onder verschillende voorwaarden. De syntaxis ziet er als volgt uit:
if isGreen then
print("Ga")
elseif isYellow then
print("Langzaam")
elseif isPedestrians then
print("Wacht")
else
print("stop")
endIn dit project worden else en elseif gebruikt om een parkourcursus te coderen waarbij hardlopers prijzen ontvangen afhankelijk van hun finishtijd.

Code meerdere voorwaarden
Voor dit project zou je een unieke if-statement voor elke medaille kunnen schrijven om spelers te belonen, maar dat kost veel tijd. Neem bijvoorbeeld de imaginaire code hieronder.
if finishTime < 5 then
-- Krijg een gouden medaille
end
if finishTime >= 5 and <= 10 then
-- Krijg een zilveren medaille
end
if finishTime > 10 and <= 15 then
-- Krijg een bronzen medaille
endEen leesbaardere en efficiëntere manier om dit te coderen is door een enkele if-statement te gebruiken en het sleutelwoord elseif te gebruiken om alternatieve voorwaarden te bieden om te testen of de vorige voorwaarden niet waar zijn.
if finishTime < 5 then
-- Krijg een gouden medaille
elseif finishTime >= 5 and <= 10 then
-- Krijg een zilveren medaille
elseif finishTime > 10 and <= 15 then
-- Krijg een bronzen medaille
endWanneer de if/then-statement wordt uitgevoerd, begint deze bovenaan en voert alleen de code uit voor de eerste waarheidsgetrouwe voorwaarde die wordt gevonden.
Stel de racebaan in
Begin met het plaatsen van het startpunt van de baan en de finishlijn, en maak vervolgens een script om de speler te timen en verschillende medailles toe te kennen.
Maak een verankerd onderdeel genaamd FinishLine. Om het testen sneller te maken, plaats je het begin en het einde dicht bij elkaar. Je kunt de finishlijn verplaatsen nadat je het script hebt voltooid.

Finish Onderdeel 
Hele Cursus In FinishLine, voeg een script toe genaamd RaceManager. Voeg vervolgens een variabele toe om op te slaan hoeveel seconden zijn verstreken sinds de race begon en een tweede variabele om naar FinishLine te verwijzen.
local finishLine = script.Parentlocal timePassed = 0Maak een functie genaamd finish().
local timePassed = 0local finishLine = script.Parentlocal function finish()endOp eigen gelegenheid:
- Codeer een functie genaamd partTouched() die finish() uitvoert wanneer een speler het aanraakt.
- Verbind het finishlijnonderdeel met partTouched().
- Vergelijk je code met het onderstaande voorbeeld.
local function finish()print("Raakte de finishlijn aan")endlocal function partTouched(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenfinish()endendfinishLine.Touched:Connect(partTouched)Speeltest en controleer of finish() wordt aangeroepen wanneer je de finishlijn aanraakt.
Voorkom dat finish() herhaald wordt
Op dit moment, telkens wanneer een speler de finishlijn aanraakt, wordt finish() continu aangeroepen zolang de speler het onderdeel aanraakt.
Gebruik een boolean, een variabele die waar of niet waar opslaat, om ervoor te zorgen dat finish() slechts één keer wordt aangeroepen.
Maak een nieuwe variabele genaamd raceActive en stel deze in op true.
local timePassed = 0local finishLine = script.Parentlocal raceActive = true-- Wordt uitgevoerd telkens wanneer de speler het finishlijnonderdeel aanraaktlocal function finish()Voeg een tweede voorwaarde toe aan de if-statement om te controleren of raceActive waar is voordat je finish() aanroept.
local function partTouched(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and raceActive == true thenfinish()endendOm te voorkomen dat finish() opnieuw wordt aangeroepen, stel je raceActive in op false.
local function finish()print("Raakte de finishlijn aan")raceActive = falseendSpeeltest je spel om te controleren of je je testprintstatement slechts één keer ziet.
Houd de tijd bij
Net als een if-statement kan een while-lus ook een voorwaarde gebruiken om te zien of deze moet draaien. Om de speler te timen, maak je een timer met een while true do-lus die alleen draait wanneer de boolean raceActive waar is.
Typ onderaan het script while raceActive == true do. Druk op Enter om automatisch aan te vullen en voeg de end toe.
finishLine.Touched:Connect(partTouched)while raceActive == true doendOm de spelers te timen, voeg je in de lus 1 toe aan de variabele timePassed elke seconde. Voeg een printstatement toe om je werk te testen.
finishLine.Touched:Connect(partTouched)while raceActive == true dotask.wait(1)timePassed += 1print(timePassed)endSpeeltest het spel en controleer of je elke seconde in het Output venster ziet weergegeven.
Ken medailles toe aan spelers
Om te eindigen, gebruik een if-statement met meerdere voorwaarden om spelers een andere prijsmedaille toe te kennen op basis van hun prestaties. Gebruik een if-statement en twee elseif-statements om de finishtijd van de speler te controleren en hen de juiste medaille toe te kennen.
Om te bevestigen dat elke medaille kan worden toegekend, gebruik printstatements.
local function finish()raceActive = falseprint("Je bent gefinisht in " .. timePassed)endOm een gouden medaille toe te kennen, codeer je een if-statement die timePassed vergelijkt met de gewenste finishtijd. Dit voorbeeld controleert of de tijd van de speler minder dan of gelijk aan 10 seconden was.
local function finish()raceActive = falseprint("Je bent gefinisht in " .. timePassed)if timePassed <= 10 thenprint("Je krijgt een gouden medaille!")endendSpeeltest en bevestig dat de gouden medaille kan worden toegekend.
Voeg extra voorwaarden toe
Nu je de gouden medaille hebt getest, codeer je voorwaarden voor de andere medailles met behulp van het elseif-sleutelwoord.
Voor de zilveren medaille, gebruik elseif en het volgende gewenste tijdsbereik. In dit voorbeeld is het bereik groter dan 10 seconden maar minder dan of gelijk aan 20 seconden.
local function finish()raceActive = falseprint("Je bent gefinisht in " .. timePassed)if timePassed <= 10 thenprint("Je krijgt een gouden medaille!")elseif timePassed > 10 and timePassed <= 20 thenprint("Je krijgt een zilveren medaille!")endendGebruik hetzelfde patroon voor de bronzen medaille. Controleer je code met het onderstaande voorbeeld.
local function finish()raceActive = falseprint("Je bent gefinisht in " .. timePassed)if timePassed <= 10 thenprint("Je krijgt een gouden medaille!")elseif timePassed > 10 and timePassed <= 20 thenprint("Je krijgt een zilveren medaille!")elseif timePassed > 20 and timePassed <= 30 thenprint("Je krijgt een bronzen medaille!")endendSpeeltest voor de zilveren en bronzen medailles.
Probleemoplossing tips
Als je de zilveren en bronzen medailles niet ziet verschijnen, probeer dan een van de onderstaande oplossingen.
- Elke elseif moet een then hebben na zijn voorwaarde.
- In partTouched(), zorg ervoor dat de tweede voorwaarde van de if-statement == gebruikt, zoals in raceActive == true.
- Controleer of elke elseif in scope is. Elke elseif-voorwaarde moet tussen de eerste regel van de if/then-statement en de laatste end staan.
Voeg de else-voorwaarde toe
Als de speler geen van de medailles heeft verdiend, moet je hen aanmoedigen om het opnieuw te proberen. In dit geval kun je een else-statement gebruiken, dat wordt uitgevoerd als geen andere voorwaarden waar zijn, om hen een bericht te tonen.
Onder de laatste elseif en boven end, begin een nieuwe regel en typ else. Voeg geen then toe. Onder else, gebruik een printstatement om hen aan te moedigen het opnieuw te proberen.
local function finish()raceActive = falseprint("Je bent gefinisht in " .. timePassed)if timePassed <= 10 thenprint("Je krijgt een gouden medaille!")elseif timePassed > 10 and timePassed <= 20 thenprint("Je krijgt een zilveren medaille!")elseif timePassed > 20 and timePassed <= 30 thenprint("Je krijgt een bronzen medaille!")elseprint("Probeer het opnieuw!")endendSpeeltest om het else-bericht te zien.
Samenvatting
Controle structuren kunnen meer dan één scenario hebben. Gebruik if-statements om de initiële verklaring in te stellen om te controleren, en voeg vervolgens zoveel elseif-voorwaarden toe als nodig is. Gebruik ten slotte else om aan te geven wat er moet gebeuren als alle gegeven voorwaarden onwaar zijn.
Vanaf de bovenkant worden alle voorwaarden gecontroleerd, en alleen de eerste waarheidsgetrouwe voorwaarde zal de code uitvoeren. De resterende voorwaarden worden niet gecontroleerd, noch zal hun code worden uitgevoerd.
Na het voltooien van het project kun je het script uitbreiden om nieuwe elementen op een paar extra manieren toe te voegen.
- Voeg code toe zodat spelers de race kunnen herhalen door de startlijn aan te raken wanneer ze zijn gefinisht.
- Ontwerp een manier om de tijd tijdens een race weer te geven. Je kunt de tijd op een onderdeel weergeven met behulp van een Surface GUI, zoals in de Maak een getimede brug tutorial.
local timePassed = 0
local finishLine = script.Parent
-- Gebruikt om finish() en timer te voorkomen van herhalen wanneer de race voorbij is
local raceActive = true
-- Wordt uitgevoerd wanneer de speler de finishlijn aanraakt en toont hen een prijs
local function finish()
raceActive = false
print("Je bent gefinisht in " .. timePassed)
if timePassed <= 10 then
print("Je krijgt een gouden medaille!")
elseif timePassed > 10 and timePassed <= 20 then
print("Je krijgt een zilveren medaille!")
elseif timePassed > 20 and timePassed <= 30 then
print("Je krijgt een bronzen medaille!")
else
print("Probeer het opnieuw!")
end
end
-- Controleert of een speler het onderdeel aanraakt wanneer een race actief is
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)
-- Houdt de racetijd bij terwijl de race actief is. Moet onderaan het script staan.
while raceActive == true do
task.wait(1)
timePassed += 1
print(timePassed)
end