【学習】ターン制バトルで学ぶオブジェクト指向(1)1人のキャラクター 〜クラスと new〜
これまでの学習では、
stringやintに値を入れる- メソッドを呼び出す
という形で C# に触れてきました。
しかし キャラクター のように、名前・HP・攻撃力がセットになるデータを扱うときは、バラバラの変数だけだと読みづらくなります。
クラスで「1人分」をまとめる
というのが、オブジェクト指向の入り口です。
今回はシリーズ第1回として、1人のプレイヤー を class で表し、new で実体を作るところまで進みます。
今回の最小ゴール
Playerクラスを定義し、名前・HP・攻撃力 をプロパティで持つnew Player(...)でインスタンスを作り、Console.WriteLineで値を表示する
前回からの差分
第1回のため、差分はありません。シリーズの入口として読んでください。目次は ターン制バトルで学ぶオブジェクト指向(固定ページ) を参照してください。
ソリューションとプロジェクトを作る
Visual Studio で次のプロジェクトを作ります。
- テンプレート: コンソール アプリ
- プロジェクト名:
TurnBattleOop01(任意)
以降、Program.cs に Player クラスと Main を書いて実行できます(クラスは別ファイルに分けても構いません)。
Player クラス
キャラクター1人分の 設計図 です。
public class Player
{
public string Name { get; set; }
public int Hp { get; set; }
public int Attack { get; set; }
public Player(string name, int hp, int attack)
{
Name = name;
Hp = hp;
Attack = attack;
}
}- プロパティ(
Nameなど)… 外から読み書きできるデータ - コンストラクタ(
public Player(...))… 作るときに必ず初期値を決める処理
new で実体を作る
設計図だけでは画面に値は出ません。インスタンス(実体) を作ります。
internal class Program
{
private static void Main(string[] args)
{
Player player = new Player("せんし", 100, 20);
Console.WriteLine(player.Name);
Console.WriteLine(player.Hp);
Console.WriteLine(player.Attack);
}
}実行すると、せんし・100・20 が表示されます。
プログラムの流れ
Player の設計図が定義されている
↓
new Player(...) で実体 player が作られる
↓
player.Name などでデータを読む
↓
Console に表示WinForms / Unity での当たり所
| 要素 | 本回(コンソール) | WinForms(イメージ) | Unity(イメージ) |
|---|---|---|---|
| キャラデータ | Player クラス |
フォームが持つモデル | スクリプトのフィールド |
| 作るタイミング | Main の先頭 |
フォーム読み込み時など | Awake / 生成時 |
| 見せ方 | Console.WriteLine |
Label.Text |
UI / Debug.Log |
重要ポイント
- クラス=設計図(型の定義)、
new=実体化(メモリ上に1個作る) - まず 1人分 をきちんと表せることが、あとの継承や配列の土台になる
- いきなり抽象化しなくてよい。動く1人 から始める