学習記事一覧 · ターン制OOP入門

【学習】ターン制バトルで学ぶオブジェクト指向(1)1人のキャラクター 〜クラスと new

これまでの学習では、

  • stringint に値を入れる
  • メソッドを呼び出す

という形で C# に触れてきました。

しかし キャラクター のように、名前・HP・攻撃力がセットになるデータを扱うときは、バラバラの変数だけだと読みづらくなります。

クラスで「1人分」をまとめる

というのが、オブジェクト指向の入り口です。

今回はシリーズ第1回として、1人のプレイヤーclass で表し、new で実体を作るところまで進みます。


今回の最小ゴール

  • Player クラスを定義し、名前・HP・攻撃力 をプロパティで持つ
  • new Player(...) でインスタンスを作り、Console.WriteLine で値を表示する

前回からの差分

第1回のため、差分はありません。シリーズの入口として読んでください。目次は ターン制バトルで学ぶオブジェクト指向(固定ページ) を参照してください。


ソリューションとプロジェクトを作る

Visual Studio で次のプロジェクトを作ります。

  • テンプレート: コンソール アプリ
  • プロジェクト名: TurnBattleOop01(任意)

以降、Program.csPlayer クラスと 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);
    }
}

実行すると、せんし10020 が表示されます。


プログラムの流れ

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人 から始める

次に読む