游戏伤害计算异常:敌方HP减少量与伤害值差2及数值取整需求
问题解答
一、敌方HP减少量与显示伤害不符的问题
问题原因
攻击逻辑中生成了两次独立的随机伤害值:
enemy_hurt函数内部调用player.generate_dmg(),这是实际扣减敌方HP的伤害值;- 主程序攻击分支中再次调用
player.generate_dmg(),这是打印展示的伤害值。
两次随机生成的数值大概率不同,导致你看到敌方HP减少量和显示伤害不一致(你观察到的“始终少2”是随机结果的巧合)。
修复方案
修改攻击分支代码,只生成一次伤害值,同时用于扣血和打印:
if list_chooser == 0: dmg = player.generate_dmg() # 将生成的dmg传递给enemy_hurt,避免函数内部重复生成 enemy_hurt(0, dmg) print("You did " + str(dmg) + " damage") player_hurt(enemies[0]) if cricket.hp == 0: os.system('clear') print("You have killed the cricket") player.hp = player.maxhp running = False # 后续添加经验值元素
同时修改enemy_hurt函数,接收外部传入的伤害值:
def enemy_hurt(es, dmg): enemies[es].damage_taken(dmg) print("Enemies HP is " + str(enemies[es].hp) + " / " + str(enemies[es].maxhp))
二、数值向上/向下取整的实现
在Python中可通过math模块实现:
1. 向下取整
使用math.floor(),返回小于等于目标数的最大整数:
import math num = 3.7 print(math.floor(num)) # 输出3 num = -3.7 print(math.floor(num)) # 输出-4
注:直接用int()对正数也能实现向下取整,但对负数是向0取整,与math.floor()行为不同:
print(int(3.7)) # 输出3 print(int(-3.7)) # 输出-3
2. 向上取整
使用math.ceil(),返回大于等于目标数的最小整数:
import math num = 3.2 print(math.ceil(num)) # 输出4 num = -3.2 print(math.ceil(num)) # 输出-3
内容的提问来源于stack exchange,提问作者Sadturtle0
相关产品推荐
相关产品推荐

