【ClassPractice09】HPの最大値を作ってみよう
前回、HPが0未満にならないようにしました。
if (Hp < 0)
{
Hp = 0;
}
これで「下限」は守れました。
でも考えてみましょう。
もし回復処理を作ったらどうなるでしょう?
Hp = Hp + 1000;
HPが無限に増えてしまいます。
目次
問題
HPには最大値があるべきでは?
多くのゲームでは、
- 現在HP
- 最大HP
があります。
今回はその仕組みを作ります。
① プロジェクトを追加する
- ExtraPractice.sln を開く
- 右クリック → 「追加」→「新しいプロジェクト」
- 「コンソール アプリ」
- プロジェクト名
ClassPractice09
- 作成
② 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回




ディスカッション
コメント一覧
まだ、コメントがありません