Python开发RPG战斗逻辑inp_fg输入后if语句失效程序退出问题
RPG战斗逻辑输入后无响应问题修复
问题现象
开发RPG游戏过程中,已完成玩家角色、哥布林敌方单位的基础属性配置,但战斗逻辑运行时,获取inp_fg变量的用户输入后程序直接终止,后续if条件判断分支完全不执行,无法进入预期的攻击、血量判定、战斗循环流程。
问题根因
- 类型不匹配:
input()函数默认返回字符串类型值,代码中直接将其与整数1做相等判断,条件永远为假,对应分支自然不会触发 - 拼写错误:随机数生成方法名写错,Python标准库随机方法为
random.randint(),代码中写为random.randit(),即使分支触发也会抛出属性错误 - 作用域错误:内部函数
actions()修改eh、ph变量时,未声明引用外层函数的同名变量,会触发局部变量未定义报错 - 逻辑错误:操作选项提示笔误,攻击、逃跑两个选项都标注为输入1,存在逻辑冲突;血量判定顺序错误,玩家死亡的判断分支放在哥布林胜利判断之后,永远无法触发
修复后完整代码
import random def fight(): n = 1 ph = stats.user_hp pa = stats.user_att pd = stats.user_df psta = stats.user_sta eh = 0 ea = 0 ed = 0 if n == 1: eh = goblin.health ea = goblin.attack ed = goblin.defence def actions(): nonlocal eh, ph print("Options:\nEnter 1 to attack\nEnter 2 to run away(costs stamina)") inp_fg = int(input()) if inp_fg == 1: print("You launch an attack!") p_ac = random.randint(1, 5) e_ac = random.randint(1, 5) eh -= p_ac ph -= e_ac print(f"You dealt {p_ac} damage to the goblin, took {e_ac} damage in return") if ph <= 0: print("You died") return if eh <= 0: print("You won") return actions() elif inp_fg == 2: # 可自行补充消耗耐力的逃跑逻辑 if psta >= 10: print("You successfully ran away from the battle") return else: print("You don't have enough stamina to run away") actions() else: print("Invalid input, please try again") actions() actions()
关键修改说明
- 对用户输入结果做
int()类型转换,保证和判断条件的数值类型匹配,让攻击分支可以正常触发 - 修正随机数方法的拼写错误,避免运行时报错
- 用
nonlocal关键字声明内部函数使用外层的血量变量,解决作用域引用问题 - 修正选项提示笔误,将逃跑操作的输入值改为2,同时补充非法输入的重试逻辑
- 调整血量判定顺序:优先判定玩家死亡、再判定哥布林死亡,双方均存活时才递归进入下一轮行动,避免分支被覆盖
- 补充了基础的伤害打印、耐力消耗逃跑的逻辑占位,可根据实际需求调整数值和规则
内容的提问来源于stack exchange,提问作者Kawalpreet Singh_ 52
相关产品推荐
相关产品推荐

