You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

游戏伤害计算异常:敌方HP减少量与伤害值差2及数值取整需求

问题解答

一、敌方HP减少量与显示伤害不符的问题

问题原因

攻击逻辑中生成了两次独立的随机伤害值:

  1. enemy_hurt函数内部调用player.generate_dmg(),这是实际扣减敌方HP的伤害值;
  2. 主程序攻击分支中再次调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 03:30:50