・はじめに
初心者ながら、Pythonで簡単なRPGゲーム風のテキストゲームをVScodeで作ってみました。
かなりお粗末な出来ではありますが、こういったシステムになっています。
python_battle_game_cord.py
#python_battle_game_cord.py
import keyboard
import random
from random import randint
from random import uniform
#プレイヤーのクラス(名前のみ格納)
class Player:
def __init__ (self,name:str):
self.name=name
#呪文名
thunder="サンダーシュート"
flame="フレイムバースト"
#魔法の切り替え
magics={1:thunder,2:flame}
#敵キャラのクラス(名前などいろいろ格納)
class Monster:
def __init__(self,name,spell,hp,mp,ap,ap_m,gp):
self.name=name
self.spell=spell
self.hp=hp
self.mp=mp
self.ap=ap
self.ap_m=ap_m
self.gp=gp
#敵データ
knight=Monster("ゴーストナイト","ダークスラッシュ",200,30,randint(50,55),randint(60,65),20)
dragon=Monster("ギルドラゴン","バーンフレイム",270,40,randint(60,65),randint(70,75),25)
wizard=Monster("ダークウィザー","キルストーム",220,50,randint(70,75),randint(80,85),25)
caeser=Monster("ネビュラシーザー","ヘル・デストロイ",300,60,randint(80,85),randint(100,105),30)
#ランダムに対戦相手を選ぶ→決定
monsters=[knight,dragon,wizard,caeser]
monster=random.choice(monsters)
import sys
import time
#プレイヤーステータス
playerHP=300
HPmax=300
playerMP=30
enemyMP=30
playerguard=random.randint(40,45)
MPuse=5
MPuse_F=10
heal_d=5
drink=1
add=100
player_name=str()
button=None
#処理云々
def title():
print("*************************************")
print("*かんたんクエスト ~勇者よいそげ!~*")
print("*************************************")
#プレイヤー名入力
def name_entry():
global player
global player_name
player_name=input('名前を入力してください>>>')
player=Player(player_name)
print('勇者{}よ、行け!'.format(player.name),sep='')
#ここでプレイヤー名の出力
def show_text(player_name):
print(format(player_name))
#出現したモンスターを表示
def appear():
print(monster.name+'出現!\n',sep='')
#操作説明
def standby():
print("a(攻撃)またはm(攻撃魔法)、s(強力攻撃魔法)、g(防御)、d(回復薬)を押してください\n")
print("何かキーを打ってください\n")
#攻撃力一覧
def monster_ap():
knight(ap=randint(50,55),ap_m=randint(60,65),gp=20)
dragon(ap=randint(60,65),ap_m=randint(70,75),gp=25)
wizard(ap=randint(70,75),ap_m=randint(80,85),gp=25)
caeser(ap=randint(80,85),ap_m=randint(100,105),gp=30)
#主人公のターンが回ってきた時のメッセージ
def turn():
print("***{}のターン!***".format(player.name),sep='')
button=input("ボタンを押してね")
#通常攻撃
if button=="a":
global playerHP
global enemyMP
global attack_my
global attack_cpu
global playerguard
global magic_enemy
global per
attack_my=randint(55,60)
attack_cpu=randint(55,60)
if monster.hp > 0:
time.sleep(1)
monster.hp=monster.hp-(attack_my//2-monster.gp//4)
print("{}:{}のダメージ".format(monster.name,attack_my//2-monster.gp//4))
time.sleep(1)
if playerHP > 0:
if monster.hp > 0:
print("***敵のターン!***")
per=random.uniform(0.01,1.00)
if per>0.30:
playerHP=playerHP-(monster.ap//2-playerguard//4)
print("{}:「喰らえ!」".format(monster.name))
print("{}:{}のダメージ".format(player.name,monster.ap//2-playerguard//4))
time.sleep(1)
if per<=0.30:
if monster.mp > 0:
playerHP=playerHP-(monster.ap_m//2-playerguard//4)
monster.mp-=MPuse
print("{}:「{}!」".format(monster.name,monster.spell))
print("{}:{}のダメージ".format(player.name,monster.ap_m//2-playerguard//4))
time.sleep(1)
if monster.mp <= 0:
print("{}:「MPが足りない!」".format(monster.name))
#攻撃魔法
if button=="m":
global magic_my
global playerMP
magic_my=randint(85,90)
magic_enemy=randint(85,90)
if playerMP > 0:
time.sleep(1)
print("{}:「{}!」".format(player.name,magics[1]),sep='')
if monster.hp > 0:
time.sleep(1)
monster.hp=monster.hp-(magic_my//2-monster.gp//4)
playerMP-=MPuse
print("{}:{}のダメージ".format(monster.name,magic_my//2-monster.gp//4))
time.sleep(1)
else:
print("{}:「MPが足りない!」".format(player.name))
if playerHP > 0:
if monster.hp > 0:
print("***敵のターン!***")
per=random.uniform(0.01,1.00)
if per>0.30:
time.sleep(1)
playerHP=playerHP-(monster.ap//2-playerguard//4)
print("{}:「喰らえ!」".format(monster.name))
print("{}:{}のダメージ".format(player.name,monster.ap//2-playerguard//4))
time.sleep(1)
if per<=0.30:
if monster.hp > 0:
time.sleep(1)
playerHP=playerHP-(monster.ap_m//2-playerguard//4)
monster.mp-=MPuse
print("{}:「{}!」".format(monster.name,monster.spell))
print("{}:{}のダメージ".format(player.name,monster.ap_m//2-playerguard//4))
time.sleep(1)
else:
print("{}:「MPが足りない!」".format(monster.name))
#強力攻撃魔法
if button=="s":
magic_my=randint(105,110)
if playerMP > 0:
time.sleep(1)
print("{}:「{}!」".format(player.name,magics[2]),sep='')
if monster.hp > 0:
time.sleep(1)
monster.hp=monster.hp-(magic_my//2-monster.gp//4)
playerMP-=MPuse_F
print("{}:{}のダメージ".format(monster.name,magic_my//2-monster.gp//4))
time.sleep(1)
else:
print("{}:「MPが足りない!」".format(player.name))
if playerHP > 0:
if monster.hp > 0:
print("***敵のターン!***")
per=random.uniform(0.01,1.00)
if per>0.30:
time.sleep(1)
playerHP=playerHP-(monster.ap//2-playerguard//4)
print("{}:「喰らえ!」".format(monster.name))
print("{}:{}のダメージ".format(player.name,monster.ap//2-monster.gp//4))
time.sleep(1)
if per<=0.30:
if monster.hp > 0:
time.sleep(1)
playerHP=playerHP-(monster.ap_m//2-playerguard//4)
monster.mp-=MPuse
print("{}:「{}!」".format(monster.name,monster.spell))
print("{}:{}のダメージ".format(player.name,monster.ap_m//2-monster.gp//4))
time.sleep(1)
else:
print("{}:「MPが足りない!」".format(monster.name))
#防御
if button=="g":
per=random.uniform(0.01,1.00)
per2=random.uniform(0.01,1.00)
if (per >= 0.10) & (per2 > 0.30) & (per2 <= 1.00):
time.sleep(1)
print("{}:「盾で防ぐぞ!」\n".format(player.name))
print("***敵のターン!***")
if monster.hp > 0:
print("{}:「喰らえ!」".format(monster.name))
time.sleep(1)
print("攻撃を弾いた!")
time.sleep(1)
print("{}:「やるな」".format(monster.name))
if monster.mp>0:
if (per >= 0.10) & (per2 <= 0.30):
print("{}:「{}!」".format(monster.name,monster.spell))
time.sleep(1)
print("攻撃を弾いた!")
time.sleep(1)
print("{}:「やるな」".format(monster.name))
elif (per < 0.10) & (per2 > 0.30) & (per2 <= 1.00):
if monster.hp > 0:
print("***敵のターン!***")
per=random.uniform(0.01,1.00)
time.sleep(1)
playerHP=playerHP-(monster.ap//2-monster.gp//4)
print("{}:「喰らえ!」".format(monster.name))
print("{}:{}のダメージ".format(player.name,monster.ap//2-monster.gp//4))
time.sleep(1)
if (per > 0.10) & (per2 <= 0.30):
if monster.mp > 0:
print("***敵のターン!***")
per=random.uniform(0.01,1.00)
time.sleep(1)
playerHP=playerHP-(monster.ap_m//2-player.gp//4)
monster.mp-=MPuse
print("{}:「{}!」".format(monster.name,monster.spell))
print("{}:{}のダメージ".format(player.name,monster.ap_m//2-playerguard//4))
time.sleep(1)
else:
print("{}:「MPが足りない!」".format(monster.name))
#回復薬を飲む
if button=="d":
global heal_d
global drink
global add
if HPmax<=playerHP:
print("{}:「今はいらないな」".format(player.name))
return turn()
if drink>0:
heal_d-=drink
playerHP+=add
if playerHP>300:
playerHP=300
print("{}:「力がみなぎって来たぞ!」".format(player.name))
print("ライフが回復した!")
if drink<=0:
print("{}:「回復薬が無い!」".format(player.name))
per=random.uniform(0.01,1.00)
if per>=0.30:
if monster.hp > 0:
print("***敵のターン!***")
time.sleep(1)
playerHP=playerHP-(monster.ap//2-playerguard//4)
print("{}:「喰らえ!」".format(monster.name))
print("{}:{}のダメージ".format(player.name,monster.ap//2-playerguard//4))
time.sleep(1)
if per<0.30:
if monster.hp > 0:
if monster.mp > 0:
print("***敵のターン!***")
time.sleep(1)
playerHP=playerHP-(monster.ap_m//2-playerguard//4)
monster.mp-=MPuse
print("{}:「{}!」".format(monster.name,monster.spell))
print("{}:{}のダメージ".format(player.name,monster.ap_m//2-playerguard//4))
time.sleep(1)
else:
print("{}:「MPが足りない!」".format(monster.name))
#ゲームの一連の動作
while True:
title()
name_entry()
time.sleep(1)
appear()
time.sleep(1)
while True:
print("\n",str(player.name),"のHP:",int(playerHP)," ",str(player.name),"のMP:",int(playerMP)," ","残り回復薬:",int(heal_d),"\n{}のHP:".format(monster.name),int(monster.hp),""," {}のMP:".format(monster.name),int(monster.mp),"\n",sep='')
standby()
turn()
if monster.hp<=0:
print("モンスターを倒した!\n")
print("************")
print("*GAME CLEAR*")
print("************")
sys.exit()
elif playerHP<=0:
print("{}は敗れた・・・\n".format(player.name))
print("GAME OVER")
sys.exit()
・あとがき
以上のようなガバガバプログラムになっているのですが、突っ込みどころ満載なので、まだ改良の余地があると思います。
ではまた。