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
PotionType
es igual a otra cadena. Cuando preguntas siPotionType
es 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ámalaMaxHealth
y establécela en100.0
.MaxHealth: float = 100.0
Si el valor de
PlayerHealth
supera el valor deMaxHealth
cuando un jugador bebe la poción curativa, tendrás que establecerPlayerHealth
enMaxHealth
.# 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 = MaxHealth
Ten en cuenta que el código de arriba tiene
and
para preguntar siPotionType
es igual a"heal"
y si el valor dePlayerHealth + PotionAmount
es 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.0
o 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}")