이전 실습에서는 CalculateDamage()
의 양호한 시작 지점을 만들었지만 함수 바디에는 파라미터로 더 적합한 상수와 변수가 포함되어 있습니다. 다시 한번 함수가 어떻게 작동하는지 확인하세요.
CalculateDamage() : float =
MinHealth : float = 1.0
PotionDamageAmount : float = 80.0
var PlayerHealth : float = 100.0
# 피해량이 플레이어를 처치하기에 부족한 경우 그만큼의 피해를 입힙니다.
if (PlayerHealth > PotionDamageAmount):
return PotionDamageAmount
else if (PlayerHealth > MinHealth):
# 플레이어의 체력이 낮은 경우 한 번 더 기회를 부여합니다.
return PlayerHealth - MinHealth
else:
# 플레이어를 처치합니다.
return PlayerHealth
업데이트된 함수는 다음 3개의 파라미터를 가져옵니다.
PlayerHealth
: 플레이어의 현재 체력DesiredDamageAmount
: 플레이어에게 가할 수 있는 최대 피해량MinHealth
:DesiredDamageAmount
로 체력이0.0
이하로 줄어들 때 플레이어의 체력.
다음과 일치하도록 함수를 업데이트합니다.
CalculateDamage(PlayerHealth : float, DesiredDamageAmount : float, MinHealth : float) : float =
# 피해량이 플레이어를 처치하기에 부족한 경우 그만큼의 피해를 입힙니다.
if (PlayerHealth > DesiredDamageAmount):
return DesiredDamageAmount
else if (PlayerHealth > MinHealth):
# 플레이어의 체력이 낮은 경우 한 번 더 기회를 부여합니다.
return PlayerHealth - MinHealth
else:
# 플레이어를 처치합니다.
return PlayerHealth
훌륭합니다! 이제 함수에서 함수 내에 선언된 변수와 상수를 사용하는 대신 파라미터 3개가 주어지면 플레이어가 받아야 하는 피해량을 계산합니다.
이 시점에서 HurtPlayer()
의 CalculateDamage()
호출의 ()
아래에 빨간색의 구불구불한 선이 보일 수 있습니다. 파라미터 3개가 필요하도록 CalculateDamage()
의 선언을 업데이트했지만 CalculateDamage()
호출에 인수를 전달하지 않기 때문입니다. 다음 단계에서 이러한 문제를 수정합니다.
-
PlayerHealth
에 대한 실행인자를CalculateDamage()
에 전달할 수 있기 때문에 캐릭터의 체력을 알아야 합니다. 이를 위해GetHealth()
메서드를 사용합니다.Damage()
및Heal()
과 동일한 방식으로 호출하지만HurtPlayer()
함수 내에 저장해야 하는 값이 반환됩니다.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)
-
CalculateDamage()
의 두 번째 파라미터의 경우HurtPlayer()
의 파라미터가 필요합니다. 이제 이 파라미터를 생성합니다.DamageAmount
라는float
파라미터를 추가합니다.HurtPlayer()
는 이제 다음과 같을 것입니다.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)
-
이제 3개의 인수를 모두
CalculateDamage()
에 추가할 준비가 되었습니다.- 파라미터
PlayerHealth
의 경우MyCharacterHealth
- 파라미터
DesiredDamageAmount
의 경우DamageAmount
- 파라미터
MinHealth
의 경우1.0
- 파라미터
HurtPlayer()
는 다음과 같을 것이고, 더 이상 오류는 없을 것입니다.
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)
HurtPlayer()
를 몇 번 호출하여 플레이어의 체력에 따른 차이를 확인하세요.
HealPlayer()
함수는 어떨까요? 파라미터 사용 방법을 알았으니 이를 업데이트하는 방법을 생각해 볼 수 있을까요?
유용할 수 있는 방법이 한 가지 더 있습니다. 이름은 SetMaxHealth()
이고, Damage()
, Heal()
, GetHealth()
와 같은 방식으로 호출됩니다. SetMaxHealth()
와 파라미터 및 함수에 관하여 알고 있는 모든 것을 활용하여 HealPlayer()
함수를 업데이트할 수 있는지 확인해 보세요. 플레이어에게 무엇이 흥미롭거나 재미있을지 생각해 보세요.
전체 스크립트
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):
# 실행 중인 게임에서 장치가 시작되면 실행됩니다.
OnBegin<override>()<suspends>:void=
HurtPlayer(80.0)
Print("Player Hurt")
CalculateDamage(PlayerHealth : float, DesiredDamageAmount : float, MinHealth : float) : float =
# 피해량이 플레이어를 처치하기에 부족한 경우 그만큼의 피해를 입힙니다.
if (PlayerHealth > DesiredDamageAmount):
return DesiredDamageAmount
else if (PlayerHealth > MinHealth):
# 플레이어의 체력이 낮은 경우 한 번 더 기회를 부여합니다.
return PlayerHealth - MinHealth
else:
# 플레이어를 처치합니다.
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} damage dealt to player")
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)