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

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

はじめに

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

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

HOME

エンジニア研修のことなら「HI Engineer College」にお任せください。独⾃のカリキュラムに基づいた法人向けIT研修や、実践的なカリキュラムで即戦⼒のエンジニアスキルが…

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

LINE OPENCHAT

エンジニア向けチャットルーム「TechTalk」参加者募集中! プログラミングやITの話題を気軽に共有し、学び合えるエンジニアのためのチャットルーム「TechTalk」では、新…


目次

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

必要な準備

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

  • Pythonのインストール: Python 3.xを公式サイトからダウンロードしてインストールしてください。
  • テキストエディタ: Visual Studio Code、Atom、Sublime Textなど、お好みのテキストエディタを用意してください。

ゲームの基本構造

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

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

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

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

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

# 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クラスを継承し、それぞれに固有の初期値を設定しています。

戦闘システムの実装

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

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を表示します。
  • 最終的に、勝敗を判定して結果を表示します。

ゲームのループ

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

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関数が実行されます。

全体のコード

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

# 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. 以下のコマンドを実行してゲームを開始します。
python game.py

実行例:

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

太郎が冒険を始めた!

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

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

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

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

まとめ

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

追加アイデア

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

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