RPGのキャラクターを例にしたオブジェクト指向の説明と実装
目次
- 1. 1. オブジェクト指向って何?
- 2. 2. ソリューションとプロジェクトの作成方法
- 3. 3. クラスの追加方法
- 4. 4. キャラクタークラスのコード(
Character.cs
) - 5. 5. メインプログラムのコード(
Program.cs
) - 6. 6. プログラムの実行結果
- 7. 7. クラスを追加して拡張する
- 8. 8. メインプログラムに戦士を追加
- 9. 9. 拡張プログラムの実行結果
- 10. 10. プログラムの整理
- 11. 11. 練習問題
- 12. 1. 弓使い(
Archer
)クラスの作成 - 13. 2. 属性の拡張(レベルと経験値の追加)
- 14. 3. 戦闘システムの作成
- 15. ポイント解説
- 16. オブジェクト指向のメモリ管理について
- 17. 応用
1. オブジェクト指向って何?
オブジェクト指向は、「現実世界のモノをプログラムで表現する考え方」 です。
例: RPGのキャラクター
- キャラクターの特徴:
- 名前、HP(ヒットポイント)、MP(マジックポイント)、職業など。
- キャラクターの行動:
- 攻撃する、回復するなど。
これをプログラムで表現するときに、クラス や オブジェクト を使います。
2. ソリューションとプロジェクトの作成方法
- Visual Studio を起動
- 「新しいプロジェクトの作成」 を選択。
- プロジェクトテンプレートを選択
- 「コンソールアプリ」 を選びます。
- ソリューション名とプロジェクト名を設定
- ソリューション名:
RPGExample
- プロジェクト名:
RPGExample
- ソリューション名:
- プロジェクトが作成される
- プロジェクトの初期状態では
Program.cs
ファイルが生成されています。
- プロジェクトの初期状態では
3. クラスの追加方法
- プロジェクト内に新しいクラスファイルを作成
- ソリューションエクスプローラーでプロジェクト名(
RPGExample
)を右クリック。- 「追加」 → 「新しい項目」 を選択。
- 「クラス」 を選び、名前を
Character.cs
に設定して追加。
- ソリューションエクスプローラーでプロジェクト名(
- クラスファイルにコードを記述
- 自動生成されたテンプレートコードを削除し、以下のコードを記述します。
4. キャラクタークラスのコード(Character.cs
)
using System;
namespace RPGExample
{
// キャラクタークラス
class Character
{
public string Name; // 名前
public int HP; // ヒットポイント
public int MP; // マジックポイント
public string Job; // 職業
// 攻撃する
public void Attack()
{
Console.WriteLine($"{Name}は攻撃した!");
}
// 回復する
public void Heal()
{
Console.WriteLine($"{Name}は回復魔法を使った!");
}
}
}
5. メインプログラムのコード(Program.cs
)
using System;
namespace RPGExample
{
class Program
{
static void Main(string[] args)
{
// 勇者「ヒロト」を作成
Character hero = new Character();
hero.Name = "ヒロト";
hero.HP = 100;
hero.MP = 20;
hero.Job = "勇者";
// 魔法使い「リナ」を作成
Character mage = new Character();
mage.Name = "リナ";
mage.HP = 50;
mage.MP = 80;
mage.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();
}
}
}
6. プログラムの実行結果
名前: ヒロト, 職業: 勇者, HP: 100, MP: 20
名前: リナ, 職業: 魔法使い, HP: 50, MP: 80
ヒロトは攻撃した!
リナは回復魔法を使った!
7. クラスを追加して拡張する
次に、Warrior
(戦士)やMage
(魔法使い)などのクラスを追加して、具体的なキャラクターを作ります。
手順
- 新しいクラスファイルを追加
- プロジェクト内に
Warrior.cs
を作成します。
- プロジェクト内に
- 戦士クラスのコード(
Warrior.cs
)
namespace RPGExample
{
class Warrior : Character
{
public void UseSword()
{
Console.WriteLine($"{Name}は剣で攻撃した!");
}
}
}
8. メインプログラムに戦士を追加
// 戦士「ゴウ」を作成
Warrior warrior = new Warrior();
warrior.Name = "ゴウ";
warrior.HP = 120;
warrior.MP = 10;
warrior.Job = "戦士";
// 戦士の情報を表示
Console.WriteLine($"名前: {warrior.Name}, 職業: {warrior.Job}, HP: {warrior.HP}, MP: {warrior.MP}");
// 戦士の行動
warrior.Attack();
warrior.UseSword();
9. 拡張プログラムの実行結果
名前: ゴウ, 職業: 戦士, HP: 120, MP: 10
ゴウは攻撃した!
ゴウは剣で攻撃した!
10. プログラムの整理
Character.cs
: 基本キャラクターの共通部分を定義。Warrior.cs
: 戦士特有の行動(剣を振る)を追加。Mage.cs
: 魔法使い特有の行動(魔法を唱える)を追加(省略可)。Program.cs
: ゲームのメイン処理。
11. 練習問題
やってみよう!
- 新しいクラスを追加
- 弓使いや盗賊などのクラスを作成してみましょう。
- キャラクターの属性を増やす
- レベルや経験値(EXP)を追加し、行動ごとに経験値を増やす仕組みを作りましょう。
- 戦闘システムを作成
- 2人のキャラクターが戦い、HP が減る仕組みをプログラムしてみましょう。
この構成なら、ソリューションの作成からプログラムの実装、拡張方法までを一通り体験でき、オブジェクト指向をしっかり学べます!
以下は、11の練習問題に対する模範解答です。練習問題を順番に解きながら、コードを発展させていきます。
1. 弓使い(Archer
)クラスの作成
Archer.cs
ファイルを追加して、以下のように記述します。
namespace RPGExample
{
class Archer : Character
{
public void ShootArrow()
{
Console.WriteLine($"{Name}は矢を放った!");
}
}
}
メインプログラムで使用する例:
// 弓使い「エリー」を作成
Archer archer = new Archer();
archer.Name = "エリー";
archer.HP = 80;
archer.MP = 30;
archer.Job = "弓使い";
// 弓使いの情報を表示
Console.WriteLine($"名前: {archer.Name}, 職業: {archer.Job}, HP: {archer.HP}, MP: {archer.MP}");
// 弓使いの行動
archer.Attack();
archer.ShootArrow();
2. 属性の拡張(レベルと経験値の追加)
Character.cs
に属性を追加
class Character
{
public string Name; // 名前
public int HP; // ヒットポイント
public int MP; // マジックポイント
public string Job; // 職業
public int Level = 1; // レベル
public int EXP = 0; // 経験値
// 経験値を増やすメソッド
public void GainExperience(int amount)
{
EXP += amount;
Console.WriteLine($"{Name}は{amount}の経験値を得た!");
// レベルアップ判定
if (EXP >= 100)
{
LevelUp();
}
}
// レベルアップ処理
private void LevelUp()
{
EXP -= 100;
Level++;
HP += 10; // レベルアップでHP増加
MP += 5; // レベルアップでMP増加
Console.WriteLine($"{Name}はレベル{Level}に上がった!");
}
}
メインプログラムで使用する例:
// 勇者「ヒロト」が経験値を得る
hero.GainExperience(50);
hero.GainExperience(60); // レベルアップする
実行結果例:
ヒロトは50の経験値を得た!
ヒロトは60の経験値を得た!
ヒロトはレベル2に上がった!
3. 戦闘システムの作成
戦闘システムのコード
以下のコードを Program.cs
に追加して、キャラクター同士が戦う仕組みを作ります。
using System;
namespace RPGExample
{
class Program
{
static void Main(string[] args)
{
// キャラクターの作成
Character hero = new Character { Name = "ヒロト", HP = 100, MP = 20, Job = "勇者" };
Character enemy = new Character { Name = "ゴブリン", HP = 60, MP = 10, Job = "敵" };
Console.WriteLine("戦闘開始!");
Console.WriteLine($"{hero.Name} VS {enemy.Name}");
// 戦闘ループ
while (hero.HP > 0 && enemy.HP > 0)
{
// 勇者の攻撃
Console.WriteLine($"{hero.Name}の攻撃!");
enemy.HP -= 20;
Console.WriteLine($"{enemy.Name}のHP: {enemy.HP}");
// 敵の反撃
if (enemy.HP > 0)
{
Console.WriteLine($"{enemy.Name}の反撃!");
hero.HP -= 10;
Console.WriteLine($"{hero.Name}のHP: {hero.HP}");
}
}
// 勝敗判定
if (hero.HP > 0)
{
Console.WriteLine($"{hero.Name}の勝利!");
hero.GainExperience(50);
}
else
{
Console.WriteLine($"{enemy.Name}の勝利!");
}
}
}
}
実行結果例:
戦闘開始!
ヒロト VS ゴブリン
ヒロトの攻撃!
ゴブリンのHP: 40
ゴブリンの反撃!
ヒロトのHP: 90
ヒロトの攻撃!
ゴブリンのHP: 20
ゴブリンの反撃!
ヒロトのHP: 80
ヒロトの攻撃!
ゴブリンのHP: 0
ヒロトの勝利!
ヒロトは50の経験値を得た!
ポイント解説
- 弓使い(
Archer
)クラス:- 新しい行動「矢を放つ」を持つクラスを追加しました。
- クラスの継承を使うことで、キャラクターに独自の特徴を持たせています。
- レベルと経験値:
- キャラクターが行動するたびに経験値を獲得し、一定量たまるとレベルアップします。
- レベルアップ時に属性(HPやMP)が増加する仕様を追加しました。
- 戦闘システム:
- キャラクター同士が攻撃を交互に行うシンプルな戦闘ループを実装。
- 戦闘後に経験値を獲得する処理を追加しました。
ディスカッション
コメント一覧
まだ、コメントがありません