In der vorherigen Übung hast du einen guten Ausgangspunkt für CalculateDamage() erstellt, aber der Funktionskörper enthält Konstanten und Variablen, die besser als Parameter funktionieren würden. Zur Erinnerung, so sieht die Funktion jetzt aus:
CalculateDamage() : float =
MinHealth : float = 1.0
PotionDamageAmount : float = 80.0
var PlayerHealth : float = 100.0
# Diesen Schaden zufügen, wenn das Ausmaß des Schadens den Spieler eliminieren würde
if (PlayerHealth > PotionDamageAmount):
return PotionDamageAmount
else if (PlayerHealth > MinHealth):
# Wenn die Gesundheit des Spielers niedrig ist, soll er eine weitere Chance erhalten.
return PlayerHealth - MinHealth
else:
# Spieler eliminieren
return PlayerHealth
Die aktualisierte Version der Funktion wird drei Parameter benötigen:
PlayerHealth: Die aktuelle Gesundheit des SpielersDesiredDamageAmount: das maximale Ausmaß des Schadens, der einem Spieler zugefügt werden kannMinHealth: Die Gesundheit, die ein Spieler besitzen soll, wennDesiredDamageAmountdessen Gesundheit auf0.0oder weniger verringern würde
Ändere die Funktion so, dass sie dem Folgenden entspricht:
CalculateDamage(PlayerHealth : float, DesiredDamageAmount : float, MinHealth : float) : float =
# Diesen Schaden zufügen, wenn das Ausmaß des Schadens den Spieler eliminieren würde
if (PlayerHealth > DesiredDamageAmount):
return DesiredDamageAmount
else if (PlayerHealth > MinHealth):
# Wenn die Gesundheit des Spielers niedrig ist, soll er eine weitere Chance erhalten.
return PlayerHealth - MinHealth
else:
# Spieler eliminieren
return PlayerHealth
Super! Deine Funktion berechnet nun den Schaden, den dein Spieler erleiden sollte, wenn du drei Parameter angibst, anstatt Variablen und Konstanten zu verwenden, die innerhalb der Funktion deklariert werden.
Zu diesem Zeitpunkt siehst du vielleicht einen roten Schnörkel unter dem () in deinem Aufruf von CalculateDamage() in HurtPlayer(). Das liegt daran, dass du die Deklaration von CalculateDamage() aktualisiert hast, so dass 3 Parameter erforderlich sind, aber du übergibst keine Argumente in deinem Aufruf von CalculateDamage(). In den nächsten Schritten wirst du das beheben.
-
Bevor du ein Argument für
PlayerHealthanCalculateDamage()übergeben kannst, musst du wissen, wie hoch die Gesundheit des Charakters ist. Dazu verwendest du die MethodeGetHealth(). Du rufst sie auf die gleiche Weise auf wieDamage()undHeal(), aber sie gibt einen Wert zurück, den du in deinemHurtPlayer()Befehl speichern musst.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) -
Für den zweiten Parameter in
CalculateDamage()brauchst du einen Parameter vonHurtPlayer(). Diesen Parameter wirst du jetzt erstellen. Füge einen ParameterFloatmit dem NamenDamageAmounthinzu.HurtPlayer()sollte nun wie folgt aussehen.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) -
Du hast jetzt alle drei Argumente, um sie zu
CalculateDamage()hinzuzufügen.MyCharacterHealthfür den ParameterPlayerHealth.DamageAmountfür den ParameterDesiredDamageAmount1.0für den ParameterMinHealth
HurtPlayer() sollte wie folgt aussehen, und du solltest keine Fehler mehr haben:
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("Damage To Do: {DamageToDo}")
FortniteCharacter.Damage(DamageToDo)
Ruf HurtPlayer() einige Male auf, um zu sehen, welche unterschiedlichen Auswirkungen sie je nach Gesundheit des Spielers hat.
Und was ist mit der Funktion HealPlayer()? Hast du Ideen, wie man sie aktualisieren kann, nachdem du nun weißt, wie Parameter verwendet werden?
Es gibt eine weitere Methode, die nützlich sein könnte. Sie heißt SetMaxHealth() und wird genauso aufgerufen wie Damage(), Heal() und GetHealth(). Versuche SetMaxHealth() zusammen mit all deinem Wissen über Parameter und Funktionen zu verwenden, um die Funktion HealPlayer() zu aktualisieren. Überlege, was für den Spieler interessant oder lustig sein könnte.
Vollständiges Script
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):
# Wird ausgeführt, wenn das Gerät in einem laufenden Spiel gestartet wird
OnBegin<override>()<suspends>:void=
HurtPlayer(80.0)
Print("Spieler verletzt")
CalculateDamage(PlayerHealth : float, DesiredDamageAmount : float, MinHealth : float) : float =
# Diesen Schaden zufügen, wenn das Ausmaß des Schadens den Spieler eliminieren würde
if (PlayerHealth > DesiredDamageAmount):
return DesiredDamageAmount
else if (PlayerHealth > MinHealth):
# Wenn die Gesundheit des Spielers niedrig ist, soll er eine weitere Chance erhalten.
return PlayerHealth - MinHealth
else:
# Spieler eliminieren
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("Dem Spieler wurde {DamageToDo} Schaden zugefügt.")
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)