【ClassPractice09】HPの最大値を作ってみよう


前回、HPが0未満にならないようにしました。

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

これで「下限」は守れました。

でも考えてみましょう。

もし回復処理を作ったらどうなるでしょう?

Hp = Hp + 1000;

HPが無限に増えてしまいます。


問題

HPには最大値があるべきでは?

多くのゲームでは、

  • 現在HP
  • 最大HP

があります。

今回はその仕組みを作ります。


① プロジェクトを追加する

  1. ExtraPractice.sln を開く
  2. 右クリック → 「追加」→「新しいプロジェクト」
  3. 「コンソール アプリ」
  4. プロジェクト名
ClassPractice09
  1. 作成

② Playerクラスを書く

namespace ClassPractice09
{
    public class Player
    {
        public string Name;
        private int Hp;
        private int MaxHp;

        public Player(string name, int maxHp)
        {
            Name = name;
            MaxHp = maxHp;
            Hp = maxHp;
        }

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

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

        public void Heal(int amount)
        {
            Hp = Hp + amount;

            if (Hp > MaxHp)
            {
                Hp = MaxHp;
            }
        }

        public int GetHp()
        {
            return Hp;
        }
    }
}

ここで重要な変化

✔ MaxHp を追加した

✔ コンストラクタで Hp を MaxHp にしている

✔ Heal で上限チェックをしている


③ Program.cs

Player p1 = new Player("勇者", 100);

Console.WriteLine(p1.GetHp());

p1.TakeDamage(50);
Console.WriteLine(p1.GetHp());

p1.Heal(1000);
Console.WriteLine(p1.GetHp());

実行結果

100
50
100

何が良くなったのか?

  • HPは0未満にならない
  • HPは最大値を超えない
  • 状態が常に正しい

つまり、

不正な状態を作れない設計

になりました。


今日のポイント

✔ 下限を守る

✔ 上限を守る

✔ コンストラクタで初期状態を保証する


まとめ

クラスは

データをまとめる箱

から

状態を正しく保つ仕組み

へ進化しました。

ここまで来ると、設計の基本はかなり理解できています。


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