Pythonを使用した簡単な敵を倒すRPGを作ってみた
こんにちは、プログラミング初心者の皆さん!今回は、Pythonを使って簡単なRPG(ロールプレイングゲーム)を作成する方法をご紹介します。このチュートリアルでは、基本的なゲームの構造から、プレイヤーと敵の設定、戦闘システムの実装までをステップバイステップで解説します。Pythonの基本的な知識があれば、誰でも楽しんで作成できる内容となっていますので、ぜひ最後までお付き合いください。
はじめに
HI Engineer Collegeでは、実務未経験のエンジニアの方や、エンジニアに興味がある方を募集したおります、まずはお気軽にお問い合わせください。
※ HI Engineer Collegeに興味あがある方はこちら(プログラミングを学習したい方)
※ ※ プログラミングでわからない事などを相談したい場合にはLINEオープンチャットにご参加ください(無料)
目次
必要な準備
このチュートリアルを始める前に、以下のものを準備してください。
- Pythonのインストール: Python 3.xを公式サイトからダウンロードしてインストールしてください。
- テキストエディタ: Visual Studio Code、Atom、Sublime Textなど、お好みのテキストエディタを用意してください。
ゲームの基本構造
まず、ゲームの基本的な流れを設計します。今回はシンプルなテキストベースのRPGを作成します。プレイヤーは敵と戦い、敵を倒すことを目指します。
ゲームの流れは以下の通りです。
- ゲームの開始
- プレイヤーと敵のステータス表示
- プレイヤーの攻撃
- 敵の攻撃
- 戦闘の結果判定
- ゲームの終了
プレイヤーと敵のクラス作成
オブジェクト指向プログラミングを活用して、プレイヤーと敵のクラスを作成します。これにより、ステータスや行動を簡単に管理できます。
# 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()
実行してみよう
- 上記のコードを
game.py
という名前で保存します。 - ターミナル(コマンドプロンプト)を開き、保存したディレクトリに移動します。
- 以下のコマンドを実行してゲームを開始します。
python game.py
実行例:
=== 簡単なRPGゲーム ===
あなたの名前を入力してください: 太郎
太郎が冒険を始めた!
バトル開始! 太郎 vs スライム
太郎の攻撃! スライムに7のダメージを与えた。
スライムの攻撃! 太郎に5のダメージを与えた。
太郎のHP: 25
スライムのHP: 13
太郎の攻撃! スライムに9のダメージを与えた。
スライムを倒した!
勝利!おめでとうございます!
まとめ
今回は、Pythonを使って簡単な敵を倒すRPGを作成する方法をご紹介しました。クラスを活用することで、プレイヤーや敵のステータス管理が容易になり、戦闘システムの実装もシンプルに行えました。さらに機能を追加することで、より複雑で楽しいゲームに発展させることも可能です。
追加アイデア
- アイテムの導入: 回復アイテムや強化アイテムを追加。
- 複数の敵: 複数の敵との戦闘を実装。
- レベルアップシステム: プレイヤーが経験値を獲得し、レベルアップする仕組み。
- スキルや魔法: 特殊な攻撃や防御スキルを追加。
プログラミングは試行錯誤の連続です。ぜひ、自分だけのRPGを作り上げて楽しんでください!