戦闘ゲームのダメージ計算について
解決したい事項
PythonでRPG風ゲームを作っている話は以前したのですが、そのダメージ計算式が上手くいきません…。
発生している問題
・計算式の例
playerHP=playerHP-(attack_cpu/2-playerguard/4)
HP:250の場合
この計算式だとダメージ数値が1つずれて、本来なら14ダメージ(残りHP:236)としたはずなのに、13ダメージになり、250-13で237になってしまうことがざらにあるという…。
該当するソースコード
game.py
import keyboard
import random
import sys
import time
from random import randrange
from random import randint
from player import Player
playerHP=250
enemyHP=250
playerMP=30
enemyMP=30
MPuse=5
player_name=str()
button=None
playerguard=randint(20,30)
enemyguard=randint(20,30)
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 standby():
print("aキー(攻撃)またはmキー(魔法)、gキー(防御)を押してください\n")
print("何かキーを打ってください\n")
def turn():
print("***{}のターン!***".format(player.name),sep='')
button=input("ボタンを押してね")
if button=="a":
global enemyHP
global playerHP
global enemyMP
global attack_my
global attack_cpu
global playerguard
global enemyguard
global magic_enemy
global per
attack_my=randint(35,50)
attack_cpu=randint(35,50)
if enemyHP > 0:
time.sleep(1)
enemyHP=enemyHP-(attack_my/2-enemyguard/4)
print("モンスター:{}のダメージ".format(int(attack_my/2-playerguard/4)))
print("\n")
if playerHP > 0:
if enemyHP > 0:
print("***敵のターン!***")
per=random.uniform(0.01,1.00)
if per>0.30:
playerHP=playerHP-(attack_cpu/2-playerguard/4)
print("モンスター「喰らえ!」")
print("{}:{}のダメージ".format(player.name,int(attack_cpu/2-playerguard/4)))
time.sleep(1)
if per<=0.30:
if enemyMP > 0:
time.sleep(1)
playerHP=playerHP-(attack_cpu/2-playerguard/4)
enemyMP-=MPuse
print("モンスター:「ファイアボール!」")
print("{}:{}のダメージ".format(player.name,int(attack_cpu/2-playerguard/4)))
time.sleep(1)
if enemyMP <= 0:
print("モンスター:「MPが足りない!」")
if button=="m":
global magic_my
global playerMP
attack_my=randint(35,50)
attack_cpu=randint(35,50)
magic_my=randint(55,70)
magic_enemy=randint(55,70)
if playerMP > 0:
time.sleep(1)
print("{}:「サンダーシュート!」".format(player.name),sep='')
if enemyHP > 0:
time.sleep(1)
enemyHP=enemyHP-(magic_my/2-enemyguard/4)
playerMP-=MPuse
print("モンスター:{}のダメージ".format(int(magic_my/2-playerguard/4)))
time.sleep(1)
else:
print("{}:「MPが足りない!」".format(player.name))
if playerHP > 0:
if enemyHP > 0:
print("***敵のターン!***")
per=random.uniform(0.01,1.00)
if per>0.30:
time.sleep(1)
playerHP=playerHP-(attack_cpu/2-playerguard/4)
print("モンスター:「喰らえ!」")
print("{}:{}のダメージ".format(player.name,int(attack_cpu/2-playerguard/4)))
time.sleep(1)
if per<=0.30:
if enemyMP > 0:
time.sleep(1)
playerHP=playerHP-(magic_enemy/2-playerguard/4)
enemyMP-=MPuse
print("モンスター:「ファイアボール!」")
print("{}:{}のダメージ".format(player.name,int(magic_enemy/2-playerguard/4)))
time.sleep(1)
else:
print("モンスター:「MPが足りない!」")
if button=="g":
if per >= 0.10:
time.sleep(1)
print("{}:「盾で防ぐぞ!」\n".format(player.name))
print("***敵のターン!***")
if enemyHP>0:
print("モンスター:「ファイアボール!」")
else:
print("モンスター:「喰らえ!」")
time.sleep(1)
print("モンスター:「やるな」")
print("{}:{}のダメージ".format(player.name,int(attack_cpu/2-playerguard/4)))
elif per < 0.10:
if enemyHP > 0:
print("***敵のターン!***")
per=random.uniform(0.01,1.00)
if per > 0.30:
time.sleep(1)
playerHP=playerHP-(attack_cpu/2-playerguard/4)
print("モンスター:「喰らえ!」")
print("{}:{}のダメージ".format(player.name,int(attack_cpu/2-playerguard/4)))
time.sleep(1)
if per<=0.30:
if enemyMP > 0:
time.sleep(1)
playerHP=playerHP-(magic_enemy/2-playerguard/4)
enemyMP-=MPuse
print("モンスター:「ファイアボール!」")
print("{}:{}のダメージ".format(player.name,int(magic_enemy/2-playerguard/4)))
time.sleep(1)
else:
print("モンスター:「MPが足りない!」")
while True:
title()
name_entry()
while True:
print("\n")
print("",str(player.name),"のHP:",int(playerHP)," 敵のHP:",int(enemyHP),"\n",str(player.name),"のMP:",int(playerMP)," モンスターのMP:",int(enemyMP),"\n",sep='')
standby()
turn()
if enemyHP<=0:
print("モンスターを倒した!\n")
print("************")
print("*GAME CLEAR*")
print("************")
sys.exit()
elif playerHP<=0:
print("{}は敗れた・・・\n".format(player.name))
print("GAME OVER")
sys.exit()
自分で試行してみたこと
計算式をFractionに直してみたものの、エラーを吐いてしまって駄目でした。
0