Python文本游戏战斗系统stamina不减少问题求助
问题分析与解决方案
问题根源
- 未更新stamina变量:
wound函数仅返回x-2的计算结果,但你只是打印该结果,没有将其赋值给玩家或敌人的stamina变量,导致实际数值从未改变。 - 敌人stamina未被跟踪更新:
enemyStamina初始是从Creature.goblin字典读取的固定值,后续受伤操作没有修改这个变量,循环显示时始终是初始的6点。 - 字符串方法调用错误:玩家受伤提示中的
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
相关产品推荐
相关产品推荐

