Múltiples condiciones

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

Las estructuras de control pueden tener más de una condición. Las palabras clave else y elseif pueden crear escenarios adicionales para lo que debería suceder bajo varias condiciones. La sintaxis se ve así:

Muestra la sintaxis para elseif y else
if isGreen then
print("Ve")
elseif isYellow then
print("Lento")
elseif isPedestrians then
print("Espera")
else
print("detente")
end

En este proyecto, else y elseif se utilizan para codificar un curso de parkour donde los corredores reciben premios dependiendo de su tiempo de finalización.

Codificar múltiples condiciones

Para este proyecto, podrías escribir una declaración if única para cada medalla que se otorgue a los jugadores, pero eso lleva mucho tiempo. Toma, por ejemplo, el código imaginario a continuación.

Todas las declaraciones if
if finishTime < 5 then
-- Obtener una medalla de oro
end
if finishTime >= 5 and <= 10 then
-- Obtener una medalla de plata
end
if finishTime > 10 and <= 15 then
-- Obtener una medalla de bronce
end

Una forma más legible y eficiente de codificar esto es usar una sola declaración if y usar la palabra clave elseif para proporcionar condiciones alternativas para probar si las condiciones anteriores no son verdaderas.

Usa elseif y else
if finishTime < 5 then
-- Obtener una medalla de oro
elseif finishTime >= 5 and <= 10 then
-- Obtener una medalla de plata
elseif finishTime > 10 and <= 15 then
-- Obtener una medalla de bronce
end

Cuando se ejecuta la declaración if/then, comenzará en la parte superior y solo ejecutará el código para la primera condición verdadera que encuentre.

Configurar el curso de la carrera

Comienza colocando el punto de partida del curso y la línea de meta, y luego crea un script para cronometrar al jugador y otorgar diferentes medallas.

  1. 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
  2. En FinishLine, inserta un script llamado RaceManager. Luego, agrega 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.Parent
    local timePassed = 0
  3. Crea una función llamada finish().

    local timePassed = 0
    local finishLine = script.Parent
    local function finish()
    end
  4. Por 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 ejemplo a continuación.
    local function finish()
    print("tocó la línea de meta")
    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. Prueba el juego y verifica que finish() se llame cuando toques 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() solo se llame una vez.

  1. Crea una nueva variable llamada raceActive y configúrala en true.

    local timePassed = 0
    local finishLine = script.Parent
    local raceActive = true
    -- Se ejecuta cada vez que el jugador toca la parte de la línea de meta
    local function finish()
  2. Agrega una segunda condición a la declaración if para verificar si raceActive es verdadero antes de llamar a finish().

    local function partTouched(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid and raceActive == true then
    finish()
    end
    end
  3. Para evitar que finish() se llame nuevamente, establece raceActive en false.

    local function finish()
    print("tocó la línea de meta")
    raceActive = false
    end
  4. Prueba tu juego 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 usando un bucle while true do que solo se ejecute cuando el booleano raceActive sea verdadero.

  1. En la parte inferior del script, escribe while raceActive == true do. Presiona Enter para autocompletar y agregar el end.

    finishLine.Touched:Connect(partTouched)
    while raceActive == true do
    end
  2. Para cronometrar a los jugadores, en el bucle, agrega 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 do
    task.wait(1)
    timePassed += 1
    print(timePassed)
    end
  3. Prueba el juego y verifica que veas cada segundo mostrado en la ventana de Salida.

Otorgar medallas a los jugadores

Para finalizar, usa una declaración if con múltiples condiciones para otorgar a los jugadores una medalla de premio diferente según su rendimiento. Usa una declaración if y dos declaraciones elseif para verificar el tiempo de finalización del jugador y otorgarles la medalla correcta.

  1. Para confirmar que cada medalla se puede otorgar, usa declaraciones de impresión.

    local function finish()
    raceActive = false
    print("Terminaste en " .. timePassed)
    end
  2. Para 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 = false
    print("Terminaste en " .. timePassed)
    if timePassed <= 10 then
    print("¡Obtienes una medalla de oro!")
    end
    end
  3. Prueba 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 usando la palabra clave elseif.

  1. Para la medalla de plata, usa elseif y el siguiente rango de tiempo deseado. En este ejemplo, el rango es mayor a 10 segundos pero menor o igual a 20 segundos.

    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!")
    end
    end
  2. Usa el mismo patrón para la medalla de bronce. Verifica tu código con el ejemplo a continuación.

    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!")
    end
    end
  3. Prueba para las medallas de plata y bronce.

Consejos de solución de problemas

Si no ves aparecer las medallas de plata y bronce, prueba una de las siguientes opciones.

  • 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. Cada condición 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 alentarlo 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.

  1. Debajo del último elseif y encima de end, comienza una nueva línea y escribe else. No agregues then. Debajo de else, usa una declaración de impresión para alentarlos a intentarlo de nuevo.

    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("¡Inténtalo de nuevo!")
    end
    end
  2. Prueba 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 verificar, 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 verificarán todas las condiciones, y solo la primera condición verdadera ejecutará el código. Las condiciones restantes no se verificarán, ni se ejecutará su código.

Después de terminar el proyecto, puedes expandir el script para agregar nuevos elementos de varias maneras adicionales.

  • 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 usando una GUI de Superficie, como en el Tutorial de 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 les 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("¡Inténtalo de nuevo!")
end
end
-- Verifica 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. Necesita estar en la parte inferior del script.
while raceActive == true do
task.wait(1)
timePassed += 1
print(timePassed)
end
©2026 Roblox Corporation. Roblox, el logotipo de Roblox y "Powering Imagination" son algunas de nuestras marcas registradas y no registradas en los Estados Unidos y otros países.