初心者向けチュートリアル:オブジェクト指向で簡単なゲームを作ろう

このチュートリアルでは、オブジェクト指向の基本を使って簡単なテキストベースのバトルゲームを作成します。
オブジェクト指向を学んだばかりの方が、クラスやオブジェクト、メソッドの使い方を実践的に学べる内容です。


1. ゲームの概要

目的

  • プレイヤーキャラクターを操作してモンスターと戦う。
  • プレイヤーまたはモンスターのどちらかが先にHPを0にしたら勝敗が決定します。

ゲームの特徴

  • プレイヤーとモンスターのターン制バトル。
  • 簡単な戦闘システム。

2. クラス設計

必要なクラス

  1. Character クラス
    • プレイヤーとモンスターの共通の特徴を定義します。
    • プロパティ:
      • 名前 (Name)
      • HP (HP)
      • 攻撃力 (AttackPower)
    • メソッド:
      • Attack(Character target): 他のキャラクターに攻撃します。
  2. Game クラス
    • ゲーム全体の進行を管理します。
    • メソッド:
      • Start(): ゲームを開始してプレイヤーとモンスターの戦闘を管理します。

3. コードの実装

以下のコードを実装してゲームを作成します。

using System;

// キャラクタークラス
class Character
{
    public string Name { get; set; }  // 名前
    public int HP { get; set; }       // HP
    public int AttackPower { get; set; }  // 攻撃力

    // コンストラクタ
    public Character(string name, int hp, int attackPower)
    {
        Name = name;
        HP = hp;
        AttackPower = attackPower;
    }

    // 攻撃メソッド
    public void Attack(Character target)
    {
        Console.WriteLine($"{Name} が {target.Name} に {AttackPower} ダメージを与えた!");
        target.HP -= AttackPower;
        if (target.HP < 0) target.HP = 0;
    }
}

// ゲームクラス
class Game
{
    public void Start()
    {
        // プレイヤーとモンスターの作成
        Character player = new Character("プレイヤー", 100, 20);
        Character monster = new Character("モンスター", 80, 15);

        Console.WriteLine("ゲームスタート!\n");

        // 戦闘ループ
        while (player.HP > 0 && monster.HP > 0)
        {
            // プレイヤーのターン
            Console.WriteLine($"プレイヤーのターン! {player.Name} のHP: {player.HP}");
            player.Attack(monster);
            Console.WriteLine($"{monster.Name} の残りHP: {monster.HP}\n");

            if (monster.HP <= 0)
            {
                Console.WriteLine("モンスターを倒した!ゲームクリア!");
                break;
            }

            // モンスターのターン
            Console.WriteLine($"モンスターのターン! {monster.Name} のHP: {monster.HP}");
            monster.Attack(player);
            Console.WriteLine($"{player.Name} の残りHP: {player.HP}\n");

            if (player.HP <= 0)
            {
                Console.WriteLine("プレイヤーは倒された...ゲームオーバー!");
            }
        }
    }
}

// エントリーポイント
class Program
{
    static void Main(string[] args)
    {
        Game game = new Game();
        game.Start();
    }
}

4. 実行結果のサンプル

以下は、このコードを実行したときのサンプル出力です。

ゲームスタート!

プレイヤーのターン! プレイヤー のHP: 100
プレイヤー が モンスター に 20 ダメージを与えた!
モンスター の残りHP: 60

モンスターのターン! モンスター のHP: 60
モンスター が プレイヤー に 15 ダメージを与えた!
プレイヤー の残りHP: 85

プレイヤーのターン! プレイヤー のHP: 85
プレイヤー が モンスター に 20 ダメージを与えた!
モンスター の残りHP: 40

モンスターのターン! モンスター のHP: 40
モンスター が プレイヤー に 15 ダメージを与えた!
プレイヤー の残りHP: 70

プレイヤーのターン! プレイヤー のHP: 70
プレイヤー が モンスター に 20 ダメージを与えた!
モンスター の残りHP: 20

モンスターのターン! モンスター のHP: 20
モンスター が プレイヤー に 15 ダメージを与えた!
プレイヤー の残りHP: 55

プレイヤーのターン! プレイヤー のHP: 55
プレイヤー が モンスター に 20 ダメージを与えた!
モンスター の残りHP: 0

モンスターを倒した!ゲームクリア!

5. 発展的なアイデア

ランダム攻撃力を追加

Random クラスを使い、攻撃力にランダム性を加えることでよりリアルな戦闘を実現できます。

public void Attack(Character target)
{
    Random random = new Random();
    int damage = random.Next(AttackPower - 5, AttackPower + 6); // 攻撃力 ±5
    Console.WriteLine($"{Name} が {target.Name} に {damage} ダメージを与えた!");
    target.HP -= damage;
    if (target.HP < 0) target.HP = 0;
}

複数のモンスター

  • リストを使って複数のモンスターと戦えるようにする。

アイテムの導入

  • プレイヤーが戦闘中にHPを回復できるアイテムを追加。

スコアシステム

  • 勝利するごとにスコアが加算される仕組みを追加。

これで、初心者でも簡単にオブジェクト指向の基礎を学べるゲームが完成しました!
さらに発展させることで、オブジェクト指向の理解が深まり、より複雑なプログラムにも挑戦できるようになります。

C#

Posted by hidepon