Las estructuras de control pueden tener más de una condición. Las palabras clave else y elseif pueden crear escenarios adicionales sobre lo que debería suceder bajo varias condiciones. La sintaxis es la siguiente:
Muestra la sintaxis para elseif y elseif isGreen thenprint("Ve")elseif isYellow thenprint("Lento")elseif isPedestrians thenprint("Espera")elseprint("detente")end
En este proyecto, se utilizan else y elseif para codificar un curso de parkour donde los corredores reciben premios dependiendo de su tiempo de finalización.

Código de múltiples condiciones
Para este proyecto, podrías escribir una declaración if única para cada medalla para premiar a los jugadores, pero eso lleva mucho tiempo. Toma, por ejemplo, el siguiente código imaginario.
Todas las declaraciones ifif finishTime < 5 then-- Obtener una medalla de oroendif finishTime >= 5 and <= 10 then-- Obtener una medalla de plataendif finishTime > 10 and <= 15 then-- Obtener una medalla de bronceend
Una forma más legible y eficiente de codificar esto es usar una sola declaración if y utilizar la palabra clave elseif para proporcionar condiciones alternativas a evaluar si las condiciones anteriores no son verdaderas.
Usa elseif y elseif finishTime < 5 then-- Obtener una medalla de oroelseif finishTime >= 5 and <= 10 then-- Obtener una medalla de plataelseif finishTime > 10 and <= 15 then-- Obtener una medalla de bronceend
Cuando se ejecuta la declaración if/then, comienza en la parte superior y solo ejecuta el código para la primera condición verdadera que encuentra.
Configurar el curso de la carrera
Comienza colocando el punto de inicio del curso y la línea de meta, y luego crea un script para cronometrar al jugador y otorgar diferentes medallas.
Crea una parte anclada llamada FinishLine. Para hacer las pruebas más rápidas, coloca el inicio y el final cerca uno del otro. Puedes mover la línea de meta después de terminar el script.

Parte de Meta 
Curso Completo En FinishLine, inserta un script llamado RaceManager. Luego, añade una variable para almacenar cuántos segundos han pasado desde que comenzó la carrera y una segunda variable para hacer referencia a FinishLine.
local finishLine = script.Parentlocal timePassed = 0Crea una función llamada finish().
local timePassed = 0local finishLine = script.Parentlocal function finish()endPor tu cuenta:
- Codifica una función llamada partTouched() que ejecute finish() cuando un jugador la toque.
- Conecta la parte de la línea de meta a partTouched().
- Compara tu código con el siguiente ejemplo.
local function finish()print("tocó la línea de meta")endlocal function partTouched(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenfinish()endendfinishLine.Touched:Connect(partTouched)Prueba y verifica que finish() se llama cuando tocas la línea de meta.
Evitar que finish() se repita
En este momento, cada vez que un jugador toca la línea de meta, finish() se llama continuamente mientras el jugador toque la parte.
Usa un booleano, una variable que almacena verdadero o falso, para asegurarte de que finish() se llame solo una vez.
Crea una nueva variable llamada raceActive y configúrala en true.
local timePassed = 0local finishLine = script.Parentlocal raceActive = true-- Se ejecuta cada vez que el jugador toca la parte de la línea de metalocal function finish()Añade una segunda condición a la declaración if para comprobar si raceActive es verdadero antes de llamar a finish().
local function partTouched(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and raceActive == true thenfinish()endendPara evitar que finish() se llame nuevamente, establece raceActive en false.
local function finish()print("tocó la línea de meta")raceActive = falseendPrueba tu experiencia para verificar que solo veas tu declaración de impresión de prueba una vez.
Llevar un registro del tiempo
Al igual que una declaración if, un bucle while también puede usar una condición para ver si debe ejecutarse. Para cronometrar al jugador, crea un temporizador utilizando un bucle while true do que solo se ejecuta cuando el booleano raceActive es verdadero.
Al final del script, escribe while raceActive == true do. Presiona Enter para autocompletar y añade el end.
finishLine.Touched:Connect(partTouched)while raceActive == true doendPara cronometrar a los jugadores, dentro del bucle, añade 1 a la variable timePassed una vez cada segundo. Incluye una declaración de impresión para probar tu trabajo.
finishLine.Touched:Connect(partTouched)while raceActive == true dotask.wait(1)timePassed += 1print(timePassed)endPrueba la experiencia y verifica que veas cada segundo mostrado en la ventana de Salida.
Otorgar medallas a los jugadores
Para finalizar, utiliza una declaración if con múltiples condiciones para otorgar a los jugadores una medalla de premio diferente según su desempeño. Usa una declaración if y dos declaraciones elseif para verificar el tiempo de finalización del jugador y otorgarles la medalla correcta.
Para confirmar que cada medalla puede ser otorgada, utiliza declaraciones de impresión.
local function finish()raceActive = falseprint("Terminaste en " .. timePassed)endPara otorgar una medalla de oro, codifica una declaración if que compare timePassed con el tiempo de finalización deseado. Este ejemplo verifica si el tiempo del jugador fue menor o igual a 10 segundos.
local function finish()raceActive = falseprint("Terminaste en " .. timePassed)if timePassed <= 10 thenprint("¡Obtienes una medalla de oro!")endendPrueba y confirma que se puede otorgar la medalla de oro.
Agregar condiciones adicionales
Ahora que has probado la medalla de oro, codifica condiciones para las otras medallas utilizando la palabra clave elseif.
Para la medalla de plata, utiliza elseif y el siguiente rango de tiempo deseado. En este ejemplo, el rango es mayor que 10 segundos pero menor o igual a 20 segundos.
local function finish()raceActive = falseprint("Terminaste en " .. timePassed)if timePassed <= 10 thenprint("¡Obtienes una medalla de oro!")elseif timePassed > 10 and timePassed <= 20 thenprint("¡Obtienes una medalla de plata!")endendUsa el mismo patrón para la medalla de bronce. Revisa tu código con el siguiente ejemplo.
local function finish()raceActive = falseprint("Terminaste en " .. timePassed)if timePassed <= 10 thenprint("¡Obtienes una medalla de oro!")elseif timePassed > 10 and timePassed <= 20 thenprint("¡Obtienes una medalla de plata!")elseif timePassed > 20 and timePassed <= 30 thenprint("¡Obtienes una medalla de bronce!")endendPrueba para las medallas de plata y bronce.
Consejos para solucionar problemas
Si no ves que aparecen las medallas de plata y bronce, intenta una de las siguientes.
- Cada elseif debe tener un then después de su condición.
- En partTouched(), asegúrate de que la segunda condición de la declaración if use ==, como en raceActive == true.
- Verifica que cada elseif esté en el alcance adecuado. Cada condición de elseif debe estar entre la primera línea de la declaración if/then y su último end.
Agregar la condición else
Si el jugador no ganó ninguna de las medallas, deberías animarlo a intentarlo de nuevo. En este caso, puedes usar una declaración else, que se ejecuta si ninguna otra condición es verdadera, para mostrarles un mensaje.
Debajo del último elseif y sobre end, inicia una nueva línea y escribe else. No añadas then. Debajo de else, usa una declaración de impresión para animarles a intentarlo de nuevo.
local function finish()raceActive = falseprint("Terminaste en " .. timePassed)if timePassed <= 10 thenprint("¡Obtienes una medalla de oro!")elseif timePassed > 10 and timePassed <= 20 thenprint("¡Obtienes una medalla de plata!")elseif timePassed > 20 and timePassed <= 30 thenprint("¡Obtienes una medalla de bronce!")elseprint("¡Intenta de nuevo!")endendPrueba para ver el mensaje else.
Resumen
Las estructuras de control pueden tener más de un escenario. Usa declaraciones if para configurar la declaración inicial a comprobar, y luego agrega tantas condiciones elseif como sea necesario. Finalmente, usa else para indicar lo que debería suceder si todas las condiciones dadas son falsas.
Comenzando desde la parte superior, se comprobarán todas las condiciones, y solo se ejecutará la primera condición verdadera. Las condiciones restantes no serán verificadas, ni su código se ejecutará.
Después de finalizar el proyecto, puedes ampliar el script para agregar nuevos elementos de varias maneras.
- Agrega código para que los jugadores puedan repetir la carrera tocando la línea de inicio cuando terminen.
- Diseña una forma de mostrar el tiempo durante una carrera. Puedes mostrar el tiempo en una parte utilizando una Surface GUI, como en el tutorial Crear un puente cronometrado.
Script completado
local timePassed = 0
local finishLine = script.Parent
-- Usado para evitar que finish() y el temporizador se repitan cuando la carrera ha terminado
local raceActive = true
-- Se ejecuta cuando el jugador toca la línea de meta y muestra un premio
local function finish()
raceActive = false
print("Terminaste en " .. timePassed)
if timePassed <= 10 then
print("¡Obtienes una medalla de oro!")
elseif timePassed > 10 and timePassed <= 20 then
print("¡Obtienes una medalla de plata!")
elseif timePassed > 20 and timePassed <= 30 then
print("¡Obtienes una medalla de bronce!")
else
print("¡Intenta de nuevo!")
end
end
-- Comprueba si un jugador toca la parte cuando la carrera está activa
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)
-- Lleva un registro del tiempo de carrera mientras la carrera está activa. Debe estar en la parte inferior del script.
while raceActive == true do
task.wait(1)
timePassed += 1
print(timePassed)
end