Pythonを使用した簡単な敵を倒すRPGを作ってみた

# Pythonを使用した簡単な敵を倒すRPGを作ってみた

こんにちは、プログラミング初心者の皆さん！今回は、Pythonを使って簡単なRPG（ロールプレイングゲーム）を作成する方法をご紹介します。このチュートリアルでは、基本的なゲームの構造から、プレイヤーと敵の設定、戦闘システムの実装までをステップバイステップで解説します。Pythonの基本的な知識があれば、誰でも楽しんで作成できる内容となっていますので、ぜひ最後までお付き合いください。

# はじめに

HI Engineer Collegeでは、実務未経験のエンジニアの方や、エンジニアに興味がある方を募集したおります、まずはお気軽にお問い合わせください。

※ (株)G&T（【内々定まで最短2週間】ゼロからしっかりじっくり研修☆20代活躍中！）

https://gat-company.com/

※ HI Engineer Collegeに興味あがある方はこちら（プログラミングを学習したい方）

https://hiengineer.jp/

※ ※ プログラミングでわからない事などを相談したい場合にはLINEオープンチャットにご参加ください（無料）

https://line.me/ti/g2/xRolADFbfopNo4vdgA9hmAlAlMgxvaIUSNDx8A?utm_source=invitation&utm_medium=link_copy&utm_campaign=default


---


## 目次

1. [必要な準備](#必要な準備)
2. [ゲームの基本構造](#ゲームの基本構造)
3. [プレイヤーと敵のクラス作成](#プレイヤーと敵のクラス作成)
4. [戦闘システムの実装](#戦闘システムの実装)
5. [ゲームのループ](#ゲームのループ)
6. [まとめ](#まとめ)

## 必要な準備

このチュートリアルを始める前に、以下のものを準備してください。

- **Pythonのインストール**: Python 3.xを[公式サイト](https://www.python.org/downloads/)からダウンロードしてインストールしてください。
- **テキストエディタ**: Visual Studio Code、Atom、Sublime Textなど、お好みのテキストエディタを用意してください。

## ゲームの基本構造

まず、ゲームの基本的な流れを設計します。今回はシンプルなテキストベースのRPGを作成します。プレイヤーは敵と戦い、敵を倒すことを目指します。

ゲームの流れは以下の通りです。

1. ゲームの開始
2. プレイヤーと敵のステータス表示
3. プレイヤーの攻撃
4. 敵の攻撃
5. 戦闘の結果判定
6. ゲームの終了

## プレイヤーと敵のクラス作成

オブジェクト指向プログラミングを活用して、プレイヤーと敵のクラスを作成します。これにより、ステータスや行動を簡単に管理できます。

```python
# game.py

import random

class Character:
    def __init__(self, name, hp, attack_power):
        self.name = name
        self.hp = hp
        self.attack_power = attack_power

    def is_alive(self):
        return self.hp > 0

    def attack(self, other):
        damage = random.randint(1, self.attack_power)
        other.hp -= damage
        print(f"{self.name}の攻撃！ {other.name}に{damage}のダメージを与えた。")
        if not other.is_alive():
            print(f"{other.name}を倒した！")

class Player(Character):
    def __init__(self, name="勇者", hp=30, attack_power=10):
        super().__init__(name, hp, attack_power)

class Enemy(Character):
    def __init__(self, name="スライム", hp=20, attack_power=8):
        super().__init__(name, hp, attack_power)
```

**解説:**

- `Character`クラスは、共通のキャラクター属性（名前、HP、攻撃力）とメソッド（攻撃や生存判定）を持っています。
- `Player`クラスと`Enemy`クラスは、`Character`クラスを継承し、それぞれに固有の初期値を設定しています。

## 戦闘システムの実装

次に、プレイヤーと敵が交互に攻撃し合う戦闘システムを実装します。

```python
def battle(player, enemy):
    print(f"バトル開始！ {player.name} vs {enemy.name}\n")
    while player.is_alive() and enemy.is_alive():
        # プレイヤーのターン
        player.attack(enemy)
        if not enemy.is_alive():
            break

        # 敵のターン
        enemy.attack(player)
        if not player.is_alive():
            break

        print(f"\n{player.name}のHP: {player.hp}")
        print(f"{enemy.name}のHP: {enemy.hp}\n")
    
    if player.is_alive():
        print("勝利！おめでとうございます！")
    else:
        print("敗北...また挑戦してください。")
```

**解説:**

- `battle`関数は、プレイヤーと敵が互いに攻撃し合うループを実行します。
- 各ターンでプレイヤーが先に攻撃し、敵が倒された場合はループを抜けます。
- 敵が生きている場合は、敵がプレイヤーを攻撃します。
- 各ターンの終わりに、双方のHPを表示します。
- 最終的に、勝敗を判定して結果を表示します。

## ゲームのループ

最後に、ゲームのメインループを作成します。プレイヤーがゲームを開始し、敵と戦闘を行います。

```python
def main():
    print("=== 簡単なRPGゲーム ===")
    player_name = input("あなたの名前を入力してください: ")
    player = Player(name=player_name)
    enemy = Enemy()

    print(f"\n{player.name}が冒険を始めた！\n")
    battle(player, enemy)

if __name__ == "__main__":
    main()
```

**解説:**

- `main`関数では、ゲームのタイトルを表示し、プレイヤーの名前を入力させます。
- `Player`インスタンスと`Enemy`インスタンスを作成し、`battle`関数を呼び出します。
- `if __name__ == "__main__":`により、このスクリプトが直接実行された場合に`main`関数が実行されます。

## 全体のコード

ここまでのステップをまとめた完全なコードは以下の通りです。

```python
# game.py

import random

class Character:
    def __init__(self, name, hp, attack_power):
        self.name = name
        self.hp = hp
        self.attack_power = attack_power

    def is_alive(self):
        return self.hp > 0

    def attack(self, other):
        damage = random.randint(1, self.attack_power)
        other.hp -= damage
        print(f"{self.name}の攻撃！ {other.name}に{damage}のダメージを与えた。")
        if not other.is_alive():
            print(f"{other.name}を倒した！")

class Player(Character):
    def __init__(self, name="勇者", hp=30, attack_power=10):
        super().__init__(name, hp, attack_power)

class Enemy(Character):
    def __init__(self, name="スライム", hp=20, attack_power=8):
        super().__init__(name, hp, attack_power)

def battle(player, enemy):
    print(f"バトル開始！ {player.name} vs {enemy.name}\n")
    while player.is_alive() and enemy.is_alive():
        # プレイヤーのターン
        player.attack(enemy)
        if not enemy.is_alive():
            break

        # 敵のターン
        enemy.attack(player)
        if not player.is_alive():
            break

        print(f"\n{player.name}のHP: {player.hp}")
        print(f"{enemy.name}のHP: {enemy.hp}\n")
    
    if player.is_alive():
        print("勝利！おめでとうございます！")
    else:
        print("敗北...また挑戦してください。")

def main():
    print("=== 簡単なRPGゲーム ===")
    player_name = input("あなたの名前を入力してください: ")
    player = Player(name=player_name)
    enemy = Enemy()

    print(f"\n{player.name}が冒険を始めた！\n")
    battle(player, enemy)

if __name__ == "__main__":
    main()
```

## 実行してみよう

1. 上記のコードを`game.py`という名前で保存します。
2. ターミナル（コマンドプロンプト）を開き、保存したディレクトリに移動します。
3. 以下のコマンドを実行してゲームを開始します。

```bash
python game.py
```

**実行例:**

```
=== 簡単なRPGゲーム ===
あなたの名前を入力してください: 太郎

太郎が冒険を始めた！

バトル開始！ 太郎 vs スライム

太郎の攻撃！ スライムに7のダメージを与えた。
スライムの攻撃！ 太郎に5のダメージを与えた。

太郎のHP: 25
スライムのHP: 13

太郎の攻撃！ スライムに9のダメージを与えた。
スライムを倒した！
勝利！おめでとうございます！
```

## まとめ

今回は、Pythonを使って簡単な敵を倒すRPGを作成する方法をご紹介しました。クラスを活用することで、プレイヤーや敵のステータス管理が容易になり、戦闘システムの実装もシンプルに行えました。さらに機能を追加することで、より複雑で楽しいゲームに発展させることも可能です。

### 追加アイデア

- **アイテムの導入**: 回復アイテムや強化アイテムを追加。
- **複数の敵**: 複数の敵との戦闘を実装。
- **レベルアップシステム**: プレイヤーが経験値を獲得し、レベルアップする仕組み。
- **スキルや魔法**: 特殊な攻撃や防御スキルを追加。

プログラミングは試行錯誤の連続です。ぜひ、自分だけのRPGを作り上げて楽しんでください！