Funkcja HurtPlayer() działa, ale ponieważ przekazujesz wartość literału do metody Damage(), wartość tę można zmienić tylko po ręcznej zmianie kodu. W tym ćwiczeniu sprawisz, że funkcja HurtPlayer() będzie bardziej elastyczna dzięki wartości zwracanej z innej funkcji, którą utworzysz.
W lekcji 4: Praktyka czyni mistrza posłużyliśmy się wyrażeniami warunkowymi, aby obliczyć, ile punktów obrażeń lub leczenia powinny zadać mikstury, w zależności od stanu zdrowia gracza. Część tego kodu przeniesiesz z powrotem do funkcji o nazwie CalculateDamage(). Zwróci ona wartość typu float. Przechowasz tę wartość w stałej, którą następnie przekażesz do metody Damage().
-
Utwórz funkcję o nazwie
CalculateDamage(). W funkcji zadeklaruj dwie stałe typufloat:MinHealthiPotionDamageAmount. Zadeklaruj jedną zmienną typufloato nazwiePlayerHealth.CalculateDamage() : float = MinHealth : float = 1.0 PotionDamageAmount: float = 80.0 var PlayerHealth : float = 100.0 - Utwórz wyrażenie
if…else if…else, które zwróci jedną z trzech wartości:PotionDamageAmount, jeśli wartośćPlayerHealthjest większa odPotionDamageAmountPlayerHealth-MinHealth, jeśli wartośćPlayerHealthjest mniejsza odPotionDamageAmount, ale większa odMinHealthPlayerHealth, jeśli wartośćPlayerHealthjest równaMinHealthlub mniejsza
# Jeśli wartość zadanych obrażeń nie wyeliminuje gracza, zadaj mu taką ilość obrażeń if (PlayerHealth > PotionDamageAmount): return PotionDamageAmount else if (PlayerHealth > MinHealth): # Daj graczowi jeszcze jedną szansę, jeśli ma niski poziom zdrowia return PlayerHealth - MinHealth else: # Wyeliminuj gracza return PlayerHealthTen kod sprawia, że gracz otrzymuje drugą szansę, jeśli wypije miksturę, która normalnie by go wyeliminowała.
-
Teraz, gdy masz już funkcję, która zwraca przydatny wynik, musisz go przechować. Zadeklaruj stałą
floato nazwieDamageToDoi zainicjuj ją za pomocą wartości zwracanej przezCalculateDamage(). Dodaj to do funkcjiHurtPlayer().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) -
Wreszcie czas na wykorzystanie wyników! Przekaż
DamageToDojako argument doDamage(). Dodaj funkcjęPrint(), żeby zobaczyć, co zwracaCalculateDamage().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("Obrażenia do zadania: {DamageToDo}") FortniteCharacter.Damage(DamageToDo)
Teraz zamiast wywołania metody Damage() przy użyciu literału, użyje ona wartości zwróconej przez CalculateDamage(). Wywołanie funkcji HurtPlayer() powinno być już napisane w poprzednim ćwiczeniu, ale nie zapomnij tego sprawdzić.
Kompletny skrypt
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):
# Działa po uruchomieniu urządzenia w aktywnej grze
OnBegin<override>()<suspends>:void=
HurtPlayer()
Print("Gracz doznał obrażeń")
CalculateDamage() : float =
MaxHealth : float = 100.0
MinHealth : float = 1.0
PotionDamageAmount: float = 80.0
var PlayerHealth : float = 100.0
# Jeśli wartość zadanych obrażeń nie wyeliminuje gracza, zadaj mu taką ilość obrażeń
if (PlayerHealth > PotionDamageAmount):
return PotionDamageAmount
else if (PlayerHealth > MinHealth):
# Daj graczowi jeszcze jedną szansę, jeśli ma niski poziom zdrowia
return PlayerHealth - MinHealth
else:
# Wyeliminuj gracza
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("Obrażenia do zadania: {DamageToDo}")
FortniteCharacter.Damage(DamageToDo)
Spróbuj samodzielnie napisać funkcję podobną do CalculateDamage(), która zwróci wynik przydatny dla HealPlayer(). Jeśli utkniesz, zajrzyj do lekcji 4: Praktyka czyni mistrza, aby zaczerpnąć pomysłów.