Regresa al código de poción mágica del último ejercicio. Querrás volver al código de curación cuando el jugador beba una poción curativa, y al código de daños cuando beba una poción dañina.
¿Todo listo para escribir código?
-
Parece que tendrás que responder una pregunta sobre el tipo de poción, así que puedes crear una nueva variable para realizar un seguimiento de eso, una cadena llamada
PotionType.var PotionType: string = "heal" -
Ahora puedes preguntar si la variable
PotionTypees igual a otra cadena. Cuando preguntas siPotionTypees igual a"heal", la respuesta será afirmativa. El código de curación se ejecutará posteriormente.if (PotionType = "heal"): set PlayerHealth = PlayerHealth + PotionHealAmount -
Ahora escribe una expresión if similar para el código de daño.
if (PotionType = "damage"): set PlayerHealth = PlayerHealth - PotionDamageAmount¡Pero espera! Hay un problema con el código de curación.
Nada de esto impide que un jugador siga mejorando su estado con pociones. Es una buena idea restringir esto, y ahora lo puedes hacer con
if. -
Primero, declara una constante nueva del tipo
float. LlámalaMaxHealthy establécela en100.0.MaxHealth: float = 100.0Si el valor de
PlayerHealthsupera el valor deMaxHealthcuando un jugador bebe la poción curativa, tendrás que establecerPlayerHealthenMaxHealth.# Código para ejecutar si el jugador bebe una poción curativa # Si el estado del jugado no excede el valor de MaxHealth en caso de recibir curación, # cúralo en su totalidad if (PotionType = "heal" and (PlayerHealth + PotionHealAmount) < MaxHealth): set PlayerHealth = PlayerHealth + PotionHealAmount else: set PlayerHealth = MaxHealthTen en cuenta que el código de arriba tiene
andpara preguntar siPotionTypees igual a"heal"y si el valor dePlayerHealth + PotionAmountes menor queMaxHealth. Ambas condiciones tienen que ocurrir correctamente para que el valor de PlayerHealth aumente según PotionHealAmount.Es posible que para alguien que lea este código no quede claro que está previsto para evitar que el valor de PlayerHealth supere al de MaxHealth. Aquí es donde entran en juego los comentarios del código. Observa las tres líneas de comentarios arriba del código real.
-
El código de daño funciona, pero puede mejorarse con el uso de
if…else if…else. Si un jugador bebe una poción de daño que haría que PlayerHealth sea0.0o menos, nos conviene establecer PlayerHealth en1.0. Si PlayerHealth ya es1.0, entonces lo establecemos en0.0. Esto le enseña al jugador que la poción es dañina sin ser demasiado castigador.# Código para ejecutar si el jugador bebe una poción dañina # No elimines el jugador si su estado está por encima del valor de MinHealth, pero por debajo de PotionDamageAmount # Si ya está igual o por debajo de MinHealth, elimínalo if (PotionType = "damage" and PlayerHealth > PotionDamageAmount): set PlayerHealth = PlayerHealth - PotionDamageAmount else if (PlayerHealth > MinHealth): # Otorga al jugador una oportunidad adicional si su nivel de vida es bajo set PlayerHealth = 1.0 else: set PlayerHealth = 0.0
... Luego encuentras el error lógico
A continuación, encontrarás todo el código de este ejercicio, con algunas llamadas a la función Print() que se agregaron para pruebas. Prueba ejecutar este código. Puedes cambiar las llamadas a Print() según tus preferencias. Con la variable PotionType inicializada en “heal”, puedes esperar que solo se ejecute el código de curación.
Pero espera, hay un error lógico.
Ejecuta el código a continuación y analiza si puedes encontrarlo.
MaxHealth: float = 100.0
MinHealth: float = 1.0
var PotionType: string = "heal"
# Código para ejecutar si el jugador bebe una poción curativa
# Si el estado del jugado no excede el valor de MaxHealth en caso de recibir curación,
# cúralo en su totalidad
if (PotionType = "heal" and (PlayerHealth + PotionHealAmount) < MaxHealth):
set PlayerHealth = PlayerHealth + PotionHealAmount
Print ("Full heal")
else:
# else, set PlayerHealth the MaxHealth
set PlayerHealth = MaxHealth
Print("Jugador con demasiada vida para una curación completa")
# Código para ejecutar si el jugador bebe una poción dañina
# No elimines el jugador si su estado está por encima del valor de MinHealth, pero por debajo de PotionDamageAmount
# Si ya está igual o por debajo de MinHealth, elimínalo
if (PotionType = "damage" and PlayerHealth > PotionDamageAmount):
set PlayerHealth = PlayerHealth - PotionDamageAmount
Print("Daño completo")
else if (PlayerHealth > MinHealth):
# Otorga al jugador una oportunidad adicional si su nivel de vida es bajo
set PlayerHealth = 1.0
Print("PlayerHealth establecido en 1.0")
else:
# Elimina al jugador
set PlayerHealth = 0.0
Print("¡Jugador eliminado!")
Si el valor de PotionType está establecido en curar, solo debe ejecutarse el código de curación. Sin embargo, las expresiones if … else if … if en el código de daño todavía están en ejecución. Esto significa que PlayerHealth es mayor que MinHealth, el valor de PlayerHealth se establecerá en 1.0. Esto no es lo que deseas, pero puedes corregirlo si anidas las otras comprobaciones dentro de las expresiones if que solo comprueban PotionType.
# Código para ejecutar si el jugador bebe una poción curativa
# Si el estado del jugado no excede el valor de MaxHealth en caso de recibir curación,
# cúralo en su totalidad
if (PotionType = "heal"):
if ((PlayerHealth + PotionHealAmount) < MaxHealth):
set PlayerHealth = PlayerHealth + PotionHealAmount
Print ("Full heal")
else:
# set PlayerHealth the MaxHealth
set PlayerHealth = MaxHealth
Print("Jugador con demasiada vida para una curación completa")
# Código para ejecutar si el jugador bebe una poción dañina
# No elimines el jugador si su estado está por encima del valor de MinHealth, pero por debajo de PotionDamageAmount
# Si ya está igual o por debajo de MinHealth, elimínalo
if (PotionType = "damage"):
if ((PlayerHealth > PotionDamageAmount)):
set PlayerHealth = PlayerHealth - PotionDamageAmount
Print("Daño completo")
else if (PlayerHealth > MinHealth):
# Otorga al jugador una oportunidad adicional si su nivel de vida es bajo
set PlayerHealth = 1.0
Print("PlayerHealth establecido en 1.0")
else:
# Elimina al jugador
set PlayerHealth = 0.0
Print("¡Jugador eliminado!")
Ahora se ejecutará solo el bloque de código con sangría debajo de una de las expresiones if que comprueban PotionType. Prueba este código con PotionType establecido en "damage".
¡Uff! Son un montón de cambios en el código, ¡pero lo lograste!
Toma un descanso, bebe un poco de agua y regresa cuando estés listo para la próxima lección.
Secuencia de comandos completa
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
hello_world_device := class(creative_device):
# Se ejecuta cuando el dispositivo se inicia en un juego en ejecución
OnBegin<override>()<suspends> : void =
MaxHealth : float = 100.0
MinHealth : float = 1.0
var PotionType: string = "heal"
set PlayerHealth = 80.0
# Código para ejecutar si el jugador bebe una poción curativa
# Si el estado del jugado no excede el valor de MaxHealth en caso de recibir curación,
# cúralo en su totalidad
if (PotionType = "heal"):
if ((PlayerHealth + PotionHealAmount) < MaxHealth):
set PlayerHealth = PlayerHealth + PotionHealAmount
Print ("Full heal")
else:
# else, set PlayerHealth the MaxHealth
set PlayerHealth = MaxHealth
Print("Jugador con demasiada vida para una curación completa")
# Código para ejecutar si el jugador bebe una poción dañina
# No elimines el jugador si su estado está por encima del valor de MinHealth, pero por debajo de PotionDamageAmount
# Si ya está igual o por debajo de MinHealth, elimínalo
if (PotionType = "damage"):
if ((PlayerHealth > PotionDamageAmount)):
set PlayerHealth = PlayerHealth - PotionDamageAmount
Print("Daño completo")
else if (PlayerHealth > MinHealth):
# Otorga al jugador una oportunidad adicional si su nivel de vida es bajo
set PlayerHealth = 1.0
Print("PlayerHealth establecido en 1.0")
else:
set PlayerHealth = 0.0
Print("¡Jugador eliminado!")
Print("PlayerHealth actual {PlayerHealth}")