Sua função HurtPlayer()
está funcionando, mas como você está aprovando um valor literal para o método Damage()
, esse valor só pode mudar quando você alterar manualmente o código. Neste exercício, você deixará sua função HurtPlayer()
mais flexível com o valor de retorno de outra função que você criará.
Na Aula 4: Hora de praticar, você usou condicionais para calcular quanto dano ou cura deveria ser causado pelas poções, dependendo da saúde do jogador. Você vai trazer um pouco desse código de volta em uma função chamada CalculateDamage()
. Ele retornará um valor do tipo float
. Você armazenará esse valor em uma constante que passará para o método Damage()
.
-
Crie uma função chamada
CalculateDamage()
. Dentro da função, declare duas constantes do tipofloat
:MinHealth
ePotionDamageAmount
. Declare uma variável do tipofloat
chamadaPlayerHealth
.~~~(verse) CalculateDamage() : float = MinHealth : float = 1.0 PotionDamageAmount: float = 80.0 var PlayerHealth: float = 100.0 ~~~
- Crie uma expressão
if
…else if
…else
que retorne um dos três valores:PotionDamageAmount
, sePlayerHealth
for maior quePotionDamageAmount
PlayerHealth
-MinHealth
, sePlayerHealth
for menor quePotionDamageAmount
, mas maior queMinHealth
-
PlayerHealth
, sePlayerHealth
for menor ou igual aMinHealth
~~~(verse) # Se a quantidade de dano não eliminar o jogador, causar esta quantidade de dano if (PlayerHealth > PotionDamageAmount): return PotionDamageAmount else if (PlayerHealth > MinHealth): # Dar ao jogador mais uma chance se o nível de vida dele estiver baixo return PlayerHealth - MinHealth else: # Eliminar o jogador return PlayerHealth ~~~
O efeito desse código é que ele dará ao jogador uma segunda chance se ele beber uma poção que normalmente o eliminaria.
-
Agora que você criou uma função que retorna um resultado útil, precisa armazenar esse resultado. Declare uma constante
float
chamadaDamageToDo
e inicialize-a com o valor de retorno deCalculateDamage()
. Adicione isso à sua funçãoHurtPlayer()
.~~~(verse) HurtPlayer() : void = Playspace: fort_playspace = GetPlayspace() AllPlayers: []player = Playspace.GetPlayers() if (FirstPlayer : player = AllPlayers[0]): if (FortniteCharacter : fort_character = FirstPlayer.GetFortCharacter[]): DamageToDo: float = CalculateDamage() FortniteCharacter.Damage(50.0) ~~~
-
Por fim, hora de usar o resultado! Aprove
DamageToDo
como um argumento paraDamage()
. Adicione umPrint()
para que você possa ver exatamente o queCalculateDamage()
está retornando.~~~(verse) HurtPlayer() : void = Playspace: fort_playspace = GetPlayspace() AllPlayers: []player = Playspace.GetPlayers() if (FirstPlayer : player = AllPlayers[0]): if (FortniteCharacter : fort_character = FirstPlayer.GetFortCharacter[]): DamageToDo: float = CalculateDamage() Print("DamageToDo: {DamageToDo}") FortniteCharacter.Damage(DamageToDo) ~~~
Agora, em vez de sua chamada para o método Damage()
usando um valor literal, ele usa o valor retornado de CalculateDamage()
. Você já deve ter escrito a chamada para HurtPlayer()
de um exercício anterior, mas não se esqueça de verificar.
O script completo
~~~(verse) 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):
# É executado quando o dispositivo é iniciado em um jogo em execução
OnBegin
HurtPlayer() Print("Jogador ferido")
CalculateDamage() : float = MaxHealth : float = 100.0 MinHealth : float = 1.0 PotionDamageAmount: float = 80.0 var PlayerHealth: float = 100.0
# Se a quantidade de dano não eliminar o jogador, causar esta quantidade de dano if (PlayerHealth > PotionDamageAmount): return PotionDamageAmount else if (PlayerHealth > MinHealth): # Dar ao jogador mais uma chance se o nível de vida dele estiver baixo return PlayerHealth - MinHealth else: # Eliminar o jogador return PlayerHealth
HurtPlayer() : void = Playspace: fort_playspace = GetPlayspace() AllPlayers: []player = Playspace.GetPlayers() if (FirstPlayer : player = AllPlayers[0]): if (FortniteCharacter : fort_character = FirstPlayer.GetFortCharacter[]): DamageToDo: float = CalculateDamage() Print("DamageToDo: {DamageToDo}") FortniteCharacter.Damage(DamageToDo) ~~~
Por conta própria, tente criar uma função semelhante a CalculateDamage()
que retorne um resultado que seja útil para HealPlayer()
. Chegou a hora de praticar] (learn-code-basics-4-practice-time-in-verse) para ter algumas ideias.