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 thenprint("Go")elseif isYellow thenprint("Slow")elseif isPedestrians thenprint("Wait")elseprint("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 oroendif finishTime >= 5 and <= 10 then-- Consigue una medalla de plataendif finishTime > 10 and <= 15 then-- Consigue una medalla de bronceend
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 oroelseif finishTime >= 5 and <= 10 then-- Consigue una medalla de plataelseif finishTime > 10 and <= 15 then-- Consigue una medalla de bronceend
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.
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.
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.Parentlocal timePassed = 0Crea una función llamada finish().
local timePassed = 0local finishLine = script.Parentlocal function finish()endPor 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")endlocal function partTouched(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenfinish()endendfinishLine.Touched:Connect(partTouched)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.
Crea una nueva variable llamada raceActive y ponla en true.
local timePassed = 0local finishLine = script.Parentlocal raceActive = true-- Corre cada vez que el jugador toca la parte de la línea de metalocal function finish()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.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and raceActive == true thenfinish()endendPara evitar que finish() sea llamado de nuevo, pon raceActive en false.
local function finish()print("touched the finish line")raceActive = falseendReproduce 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.
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 doendPara 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 dotask.wait(1)timePassed += 1print(timePassed)endJuega 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.
Para confirmar que cada medalla puede ser otorgada, use declaraciones impresas.
local function finish()raceActive = falseprint("You finished in " .. timePassed)endPara 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 = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")endendPrueba 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.
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 = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")elseif timePassed > 10 and timePassed <= 20 thenprint("You get a silver medal!")endendUsa el mismo patrón para la medalla de bronce. Comprueba tu código con el ejemplo a continuación.
local function finish()raceActive = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")elseif timePassed > 10 and timePassed <= 20 thenprint("You get a silver medal!")elseif timePassed > 20 and timePassed <= 30 thenprint("You get a bronze medal!")endendPrueba 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.
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 = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")elseif timePassed > 10 and timePassed <= 20 thenprint("You get a silver medal!")elseif timePassed > 20 and timePassed <= 30 thenprint("You get a bronze medal!")elseprint("Try again!")endend
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