Vuelve a tu código de poción mágica del último ejercicio. La idea es ejecutar el código de curación cuando el jugador beba una poción curativa, y el de daño cuando beba una poción de daño.
Primero escribes algo de código...
-
Sonido como si tuvieras que responder a una pregunta sobre el tipo de poción, así que puedes crear una nueva variable para tenerlo en cuenta, una cadena (cadena) llamada
PotionType.var PotionType: string = "curar" -
Ahora puedes preguntar si la variable
PotionTypees igual a otra cadena. Cuando preguntes siPotionTypees igual a"curar", la respuesta será sí. Entonces se ejecutaría el código de curación.if (PotionType = "curar"): set PlayerHealth = PlayerHealth + PotionHealAmount -
Escribe ahora una expresión if similar para el código de daño.
if (PotionType = "dañar"): set PlayerHealth = PlayerHealth - PotionDamageAmount¡Un momento! Hay un problema con el código de curación.
Nada impide que un jugador siga aumentando su salud con pociones. Es una buena idea limitarlo, ¡y ahora puedes hacerlo con
if! -
Primero, declara una nueva constante de tipo
float. LlámalaMaxHealthy establécela en100.0.MaxHealth: float = 100.0Si el valor de
PlayerHealthsuperara el valor deMaxHealthcuando un jugador bebiera la poción curativa, tendrás que establecerPlayerHealthenMaxHealth.# Código para ejecutar si el jugador bebe una poción curativa # Si la salud del jugador no superara la MaxHealth si se cura, # cúrale la cantidad total if (PotionType = "curar" and (PlayerHealth + PotionHealAmount) < MaxHealth): set PlayerHealth = PlayerHealth + PotionHealAmount else: set PlayerHealth = MaxHealthObserva que el código anterior tiene un
andpara preguntar siPotionTypees igual a"curar"y siPlayerHealth + PotionAmountes menor queMaxHealth. Ambas condiciones deben cumplirse para que PlayerHealth aumente en PotionHealAmount.Puede que a alguien que lea este código no le quede claro que su objetivo es evitar que PlayerHealth supere MaxHealth. Ahí es donde entran los comentarios de código. Observa las tres líneas de comentarios sobre el 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 fuera0,0o menos, queremos que PlayerHealth sea1,0. Si PlayerHealth ya es1,0, luego lo ponemos (definimos) a0,0. Esto enseña al jugador que la poción es dañina sin castigarlo demasiado.# Código para ejecutar si el jugador bebe una poción dañina # No elimines al jugador si su salud está por encima de MinHealth pero por debajo de PotionDamageAmount # Si ya está por debajo de MinHealth, elimínalo if (PotionType = "daño" and PlayerHealth > PotionDamageAmount): set PlayerHealth = PlayerHealth - PotionDamageAmount else if (PlayerHealth > MinHealth): # Dar al jugador una oportunidad más si su salud es baja set PlayerHealth = 1.0 else: set PlayerHealth = 0.0
... Luego encuentras el error
A continuación encontrarás todo el código de este ejercicio, con algunas llamadas a la función Print() añadidas para probar. Prueba a ejecutar este código. Puedes cambiar las llamadas a Print() por lo que quieras. Con la variable PotionType inicializada en “curar”, solo debería ejecutarse el código de curación.
Pero espera, ¡hay un error!
Ejecuta el código que aparece a continuación y comprueba si puedes encontrarlo.
MaxHealth: float = 100.0
MinHealth: float = 1.0
var PotionType: string = "curar"
# Código para ejecutar si el jugador bebe una poción curativa
# Si la salud del jugador no superara la MaxHealth si se cura,
# cúrale la cantidad total
if (PotionType = "curar" and (PlayerHealth + PotionHealAmount) < MaxHealth):
set PlayerHealth = PlayerHealth + PotionHealAmount
Print ("Curación total")
else:
# En caso contrario, establece PlayerHealth como MaxHealth
set PlayerHealth = MaxHealth
Print("La salud del jugador es demasiado alta para una curación total")
# Código para ejecutar si el jugador bebe una poción dañina
# No elimines al jugador si su salud está por encima de MinHealth pero por debajo de PotionDamageAmount
# Si ya está por debajo de MinHealth, elimínalo
if (PotionType = "daño" and PlayerHealth > PotionDamageAmount):
set PlayerHealth = PlayerHealth - PotionDamageAmount
Print("Daño total")
else if (PlayerHealth > MinHealth):
# Dar al jugador una oportunidad más si su salud es baja
set PlayerHealth = 1.0
Print("La salud del jugador está fijada en 1,0")
else:
# Eliminar al jugador
set PlayerHealth = 0.0
Print("¡Jugador eliminado!")
Si PotionType se establece en curar, solo se ejecutará el código de curación. Sin embargo, las expresiones if ... else if ... if del código dañado se siguen ejecutando. Esto significa que si PlayerHealth es mayor que MinHealth, PlayerHealth se establecerá en 1,0. Esto no es lo que quieres, pero puedes arreglarlo anidando las otras comprobaciones dentro de expresiones if que solo comprueben PotionType.
# Código para ejecutar si el jugador bebe una poción curativa
# Si la salud del jugador no superara la MaxHealth si se cura,
# cúrale la cantidad total
if (PotionType = "curar"):
if ((PlayerHealth + PotionHealAmount) < MaxHealth):
set PlayerHealth = PlayerHealth + PotionHealAmount
Print ("Curación total")
else:
# establece PlayerHealth en MaxHealth
set PlayerHealth = MaxHealth
Print("La salud del jugador es demasiado alta para una curación total")
# Código para ejecutar si el jugador bebe una poción dañina
# No elimines al jugador si su salud está por encima de MinHealth pero por debajo de PotionDamageAmount
# Si ya está por debajo de MinHealth, elimínalo
if (PotionType = "dañar"):
if ((PlayerHealth > PotionDamageAmount)):
set PlayerHealth = PlayerHealth - PotionDamageAmount
Print("Daño total")
else if (PlayerHealth > MinHealth):
# Dar al jugador una oportunidad más si su salud es baja
set PlayerHealth = 1.0
Print("La salud del jugador está fijada en 1,0")
else:
# Eliminar al jugador
set PlayerHealth = 0.0
Print("¡Jugador eliminado!")
Ahora solo se ejecutará el bloque de código sangrado bajo una de las expresiones if que comprueban PotionType. Prueba este código también con PotionType configurado como "daño".
¡Uff! Son muchos cambios de código, ¡pero lo has conseguido!
Tómate un descanso, bebe una poci... esto... un poco de agua y vuelve cuando estés preparado para la siguiente lección.
Secuencia de comandos completa
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
hello_world_device := class(creative_device):
# Se ejecuta cuando se inicia el dispositivo en un juego en ejecución
OnBegin<override>()<suspends> : void =
MaxHealth : float = 100.0
MinHealth : float = 1.0
var PotionType: string = "curar"
set PlayerHealth = 80.0
# Código para ejecutar si el jugador bebe una poción curativa
# Si la salud del jugador no superara la MaxHealth si se cura,
# cúrale la cantidad total
if (PotionType = "curar"):
if ((PlayerHealth + PotionHealAmount) < MaxHealth):
set PlayerHealth = PlayerHealth + PotionHealAmount
Print ("Curación total")
else:
# En caso contrario, establece PlayerHealth como MaxHealth
set PlayerHealth = MaxHealth
Print("La salud del jugador es demasiado alta para una curación total")
# Código para ejecutar si el jugador bebe una poción dañina
# No elimines al jugador si su salud está por encima de MinHealth pero por debajo de PotionDamageAmount
# Si ya está por debajo de MinHealth, elimínalo
if (PotionType = "dañar"):
if ((PlayerHealth > PotionDamageAmount)):
set PlayerHealth = PlayerHealth - PotionDamageAmount
Print("Daño total")
else if (PlayerHealth > MinHealth):
# Dar al jugador una oportunidad más si su salud es baja
set PlayerHealth = 1.0
Print("La salud del jugador está fijada en 1,0")
else:
set PlayerHealth = 0.0
Print("¡Jugador eliminado!")
Print("La salud del jugador ahora es {PlayerHealth}")