RPGのキャラクターを例にしたオブジェクト指向の説明と実装(イラストなし版)

初学者が Visual Studio を使いながら 「動くサンプルを作ってオブジェクト指向の流れを体験する」 ことを目的としたチュートリアルです。


1. オブジェクト指向とは

オブジェクト指向(OOP: Object‑Oriented Programming)とは、「現実世界の事物を、データ(状態)と振る舞い(メソッド)のセットとしてプログラム内に再現する考え方」 です。

例:RPG のキャラクター

種別OOP での扱い
状態名前 / HP / MP / 職業 などフィールド または プロパティ
振る舞い攻撃する / 回復するメソッド

この「状態+振る舞い」で 1 つのキャラクターを表す単位(型)を クラス、そこから生成した具体的なキャラクターを オブジェクト(インスタンス) と呼びます。


2. ソリューションとプロジェクトの作成

  1. Visual Studio を起動し、[新しいプロジェクトの作成] を選択します。
  2. テンプレート一覧から [コンソール アプリ] (.NET 8 以上) を選択します。
  3. ソリューション名とプロジェクト名をどちらも RPGExample と入力し、[作成] をクリックします。
  4. プロジェクトが生成されると、Program.cs が自動で作成されます。

補足: .NET のバージョン違いによるメイン メソッドの書式差異に注意してください。本記事では “トップレベル ステートメント" は使用せず、従来どおり Main(string[] args) を記述します。


3. クラスの追加

  1. ソリューション エクスプローラー でプロジェクト名(RPGExample)を右クリックし、[追加] → [新しい項目] を選択します。
  2. [クラス] を選択し、ファイル名を Character.cs に設定して追加します。

以下に 最小構成 の Character クラスを示します。

using System;

namespace RPGExample
{
    /// <summary>
    /// RPG キャラクターの基底クラス。
    /// ※サンプルでは簡潔さを優先し、フィールドを public にしています。
    /// 本格的な設計ではプロパティ + カプセル化を検討してください。
    /// </summary>
    public class Character
    {
        public string Name; // 名前
        public int HP;      // ヒットポイント
        public int MP;      // マジックポイント
        public string Job;  // 職業

        /// <summary>攻撃する。</summary>
        public void Attack()
        {
            Console.WriteLine($"{Name} は攻撃した!");
        }

        /// <summary>回復魔法を使用する。</summary>
        public void Heal()
        {
            Console.WriteLine($"{Name} は回復魔法を使った!");
        }
    }
}

4. メイン プログラムの作成(Program.cs

using System;

namespace RPGExample
{
    class Program
    {
        static void Main(string[] args)
        {
            // 勇者「ヒロト」を生成
            var hero = new Character
            {
                Name = "ヒロト",
                HP = 100,
                MP = 20,
                Job = "勇者"
            };

            // 魔法使い「リナ」を生成
            var mage = new Character
            {
                Name = "リナ",
                HP = 50,
                MP = 80,
                Job = "魔法使い"
            };

            // キャラクター情報を表示
            Console.WriteLine($"名前:{hero.Name} 職業:{hero.Job} HP:{hero.HP} MP:{hero.MP}");
            Console.WriteLine($"名前:{mage.Name} 職業:{mage.Job} HP:{mage.HP} MP:{mage.MP}");

            // 行動
            hero.Attack();
            mage.Heal();
        }
    }
}

実行結果(例)

名前:ヒロト 職業:勇者 HP:100 MP:20
名前:リナ 職業:魔法使い HP:50 MP:80
ヒロト は攻撃した!
リナ は回復魔法を使った!

5. クラスを追加して拡張する

5‑1. Warrior クラスの追加

namespace RPGExample
{
    /// <summary>戦士クラス(Character から継承)。</summary>
    public class Warrior : Character
    {
        /// <summary>剣で攻撃する。</summary>
        public void UseSword()
        {
            Console.WriteLine($"{Name} は剣で攻撃した!");
        }
    }
}

5‑2. メイン プログラムに戦士を追加

// 戦士「ゴウ」を生成
var warrior = new Warrior
{
    Name = "ゴウ",
    HP = 120,
    MP = 10,
    Job = "戦士"
};

// 情報と行動
Console.WriteLine($"名前:{warrior.Name} 職業:{warrior.Job} HP:{warrior.HP} MP:{warrior.MP}");
warrior.Attack();   // 基底クラスのメソッド
warrior.UseSword(); // 派生クラス固有のメソッド

実行結果(例)

名前:ゴウ 職業:戦士 HP:120 MP:10
ゴウ は攻撃した!
ゴウ は剣で攻撃した!

6. 練習課題

以下の課題に取り組み、コードを自分で拡張してみましょう。

  1. 弓使い(Archer)クラス を作成し、ShootArrow() メソッドを実装する。
  2. キャラクターの属性拡張:レベル (Level) と経験値 (EXP) を追加し、一定経験値で LevelUp() する仕組みを作る。
  3. 戦闘システム:2 人のキャラクターが交互に攻撃し合い、HP が 0 になった側が敗北するループを実装する。

模範解答は折りたたみ欄に掲載しています。自力で挑戦した後に確認してください。


7. まとめ

  • オブジェクト指向 の本質は「状態と振る舞いの集合を 1 つの単位として扱い、再利用・拡張を容易にする」こと。
  • Visual Studio と C# の 継承 を用いて、派生クラスで機能拡張する流れを体験しました。
  • 練習課題で カプセル化・多態性・設計の整理 に挑戦すると、より実践的な理解が深まります。

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