En el ejercicio anterior, creaste un buen punto de partida para CalculateDamage()
, pero el cuerpo de la función contiene constantes y variables que funcionarían mejor como parámetros. A modo de recordatorio, la función ahora se ve de la siguiente manera
CalculateDamage() : float =
MinHealth : float = 1.0
PotionDamageAmount : float = 80.0
var PlayerHealth : float = 100.0
# Si la cantidad de daño no eliminaría al jugador, inflige esa cantidad de daño
if (PlayerHealth > PotionDamageAmount):
return PotionDamageAmount
else if (PlayerHealth > MinHealth):
# Otorga al jugador una oportunidad adicional si su nivel de vida es bajo
return PlayerHealth - MinHealth
else:
# Elimina al jugador
return PlayerHealth
Tu versión actualizada de la función tomará tres parámetros:
PlayerHealth
: la vida actual del jugadorDesiredDamageAmount
: la cantidad máxima de daño que se le puede infligir al jugadorMinHealth
: la vida que el jugador debería tener siDesiredDamageAmount
redujera su estado a0.0
o menos.
Actualiza la función para que coincida con lo siguiente:
CalculateDamage(PlayerHealth : float, DesiredDamageAmount : float, MinHealth : float) : float =
# Si la cantidad de daño no eliminaría al jugador, inflige esa cantidad de daño
if (PlayerHealth > DesiredDamageAmount):
return DesiredDamageAmount
else if (PlayerHealth > MinHealth):
# Otorga al jugador una oportunidad adicional si su nivel de vida es bajo
return PlayerHealth - MinHealth
else:
# Elimina al jugador
return PlayerHealth
¡Genial! Tu función ahora calcula el daño que tu jugador debe recibir cuando se dan tres parámetros, en vez de usar las variables y constantes declaradas dentro de la función.
En este punto, quizás veas un subrayado rojo debajo de ()
en tu llamada a CalculateDamage()
en HurtPlayer()
. Esto es porque actualizaste la declaración de CalculateDamage()
para que requiera 3 parámetros, pero no pasarás ningún argumento en la llamada a CalculateDamage()
. Lo arreglarás en los próximos pasos.
-
Antes de pasar un argumento desde
PlayerHealth
aCalculateDamage()
, debes saber cómo está la vida del personaje. Para eso, utilizarás el métodoGetHealth()
. Lo llamarás de la misma manera queDamage()
yHeal()
, pero devolverá un valor que necesitas guardar dentro de tu funciónHurtPlayer()
.HurtPlayer() : void = Playspace : fort_playspace = GetPlayspace() AllPlayers : []player = Playspace.GetPlayers() if (FirstPlayer : player = AllPlayers[0]): if (FortniteCharacter : fort_character = FirstPlayer.GetFortCharacter[]): MyCharacterHealth : float = FortniteCharacter.GetHealth() DamageToDo: float = CalculateDamage() Print("Daño por causar: {DamageToDo}") FortniteCharacter.Damage(DamageToDo)
-
Para el segundo parámetro en
CalculateDamage()
, necesitarás un parámetro deHurtPlayer()
. Ahora crearás ese parámetro. Añade un parámetrofloat
llamadoDamageAmount
.HurtPlayer()
debería verse de la siguiente manera:HurtPlayer(DamageAmount : float) : void = Playspace: fort_playspace = GetPlayspace() AllPlayers: []player = Playspace.GetPlayers() if (FirstPlayer : player = AllPlayers[0]): if (FortniteCharacter : fort_character = FirstPlayer.GetFortCharacter[]): MyCharacterHealth : float = FortniteCharacter.GetHealth() DamageToDo : float = CalculateDamage() Print("Daño por causar: {DamageToDo}") FortniteCharacter.Damage(DamageToDo)
-
Ahora ya tienes los tres argumentos listos para que los agregues a
CalculateDamage()
.MyCharacterHealth
para el parámetroPlayerHealth
DamageAmount
para el parámetroDesiredDamageAmount
1.0
para el parámetroMinHealth
HurtPlayer()
deberá verse de la siguiente manera y ya no deberías tener más errores:
HurtPlayer(DamageAmount : float) : void =
Playspace: fort_playspace = GetPlayspace()
AllPlayers: []player = Playspace.GetPlayers()
if (FirstPlayer : player = AllPlayers[0]):
if (FortniteCharacter : fort_character = FirstPlayer.GetFortCharacter[]):
MyCharacterHealth : float = FortniteCharacter.GetHealth()
DamageToDo : float = CalculateDamage(MyCharacterHealth, DamageAmount, 1.0)
Print("Daño por causar: {DamageToDo}")
FortniteCharacter.Damage(DamageToDo)
Llama a HurtPlayer()
varias veces para ver los distintos efectos que tiene, dependiendo del estado de salud del jugador.
¿Y qué dices de la función HealPlayer()
? ¿Se te ocurren formas de actualizarla ahora que sabes cómo usar parámetros?
Existe un método más que puede ser útil. Se denomina SetMaxHealth()
, y se llama de la misma forma que Damage()
, Heal()
y GetHealth()
. Fíjate si puedes usar SetMaxHealth()
y todo lo demás que sabes sobre los parámetros y funciones para actualizar la función HealPlayer()
. Piensa en lo que puede ser interesante o entretenido para el jugador.
Secuencia de comandos completa
using { /Fortnite.com/Devices }
using { /Fortnite.com/Characters }
using { /Fortnite.com/Playspaces }
using { /Verse.org/Simulation }
using { /Verse.org/Verse }
hello_world_device := class(creative_device):
# Se ejecuta cuando el dispositivo se inicia en un juego en ejecución
OnBegin<override>()<suspends>:void=
HurtPlayer(80.0)
Print("Jugador herido")
CalculateDamage(PlayerHealth : float, DesiredDamageAmount : float, MinHealth : float) : float =
# Si la cantidad de daño no eliminaría al jugador, inflige esa cantidad de daño
if (PlayerHealth > DesiredDamageAmount):
return DesiredDamageAmount
else if (PlayerHealth > MinHealth):
# Otorga al jugador una oportunidad adicional si su nivel de vida es bajo
return PlayerHealth - MinHealth
else:
# Elimina al jugador
return PlayerHealth
HurtPlayer(DamageAmount : float) : void =
Playspace: fort_playspace = GetPlayspace()
AllPlayers: []player = Playspace.GetPlayers()
if (FirstPlayer : player = AllPlayers[0]):
if (FortniteCharacter : fort_character = FirstPlayer.GetFortCharacter[]):
MyCharacterHealth : float = FortniteCharacter.GetHealth()
DamageToDo : float = CalculateDamage(MyCharacterHealth, DamageAmount, 1.0)
FortniteCharacter.Damage(DamageToDo)
Print("{DamageToDo} daño producido al jugador")
HealPlayer(HealAmount : float) : void =
Playspace: fort_playspace = GetPlayspace()
AllPlayers: []player = Playspace.GetPlayers()
if (FirstPlayer : player = AllPlayers[0]):
if (FortniteCharacter : fort_character = FirstPlayer.GetFortCharacter[]):
FortniteCharacter.Heal(HealAmount)