Le strutture di controllo possono avere più di una condizione. Le parole chiave else ed elseif possono creare scenari aggiuntivi per cosa dovrebbe succedere sotto diverse condizioni. La sintassi è simile a questa:
Mostra la sintassi per elseif ed elseif isGreen thenprint("Vai")elseif isYellow thenprint("Lento")elseif isPedestrians thenprint("Aspetta")elseprint("fermati")end
In questo progetto, else ed elseif vengono utilizzati per programmare un percorso di parkour dove i corridori ricevono premi a seconda del loro tempo di completamento.

Codifica di più condizioni
Per questo progetto, potresti scrivere un'unica istruzione if per ciascuna medaglia da assegnare ai giocatori, ma ciò richiede molto tempo. Prendi, ad esempio, il codice immaginario qui sotto.
Tutte le istruzioni ifif finishTime < 5 then-- Ottieni una medaglia d'oroendif finishTime >= 5 and <= 10 then-- Ottieni una medaglia d'argentoendif finishTime > 10 and <= 15 then-- Ottieni una medaglia di bronzoend
Un modo più leggibile ed efficiente per codificare questo è utilizzare un'unica istruzione if e usare la parola chiave elseif per fornire condizioni alternative da testare se le condizioni precedenti non sono vere.
Usa elseif ed elseif finishTime < 5 then-- Ottieni una medaglia d'oroelseif finishTime >= 5 and <= 10 then-- Ottieni una medaglia d'argentoelseif finishTime > 10 and <= 15 then-- Ottieni una medaglia di bronzoend
Quando viene eseguita l'istruzione if/then, essa inizierà dall'alto e eseguirà solo il codice per la prima condizione vera che trova.
Configura il percorso di gara
Inizia posizionando il punto di partenza e la linea di arrivo del percorso, quindi crea uno script per cronometrare il giocatore e assegnare diverse medaglie.
Crea una parte ancorata chiamata FinishLine. Per rendere i test più veloci, posiziona l'inizio e la fine vicini. Puoi spostare la linea di arrivo dopo aver terminato lo script.

Parte di Arrivo 
Intero Percorso In FinishLine, inserisci uno script chiamato RaceManager. Poi, aggiungi una variabile per memorizzare quanti secondi sono passati dall'inizio della gara e una seconda variabile per fare riferimento a FinishLine.
local finishLine = script.Parentlocal timePassed = 0Crea una funzione chiamata finish().
local timePassed = 0local finishLine = script.Parentlocal function finish()endDa solo:
- Codifica una funzione chiamata partTouched() che esegue finish() quando un giocatore lo tocca.
- Collega la parte della linea di arrivo a partTouched().
- Confronta il tuo codice con l'esempio qui sotto.
local function finish()print("toccato la linea di arrivo")endlocal function partTouched(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenfinish()endendfinishLine.Touched:Connect(partTouched)Esegui un test per verificare che finish() venga chiamato quando tocchi la linea di arrivo.
Impedisci la ripetizione di finish()
In questo momento, ogni volta che un giocatore tocca la linea di arrivo, finish() viene continuamente chiamato finché il giocatore tocca la parte.
Utilizza un booleano, una variabile che memorizza vero o falso, per assicurarti che finish() venga chiamato solo una volta.
Crea una nuova variabile chiamata raceActive e impostala su true.
local timePassed = 0local finishLine = script.Parentlocal raceActive = true-- Viene eseguita ogni volta che il giocatore tocca la parte della linea di arrivolocal function finish()Aggiungi una seconda condizione all'istruzione if per controllare se raceActive è vero prima di chiamare finish().
local function partTouched(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and raceActive == true thenfinish()endendPer fermare il ripetersi di finish(), imposta raceActive su false.
local function finish()print("toccato la linea di arrivo")raceActive = falseendEsegui un test della tua esperienza per controllare che vedi la tua dichiarazione di test una sola volta.
Tieni traccia del tempo
Come un'istruzione if, un ciclo while può anche utilizzare una condizione per vedere se dovrebbe essere eseguito. Per cronometrare il giocatore, crea un timer utilizzando un ciclo while true do che viene eseguito solo quando il booleano raceActive è vero.
In fondo allo script, digita while raceActive == true do. Premi Invio per completare automaticamente e aggiungi il end.
finishLine.Touched:Connect(partTouched)while raceActive == true doendPer cronometrare i giocatori, nel ciclo, aggiungi 1 alla variabile timePassed una volta ogni secondo. Includi un'istruzione di stampa per testare il tuo lavoro.
finishLine.Touched:Connect(partTouched)while raceActive == true dotask.wait(1)timePassed += 1print(timePassed)endEsegui un test dell'esperienza e controlla di vedere ogni secondo visualizzato nella finestra di Output.
Assegna medaglie ai giocatori
Per finire, utilizza un'istruzione if con condizioni multiple per assegnare ai giocatori una diversa medaglia premio in base alla loro performance. Usa un'istruzione if e due istruzioni elseif per controllare il tempo di completamento del giocatore e assegnargli la medaglia corretta.
Per confermare che ciascuna medaglia possa essere assegnata, usa delle istruzioni di stampa.
local function finish()raceActive = falseprint("Hai finito in " .. timePassed)endPer assegnare una medaglia d'oro, codifica un'istruzione if che confronta timePassed con il tempo di completamento desiderato. Questo esempio controlla se il tempo del giocatore è stato inferiore o uguale a 10 secondi.
local function finish()raceActive = falseprint("Hai finito in " .. timePassed)if timePassed <= 10 thenprint("Ricevi una medaglia d'oro!")endendEsegui un test e conferma che la medaglia d'oro possa essere assegnata.
Aggiungi condizioni aggiuntive
Ora che hai testato per la medaglia d'oro, codifica le condizioni per le altre medaglie utilizzando la parola chiave elseif.
Per la medaglia d'argento, usa elseif e il successivo intervallo di tempo desiderato. In questo esempio, l'intervallo è maggiore di 10 secondi ma minore o uguale a 20 secondi.
local function finish()raceActive = falseprint("Hai finito in " .. timePassed)if timePassed <= 10 thenprint("Ricevi una medaglia d'oro!")elseif timePassed > 10 and timePassed <= 20 thenprint("Ricevi una medaglia d'argento!")endendUsa lo stesso schema per la medaglia di bronzo. Controlla il tuo codice con l'esempio qui sotto.
local function finish()raceActive = falseprint("Hai finito in " .. timePassed)if timePassed <= 10 thenprint("Ricevi una medaglia d'oro!")elseif timePassed > 10 and timePassed <= 20 thenprint("Ricevi una medaglia d'argento!")elseif timePassed > 20 and timePassed <= 30 thenprint("Ricevi una medaglia di bronzo!")endendEsegui un test per le medaglie d'argento e di bronzo.
Suggerimenti per la risoluzione dei problemi
Se non vedi apparire le medaglie d'argento e di bronzo, prova uno dei seguenti suggerimenti.
- Ogni elseif dovrebbe avere un then dopo la sua condizione.
- In partTouched(), assicurati che la seconda condizione dell'istruzione if utilizzi ==, come in raceActive == true.
- Controlla che ogni elseif sia in ambito. Ogni condizione elseif deve trovarsi tra la prima riga dell'istruzione if/then e il suo ultimo end.
Aggiungi la condizione else
Se il giocatore non ha guadagnato alcuna medaglia, dovresti incoraggiarlo a riprovare. In questo caso, puoi usare un'istruzione else, che viene eseguita se nessuna altra condizione è vera, per mostrare loro un messaggio.
Sotto l'ultimo elseif e sopra end, inizia una nuova riga e digita else. Non aggiungere then. Sotto else, utilizza un'istruzione di stampa per invitarli a riprovare.
local function finish()raceActive = falseprint("Hai finito in " .. timePassed)if timePassed <= 10 thenprint("Ricevi una medaglia d'oro!")elseif timePassed > 10 and timePassed <= 20 thenprint("Ricevi una medaglia d'argento!")elseif timePassed > 20 and timePassed <= 30 thenprint("Ricevi una medaglia di bronzo!")elseprint("Riprova!")endendEsegui un test per vedere il messaggio else.
Riepilogo
Le strutture di controllo possono avere più di uno scenario. Usa le istruzioni if per impostare l'istruzione iniziale da controllare e poi aggiungi quante più condizioni elseif necessario. Infine, utilizza else per dichiarare cosa dovrebbe succedere se tutte le condizioni fornite sono false.
Partendo dall'inizio, tutte le condizioni verranno verificate, e solo la prima condizione vera eseguirà il codice. Le condizioni rimanenti non verranno controllate né il loro codice verrà eseguito.
Dopo aver completato il progetto, puoi espandere lo script per aggiungere nuovi elementi in diversi modi.
- Aggiungi codice in modo che i giocatori possano ripetere la gara toccando la linea di partenza quando terminano.
- Progetta un modo per visualizzare il tempo durante una gara. Puoi mostrare il tempo su una parte utilizzando una Surface GUI, come nel Tutorial per creare un ponte a tempo.
Script completato
local timePassed = 0
local finishLine = script.Parent
-- Usato per impedire a finish() e al timer di ripetersi quando la gara è finita
local raceActive = true
-- Viene eseguito quando il giocatore tocca la linea di arrivo e mostra loro un premio
local function finish()
raceActive = false
print("Hai finito in " .. timePassed)
if timePassed <= 10 then
print("Ricevi una medaglia d'oro!")
elseif timePassed > 10 and timePassed <= 20 then
print("Ricevi una medaglia d'argento!")
elseif timePassed > 20 and timePassed <= 30 then
print("Ricevi una medaglia di bronzo!")
else
print("Riprova!")
end
end
-- Controlla se un giocatore tocca la parte quando la gara è attiva
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)
-- Tiene traccia del tempo della gara mentre la gara è attiva. Deve essere in fondo allo script.
while raceActive == true do
task.wait(1)
timePassed += 1
print(timePassed)
end