Le strutture di controllo possono avere più di una condizione. Le parole chiave else ed elseif possono creare scenari aggiuntivi per ciò che dovrebbe accadere sotto diverse condizioni. La sintassi è la seguente:
if isGreen then
print("Vai")
elseif isYellow then
print("Lento")
elseif isPedestrians then
print("Aspetta")
else
print("fermati")
endIn questo progetto, else ed elseif vengono utilizzati per codificare un percorso di parkour in cui i corridori ricevono premi a seconda del loro tempo di completamento.

Codifica condizioni multiple
Per questo progetto, potresti scrivere un'istruzione if unica per ogni medaglia da assegnare ai giocatori, ma ciò richiede molto tempo. Prendi, ad esempio, il codice immaginario qui sotto.
if finishTime < 5 then
-- Ottieni una medaglia d'oro
end
if finishTime >= 5 and <= 10 then
-- Ottieni una medaglia d'argento
end
if finishTime > 10 and <= 15 then
-- Ottieni una medaglia di bronzo
endUn 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.
if finishTime < 5 then
-- Ottieni una medaglia d'oro
elseif finishTime >= 5 and <= 10 then
-- Ottieni una medaglia d'argento
elseif finishTime > 10 and <= 15 then
-- Ottieni una medaglia di bronzo
endQuando l'istruzione if/then viene eseguita, inizierà dall'alto e eseguirà solo il codice per la prima condizione vera che trova.
Imposta 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 completato lo script.

Parte di Arrivo 
Intero Percorso In FinishLine, inserisci uno script chiamato RaceManager. Quindi, 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 la 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)Fai un test di gioco e controlla che finish() venga chiamato quando tocchi la linea di arrivo.
Impedire che finish() venga ripetuto
In questo momento, ogni volta che un giocatore tocca la linea di arrivo, finish() viene continuamente chiamato finché il giocatore tocca la parte.
Usa un booleano, una variabile che memorizza vero o falso, per garantire 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 eseguito 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 finish() dal essere chiamato di nuovo, imposta raceActive su false.
local function finish()print("toccato la linea di arrivo")raceActive = falseendFai un test di gioco per controllare che vedi la tua istruzione di stampa di test solo una 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 aggiungere 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)endFai un test di gioco e controlla che vedi ogni secondo visualizzato nella finestra Output.
Assegna medaglie ai giocatori
Per finire, utilizza un'istruzione if con più condizioni per assegnare ai giocatori una medaglia premio diversa in base alla loro performance. Usa un'istruzione if e due istruzioni elseif per controllare il tempo di completamento del giocatore e assegnare loro la medaglia corretta.
Per confermare che ogni medaglia possa essere assegnata, utilizza 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!")endendFai un test di gioco 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!")endendFai un test di gioco 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 nessuna delle medaglie, dovresti incoraggiarlo a riprovare. In questo caso, puoi utilizzare 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("Riprovare!")endendFai un test di gioco 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, quindi aggiungi quante più condizioni elseif necessarie. Infine, usa else per dichiarare cosa dovrebbe accadere se tutte le condizioni date sono false.
Iniziando dall'alto, tutte le condizioni verranno controllate 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 alcuni modi extra.
- Aggiungi codice in modo che i giocatori possano ripetere la gara toccando la linea di partenza quando finiscono.
- Progetta un modo per visualizzare il tempo durante una gara. Puoi visualizzare il tempo su una parte utilizzando una Surface GUI, come nel Tutorial per creare un ponte a tempo.
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("Riprovare!")
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)
-- Tieni traccia del tempo di gara mentre la gara è attiva. Deve essere in fondo allo script.
while raceActive == true do
task.wait(1)
timePassed += 1
print(timePassed)
end