RPGのキャラクターを例にしたオブジェクト指向の説明と実装(イラストなし版)
初学者が Visual Studio を使いながら 「動くサンプルを作ってオブジェクト指向の流れを体験する」 ことを目的としたチュートリアルです。
目次
1. オブジェクト指向とは
オブジェクト指向(OOP: Object‑Oriented Programming)とは、「現実世界の事物を、データ(状態)と振る舞い(メソッド)のセットとしてプログラム内に再現する考え方」 です。
例:RPG のキャラクター
種別 | 例 | OOP での扱い |
---|---|---|
状態 | 名前 / HP / MP / 職業 など | フィールド または プロパティ |
振る舞い | 攻撃する / 回復する | メソッド |
この「状態+振る舞い」で 1 つのキャラクターを表す単位(型)を クラス、そこから生成した具体的なキャラクターを オブジェクト(インスタンス) と呼びます。
2. ソリューションとプロジェクトの作成
- Visual Studio を起動し、[新しいプロジェクトの作成] を選択します。
- テンプレート一覧から [コンソール アプリ] (.NET 8 以上) を選択します。
- ソリューション名とプロジェクト名をどちらも
RPGExample
と入力し、[作成] をクリックします。 - プロジェクトが生成されると、
Program.cs
が自動で作成されます。
補足: .NET のバージョン違いによるメイン メソッドの書式差異に注意してください。本記事では “トップレベル ステートメント" は使用せず、従来どおり
Main(string[] args)
を記述します。
3. クラスの追加
- ソリューション エクスプローラー でプロジェクト名(
RPGExample
)を右クリックし、[追加] → [新しい項目] を選択します。 - [クラス] を選択し、ファイル名を
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. 練習課題
以下の課題に取り組み、コードを自分で拡張してみましょう。
- 弓使い(
Archer
)クラス を作成し、ShootArrow()
メソッドを実装する。 - キャラクターの属性拡張:レベル (
Level
) と経験値 (EXP
) を追加し、一定経験値でLevelUp()
する仕組みを作る。 - 戦闘システム:2 人のキャラクターが交互に攻撃し合い、HP が 0 になった側が敗北するループを実装する。
模範解答は折りたたみ欄に掲載しています。自力で挑戦した後に確認してください。
7. まとめ
- オブジェクト指向 の本質は「状態と振る舞いの集合を 1 つの単位として扱い、再利用・拡張を容易にする」こと。
- Visual Studio と C# の 継承 を用いて、派生クラスで機能拡張する流れを体験しました。
- 練習課題で カプセル化・多態性・設計の整理 に挑戦すると、より実践的な理解が深まります。
訪問数 8 回, 今日の訪問数 8回
ディスカッション
コメント一覧
まだ、コメントがありません