【ClassPractice08】HPが0未満にならないようにする
今の Player クラスはこうなっています。
public void TakeDamage(int damage)
{
Hp = Hp - damage;
}
ここで考えてみましょう。
もし HP が 10 のとき、
p1.TakeDamage(50);
としたらどうなるでしょう?
答えは:
Hp = -40
になります。
問題
HPがマイナスって正しいでしょうか?
普通のゲームでは、
HPは0で止まりますよね。
つまり今の設計は
不正な状態を許している
ということです。
解決方法
TakeDamage の中でチェックします。
① プロジェクトを追加する
- ExtraPractice.sln を開く
- 右クリック → 「追加」→「新しいプロジェクト」
- 「コンソール アプリ」
- プロジェクト名
ClassPractice08
- 作成
② Playerクラスを書く
namespace ClassPractice08
{
public class Player
{
public string Name;
private int Hp;
public Player(string name, int hp)
{
Name = name;
Hp = hp;
}
public void TakeDamage(int damage)
{
Hp = Hp - damage;
if (Hp < 0)
{
Hp = 0;
}
}
public int GetHp()
{
return Hp;
}
}
}
③ Program.cs
Player p1 = new Player("勇者", 10);
Console.WriteLine(p1.GetHp());
p1.TakeDamage(50);
Console.WriteLine(p1.GetHp());
実行結果
10
0
ここで重要なこと
外からは
p1.Hp = -999;
できません。
さらに、
ダメージを受けても
HPは0未満になりません。
つまり、
不正な状態を作れない設計
になりました。
今日のポイント
✔ privateで守る
✔ メソッドで制御する
✔ 状態を正しく保つ
これが「設計」の基本です。
まとめ
クラスとは単なる箱ではありません。
正しい状態を保つ仕組み
でもあります。
訪問数 3 回, 今日の訪問数 3回



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