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より大きければPotionDamageAmountPlayerHealthがPotionDamageAmountより小さくMinHealthより大きければPlayerHealth-MinHealthPlayerHealthが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:練習の時間です!」を確認してヒントを得てください。
次のレッスン
%learn-code-basics-8-input-parameters-arguments-in-verse:topic%