SEO-Descrição: Pratique a definição de parâmetros e argumentos para funções do Verse. Parent: learn-the-basics-of-writing-code-in-verse Order: 16 Type: tutorial Tags: programa Tags: parâmetros Tags: entrada Tags: argumentos Tags: verse Hero-image:lesson-hero.png Topic-image:lesson-topic.png Social-image:lesson-social.png Prereq: learn-code-basics-8-input-parameters-arguments-in-verse
No exercício anterior, você criou um bom ponto de partida para CalculateDamage()
, mas o corpo da função contém constantes e variáveis que funcionariam melhor como parâmetros. Como lembrete, veja a aparência de função agora:
CalculateDamage() : float =
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
~~~
Sua versão atualizada da função terá três parâmetros:
* `PlayerHealth`: a saúde atual do jogador
* `DesiredDamageAmount`: a quantidade máxima de dano que pode ser causada ao jogador
* `MinHealth`: a saúde que o jogador deveria ter se `DesiredDamageAmount` reduzisse sua saúde para `0.0` ou menos.
Atualize a função para corresponder ao seguinte:
~~~(verse)
CalculateDamage(PlayerHealth : float, DesiredDamageAmount : float, MinHealth : float) : float =
# Se a quantidade de dano não eliminar o jogador, causar esta quantidade de dano
if (PlayerHealth > DesiredDamageAmount):
return DesiredDamageAmount
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
~~~
Ótimo! Sua função agora calcula o dano que seu jogador deve receber ao receber três parâmetros, em vez de usar variáveis e constantes declaradas na função.
Neste ponto, você pode estar vendo um **rabisco vermelho** sob o `()` em sua chamada para `CalculateDamage()` em `HurtPlayer()`. Isso ocorre porque você atualizou a declaração de `CalculateDamage()` para exigir 3 parâmetros, mas não está aprovando nenhum argumento em sua chamada para `CalculateDamage()`. Isso será corrigido nas próximas etapas.
1. Antes de aprovar um argumento para `PlayerHealth` para `CalculateDamage()`, você precisa saber qual é a saúde do personagem. Para isso você utilizará o método `GetHealth()`. Você o chamará da mesma forma que `Damage()` e `Heal()`, mas retornará um valor que precisa salvar dentro de sua função `HurtPlayer()`.
~~~(verse)
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("DamageToDo: {DamageToDo}")
FortniteCharacter.Damage(DamageToDo)
~~~
1. Para o segundo parâmetro em `CalculateDamage()`, você vai precisar de um parâmetro de `HurtPlayer()`. Crie esse parâmetro agora. Adicione um parâmetro `float` chamado `DamageAmount`. `HurtPlayer()` agora deve ficar assim:
~~~(verse)
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("DamageToDo: {DamageToDo}")
FortniteCharacter.Damage(DamageToDo)
- Agora você tem todos os três argumentos prontos para adicionar a
CalculateDamage()
.MyCharacterHealth
para o parâmetroPlayerHealth
DamageAmount
para o parâmetroDesiredDamageAmount
1.0
para o parâmetroMinHealth
HurtPlayer()
deve ter a seguinte aparência, e você não deve ter mais erros:
~~~(verse) 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("Dano que será causado: {DamageToDo}") FortniteCharacter.Damage(DamageToDo)
Chame `HurtPlayer()` algumas vezes para ver os diferentes efeitos que ele tem, dependendo da saúde do jogador.
E quanto à função `HealPlayer()`? Você consegue pensar em maneiras de atualizá-lo agora que sabe como usar parâmetros?
Há mais um método que pode ser útil. Seu nome é `SetMaxHealth()` e é chamado da mesma forma que `Damage()`, `Heal()` e `GetHealth()`. Veja se você pode usar `SetMaxHealth()` e tudo mais que sabe sobre parâmetros e funções para atualizar a função `HealPlayer()`. Pense no que pode ser interessante ou divertido para o jogador.
## 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<override>()<suspends>:void=
HurtPlayer(80.0)
Print("Jogador ferido")
CalculateDamage(PlayerHealth : float, DesiredDamageAmount : float, MinHealth : float) : float =
# Se a quantidade de dano não eliminar o jogador, causar esta quantidade de dano
if (PlayerHealth > DesiredDamageAmount):
return DesiredDamageAmount
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(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} danos causados a um jogador")
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)