Python文本类游戏物品无法添加至库存问题求助
Python文本冒险游戏物品拾取功能修复
你的代码中物品拾取功能失效主要源于几个核心逻辑错误,以下是修复方案及完整代码:
问题核心点
- 输入指令判断逻辑错误(将列表与字符串直接对比,且指令关键词与游戏提示不匹配)
- 物品存在性验证逻辑错误
- 未处理物品拾取后房间物品的移除,导致重复拾取
- 无差别显示物品提示,造成误导
修复后完整代码
def game_instructions(): # 打印主菜单和命令说明 print("杀手小丑文本冒险游戏") print("你必须收集全部6件物品才能获胜,否则会被杀手小丑杀死!!") print("移动命令:go South, go North, go East, go West, Exit") print("拾取物品:get '物品名称'") rooms = { '前门': {'South': '游戏区', 'East': '售票亭', 'item': 'none'}, '游戏区': {'North': '前门', 'East': '奖品区', 'West': '美食广场', 'South': '储藏棚', 'item': '大木槌'}, "美食广场": {'East': '游戏区', 'item': '派'}, '奖品区': {'West': '游戏区', 'North': '欢乐屋', 'item': '网'}, '欢乐屋': {'South': '奖品区', 'item': 'none'}, '储藏棚': {'North': '游戏区', 'East': '停车场', 'item': '手电筒'}, '售票亭': {'West': '前门', 'item': '小丑驱逐手册'}, '停车场': {'West': '储藏棚', 'item': '钥匙'} } def room_movement(current_room, move, rooms): current_room = rooms[current_room][move] return current_room def user_info(current_room, inventory): print('你现在在 {}'.format(current_room)) print('背包:', inventory) print('*' * 25) def get_item(current_room): if 'item' in rooms[current_room]: return rooms[current_room]['item'] else: return '这个房间没有物品!' game_instructions() input('按回车键继续') inventory = [] current_room = '前门' while current_room != '欢乐屋': user_info(current_room, inventory) move_input = input('输入你的下一步操作。\n').strip().lower().split() current_item = rooms[current_room]['item'] # 处理拾取物品指令 if len(move_input) >= 2 and move_input[0] == 'get': # 拼接多词物品名称 target_item = ' '.join(move_input[1:]).title() if current_item != 'none' and current_item == target_item: inventory.append(current_item) # 标记房间物品已被拾取 rooms[current_room]['item'] = 'none' print(f'你拾取了 {current_item}!') elif current_item == 'none': print('这个房间已经没有可拾取的物品了!') else: print(f'这里没有 {target_item}!') continue # 处理移动指令 if len(move_input) >= 2 and move_input[0] == 'go': direction = move_input[1].capitalize() if direction in rooms[current_room].keys(): current_room = room_movement(current_room, direction, rooms) continue else: print('无法向这个方向移动!') continue # 处理退出指令 if len(move_input) == 1 and move_input[0] == 'exit': print('游戏结束!') break # 无效指令提示 print('无效命令,请重新输入!')
关键修改说明
- 输入处理优化:将输入转为小写后拆分,避免大小写判断混乱;支持多词物品名称的拼接(如
get 大木槌可正确识别) - 指令匹配修正:按照游戏提示的
get关键词判断拾取指令,修复了原代码中列表与字符串对比的逻辑错误 - 物品拾取逻辑完善:拾取成功后将房间物品标记为
none,防止重复拾取;增加了空房间的提示反馈 - 提示逻辑修正:移除无差别物品提示,仅在对应操作时给出准确反馈
- 函数解耦:为
user_info添加参数,不再依赖全局变量,代码健壮性提升 - 中文本地化:将游戏文本转为中文(如需英文版本可自行回译)
内容的提问来源于stack exchange,提问作者M1KEWH000
相关产品推荐
相关产品推荐

