HurtPlayer()
関数は動作していますが、Damage()
メソッドにリテラル値を渡しているため、その値を変更できるのはコードを手動で変更した場合だけです。この演習では、これから作成する別の関数からの戻り値を使用して HurtPlayer()
関数の柔軟性を高めます。
「レッスン 4:練習の時間」では、プレイヤーの体力値に応じて、条件式を使用してポーションのダメージ量や回復量を計算しました。ここでは、そのコードの一部を CalculateDamage()
という関数で使用します。この関数は float
型の値を返します。その値を定数に格納し、その定数を Damage()
メソッドに渡します。
-
CalculateDamage()
という名前の関数を作成します。この関数内でfloat
型の 2 つの定数MinHealth
とPotionDamageAmount
を宣言します。PlayerHealth
という名前のfloat
型の 1 つの変数を宣言します。CalculateDamage() : float = MinHealth : float = 1.0 PotionDamageAmount: float = 80.0 var PlayerHealth : float = 100.0
- 次の 3 つの値のいずれかを返す
if
…else if
…else
式を作成します。PlayerHealth
がPotionDamageAmount
より大きければPotionDamageAmount
PlayerHealth
がPotionDamageAmount
より小さくMinHealth
より大きければPlayerHealth
-MinHealth
PlayerHealth
がMinHealth
以下であればPlayerHealth
# そのダメージ量でプレイヤーが倒されない場合は、そのダメージ量をプレイヤーに与えます。 if (PlayerHealth > PotionDamageAmount): return PotionDamageAmount else if (PlayerHealth > MinHealth): # 体力値が小さければ、プレイヤーにもう一度チャンスを与えます。 return PlayerHealth - MinHealth else: # プレイヤーを倒します。 return PlayerHealth
このコードのエフェクトは、通常であれば倒されるほどのポーションを飲んだ場合に、プレイヤーにもう一度チャンスを与えることです。
-
有用な結果を返す関数を作成したので、その結果を格納する必要があります。
DamageToDo
という名前のfloat
型の定数を宣言し、それをCalculateDamage()
の戻り値で初期化して、HurtPlayer()
関数に追加します。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)
-
最後に、その結果を使用します。
DamageToDo
を引数としてDamage()
に渡します。CalculateDamage()
からの戻り値を正確に確認できるようにPrint()
を追加します。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)
次に、リテラル値を使用して Damage()
メソッドを呼び出す代わりに、CalculateDamage()
から返された値を使用します。前の演習で HurtPlayer()
の呼び出しをすでに記述していますが、忘れずにチェックします。
完全なスクリプト
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()
Print("Player Hurt")
CalculateDamage() : float =
MaxHealth : float = 100.0
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
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)
HealPlayer()
に有用な結果を返す CalculateDamage()
に似た関数を自力で作成してみましょう。行き詰まった場合は、「レッスン 4:練習の時間です!」を確認してヒントを得てください。