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

Python文本游戏战斗系统stamina不减少问题求助

问题分析与解决方案

问题根源

  1. 未更新stamina变量:wound函数仅返回x-2的计算结果,但你只是打印该结果,没有将其赋值给玩家或敌人的stamina变量,导致实际数值从未改变。
  2. 敌人stamina未被跟踪更新:enemyStamina初始是从Creature.goblin字典读取的固定值,后续受伤操作没有修改这个变量,循环显示时始终是初始的6点。
  3. 字符串方法调用错误:玩家受伤提示中的name.upper缺少括号,会打印函数对象而非大写的玩家名字。

修复方案

1. 正确更新stamina变量

调用wound函数后,必须将返回值重新赋值给对应的变量:

  • 玩家受伤时:tempStamina = Combat.wound(tempStamina)
  • 敌人受伤时:enemyStamina = Combat.wound(enemyStamina)

2. 保留敌人stamina的独立跟踪变量

不需要修改原Creature.goblin字典(避免影响后续生成的新哥布林),只需要维护enemyStamina这个局部变量即可。

3. 修复字符串方法调用

将name.upper改为name.upper(),确保输出大写的玩家名称。

修改后的完整代码片段

tempSkill = skill
tempStamina = stamina
tempLuck = luck

enemyName = Creature.goblin['enemy_name']
enemySkillTemp = Creature.goblin['skill']
# 初始化敌人当前stamina为字典中的初始值
enemyStamina = Creature.goblin['stamina']

while enemyStamina > 0 and tempStamina > 0:
    print(f"\nyou encountered {enemyName}!")
    print(f"{enemyName} | SKILL: {enemySkillTemp} | STAMINA: {enemyStamina}")
    print(f"{name.upper()} | SKILL: {tempSkill} | STAMINA: {tempStamina}")

    print("1. ATTACK")
    print("2. ITEM")
    print("3. FLEE")

    choice = input("\nMake your choice: (1, 2, 3): ")
    choice = int(choice)
    if choice == 1:
        playerAS = Combat.attackSkillRoll(tempSkill)
        enemyAS = Combat.attackSkillRoll(enemySkillTemp)
        print("\nATTACK!")
        print(f"{enemyName} rolled {enemyAS - enemySkillTemp}! | Attack Strength: {enemyAS}")
        print(f"{name.upper()} rolled {playerAS - tempSkill}! | Attack Strength: {playerAS}")
        if enemyAS > playerAS:
             print(f"{name.upper()} wounded! (-2 STAMINA)")
             # 更新玩家stamina并打印当前值
             tempStamina = Combat.wound(tempStamina)
             print(f"Current STAMINA: {tempStamina}")
        elif playerAS > enemyAS:
             print(f"{enemyName} wounded! (-2 STAMINA)")
             # 更新敌人stamina并打印当前值
             enemyStamina = Combat.wound(enemyStamina)
             print(f"Current {enemyName} STAMINA: {enemyStamina}")
             print("1. Continue")
             print("2. Test your LUCK?")
             choice2 = input ("Make your choice: (1, 2): ")
             choice2 = int(choice2)
             if choice2 == 1:
                  continue
             elif choice2 == 2:
                  pass
             else:
                  print("Try that again...")
              
    elif choice == 2:
        print("Here are your items!")
    elif choice == 3:
        print("You fled... (-2 STAMINA)")
        # 逃跑也要更新玩家stamina
        tempStamina = Combat.wound(tempStamina)
    else:
        print("Try that again...")

对应的wound函数无需修改,保持原逻辑即可:

def wound(x):
    return x - 2

内容的提问来源于stack exchange,提问作者Toby

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 03:59:57