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 de elseif y el resto

if isGreen then
print("Go")
elseif isYellow then
print("Slow")
elseif isPedestrians then
print("Wait")
else
print("stop")
end

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

Codificación de múltiples condiciones

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

Todas las declaraciones si

if finishTime < 5 then
-- Consigue una medalla de oro
end
if finishTime >= 5 and <= 10 then
-- Consigue una medalla de plata
end
if finishTime > 10 and <= 15 then
-- Consigue una medalla de bronce
end

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

Usa elseif y otro

if finishTime < 5 then
-- Consigue una medalla de oro
elseif finishTime >= 5 and <= 10 then
-- Consigue una medalla de plata
elseif finishTime > 10 and <= 15 then
-- Consigue una medalla de bronce
end

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

Configurando la pista de carreras

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

  1. Crea una parte anclada llamada FinishLine. Para hacer que las pruebas sean más rápidas, coloca el comienzo y el final juntos. Puedes mover la línea de meta después de terminar el script.

    Finalizar parte
    Todo el curso
  2. En FinishLine, inserte un script llamado RaceManager. Luego, agregue 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 en posesión:

    • Codifica una función llamada partTouched() que se ejecuta finish() cuando un jugador la toca.
    • Conecta la parte de la línea de meta a partTouched() .
    • Compara tu código con el ejemplo de abajo.

    local function finish()
    print("touched the finish line")
    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 de juego y comprueba que finish() se llame cuando toques la línea de meta.

Mantén el final () de la repetición

En este momento, cada vez que un jugador toca la línea de meta, finish() se llama continuamente mientras el jugador toque la parte.

Use un booleano , una variable que almacena verdadero o falso, para asegurarse de que finish () solo se llame una vez.

  1. Crea una nueva variable llamada raceActive y ponla en true.


    local timePassed = 0
    local finishLine = script.Parent
    local raceActive = true
    -- Corre cada vez que el jugador toca la parte de la línea de meta
    local function finish()
  2. Añade una segunda condición a la sentencia if para verificar si raceActive es verdadero antes de llamar 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() sea llamado de nuevo, pon raceActive en false.


    local function finish()
    print("touched the finish line")
    raceActive = false
    end
  4. Reproduce la prueba de tu juego para verificar que solo ve tu declaración de impresión de prueba una vez.

Haciendo un seguimiento del tiempo

Al igual que una sentencia if, un bucle while también puede usar una condición para ver si debe ejecutarse. Para cronometrar al jugador, cree 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, escriba while raceActive == true do . Presione Enter para completar automáticamente y agregar el end .


    finishLine.Touched:Connect(partTouched)
    while raceActive == true do
    end
  2. Para cronometrar a los jugadores, en el bucle, agregue 1 a la variable timePassed una vez cada segundo. Incluye una sentencia de impresión para probar tu trabajo.


    finishLine.Touched:Connect(partTouched)
    while raceActive == true do
    task.wait(1)
    timePassed += 1
    print(timePassed)
    end
  3. Juega el juego y comprueba que cada segundo se muestre en la ventana de salida.

Otorgando medallas a los jugadores

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

  1. Para confirmar que cada medalla puede ser otorgada, use declaraciones impresas.


    local function finish()
    raceActive = false
    print("You finished in " .. timePassed)
    end
  2. Para otorgar una medalla de oro, codifica una sentencia if que compara timePassed con el tiempo de finalización deseado. Este ejemplo comprueba si el tiempo del jugador fue inferior o igual a 10 segundos.


    local function finish()
    raceActive = false
    print("You finished in " .. timePassed)
    if timePassed <= 10 then
    print("You get a gold medal!")
    end
    end
  3. Prueba de juego y confirma que se puede otorgar la medalla de oro.

Añadiendo Condiciones Adicionales

Ahora que has probado para obtener la medalla de oro, codifica las 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 inferior o igual a 20 segundos.


    local function finish()
    raceActive = false
    print("You finished in " .. timePassed)
    if timePassed <= 10 then
    print("You get a gold medal!")
    elseif timePassed > 10 and timePassed <= 20 then
    print("You get a silver medal!")
    end
    end
  2. Usa el mismo patrón para la medalla de bronce. Comprueba tu código con el ejemplo a continuación.


    local function finish()
    raceActive = false
    print("You finished in " .. timePassed)
    if timePassed <= 10 then
    print("You get a gold medal!")
    elseif timePassed > 10 and timePassed <= 20 then
    print("You get a silver medal!")
    elseif timePassed > 20 and timePassed <= 30 then
    print("You get a bronze medal!")
    end
    end
  3. Prueba de juego para las medallas de plata y bronce.

Consejos para solucionar problemas

Si no ves que aparecen los metales de plata y bronce, prueba uno de los siguientes.

  • Cada elseif debería tener un entonces después de su condición.
  • En partTouched(), asegúrate de que la segunda condición de la sentencia if use ==, como en raceActive == true.
  • Comprueba que cada elseif esté dentro del alcance. Cada elseif condición debe estar entre la primera línea de la sentencia if/then y su último end.

Añadiendo la Condición Otro

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 mostrarle un mensaje.

  1. Debajo del último elseif y por encima de end, comience una nueva línea y escriba else . No agregue . Además, use una sentencia de impresión para solicitar que vuelva a intentarlo.


    local function finish()
    raceActive = false
    print("You finished in " .. timePassed)
    if timePassed <= 10 then
    print("You get a gold medal!")
    elseif timePassed > 10 and timePassed <= 20 then
    print("You get a silver medal!")
    elseif timePassed > 20 and timePassed <= 30 then
    print("You get a bronze medal!")
    else
    print("Try again!")
    end
    end

2 . Prueba de reproducción para ver el mensaje de otro.

Resumen

Las estructuras de control pueden tener más de un escenario. Use sentencias if para configurar la sentencia inicial para verificar, comprobar, y luego agregue tantas elseif condiciones como sea necesario. Finalmente, use else para especificar qué debería suceder si todas las condiciones dadas son falsas.

Comenzando en la parte superior, todas las condiciones se comprobarán, y solo la primera condición verdadera ejecutará el código. Las condiciones restantes no se comprobarán ni se ejecutará su código.

Después de terminar el proyecto, puede expandir el guión para agregar nuevos elementos de algunas formas adicionales.

  • Añade código para que los jugadores puedan repetir la carrera tocando la línea de inicio cuando terminen.
  • Diseña una manera de mostrar el tiempo durante una carrera. Puedes mostrar el tiempo en una parte usando una Interfaz gráfica (o GUI)de superficie, como en el Tutorial de creación de un puente cronometrado.
Completed script

local timePassed = 0
local finishLine = script.Parent
-- Se usa para mantener la meta () y evitar que el temporizador se repita cuando la carrera haya terminado
local raceActive = true
-- Corre cuando el jugador toca la línea de meta y le muestra un premio
local function finish()
raceActive = false
print("You finished in " .. timePassed)
if timePassed <= 10 then
print("You get a gold medal!")
elseif timePassed > 10 and timePassed <= 20 then
print("You get a silver medal!")
elseif timePassed > 20 and timePassed <= 30 then
print("You get a bronze medal!")
else
print("Try again!")
end
end
-- Comprueba si un jugador toca la parte cuando una 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)
-- Mantiene un registro del tiempo de carrera mientras la carrera está activa. Necesita estar en la parte inferior del guión.
while raceActive == true do
task.wait(1)
timePassed += 1
print(timePassed)
end