🛡 HPが0未満にならないようにしよう

今の TakeDamage メソッドはこうでした。

public void TakeDamage(int damage)
{
    Hp = Hp - damage;
    Console.WriteLine($"{Name} は {damage} のダメージを受けた!");
}

しかし、このままだと問題があります。


❗ 問題点

もし HP が 20 のときに

player.TakeDamage(50);

を実行すると、

HPは -30 になってしまいます。

ゲームとして不自然ですね。


🔧 改良してみよう

HPが0未満にならないように修正します。

public void TakeDamage(int damage)
{
    Hp = Hp - damage;

    if (Hp < 0)
    {
        Hp = 0;
    }

    Console.WriteLine($"{Name} は {damage} のダメージを受けた!");
}

🧠 ここで使っている知識

if (Hp < 0)

これは条件分岐です。

つまり:

HPが0より小さくなったら、0に戻す

という処理です。


▶ 実行してみる

Player player = new Player
{
    Name = "勇者",
    Hp = 20,
    Attack = 20
};

player.ShowStatus();
Console.WriteLine();

player.TakeDamage(50);
Console.WriteLine();

player.ShowStatus();

▶ 実行結果

名前: 勇者
HP: 20
攻撃力: 20

勇者 は 50 のダメージを受けた!

名前: 勇者
HP: 0
攻撃力: 20

HPは0で止まりました。


🎯 重要な学習ポイント

ここで学べるのは:

  • オブジェクトは状態を持つ
  • その状態はメソッドで変わる
  • 条件分岐で状態を守れる

つまり、

クラスの中に「ルール」を書ける

ということです。


🔥 一段レベルが上がった

最初は:

  • データの箱

次は:

  • データ+動き

今は:

  • データ+動き+ルール

になりました。

オブジェクト指向らしさが、かなり出てきています。


訪問数 2 回, 今日の訪問数 2回