IT140文本冒险游戏开发求助:房间物品显示与拾取功能问题
文本冒险游戏功能修复方案
针对你遇到的当前房间物品显示、物品拾取及房间切换后物品展示问题,以下是修复后的完整代码及关键修改说明:
修复后的代码
rooms = { '主洞穴': {'南': '治疗洞穴', '北': '飞行洞穴', '西': '念力洞穴', '东': '神圣洞穴'}, '念力洞穴': {'东': '主洞穴', '物品': '念力'}, '飞行洞穴': {'南': '主洞穴', '东': '原始洞穴', '物品': '飞行'}, '原始洞穴': {'西': '飞行洞穴', '物品': '宝石'}, '力量洞穴': {'南': '神圣洞穴', '物品': '力量'}, '神圣洞穴': {'北': '力量洞穴', '西': '主洞穴', '物品': '古籍'}, '治疗洞穴': {'北': '主洞穴', '东': '诅咒洞穴', '物品': '治疗'}, '诅咒洞穴': {'西': '治疗洞穴', '物品': '反派'} } 当前房间 = '主洞穴' 背包 = [] def 获取新房间(当前房间, 方向): # 简化房间切换逻辑,直接通过字典获取,不存在则返回原房间 return rooms[当前房间].get(方向, 当前房间) def 显示当前房间物品(): # 检查当前房间是否有物品,避免无物品时报错 if '物品' in rooms[当前房间]: print(f'你看到了 {rooms[当前房间]["物品"]}') else: print('这里没有任何物品') def 显示操作指南(): print("欢迎来到力量平衡文本冒险游戏!") print("") print("你必须获得宝石并收集4种能力,才能击败反派赢得游戏。") print("") print("移动指令:去 南/北/东/西") print("") print("拾取物品:get 物品名称/能力名称") print("") print("<< >< >< >< >< >< >< >< >< >< >< >< >< >< >< >< >< >>") 显示操作指南() while True: print(f'\n你现在在 {当前房间}') print(f'背包:{背包}') 显示当前房间物品() 输入指令 = input('\n请输入移动方向(如:去 北)、拾取指令(如:get 念力)或输入exit退出游戏:') 输入指令 = 输入指令.strip().lower() if 输入指令 == 'exit': print('\n感谢游玩!') break # 处理移动指令 if 输入指令.startswith('go ') or 输入指令.startswith('去 '): 方向 = 输入指令.split()[1] 新房间 = 获取新房间(当前房间, 方向) if 新房间 == 当前房间: print('\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~') print('\n那个方向没有洞穴,请重试!') else: 当前房间 = 新房间 # 处理拾取指令 elif 输入指令.startswith('get '): 目标物品 = 输入指令.split(' ', 1)[1] # 检查当前房间是否有该物品且未被拾取 if '物品' in rooms[当前房间] and rooms[当前房间]['物品'] == 目标物品: 背包.append(目标物品) del rooms[当前房间]['物品'] print(f'你拾取了 {目标物品}!') else: print('这里没有这个物品,或者已经被拾取了!') else: print('\n无效指令!请输入正确的移动或拾取指令。')
关键修改说明
- 修复无物品房间报错问题:新增
显示当前房间物品()函数,先检查房间字典中是否存在物品键,避免主洞穴这类无物品房间直接访问['物品']导致KeyError。 - 实现物品拾取功能:添加对
get指令的处理逻辑,验证目标物品是否存在于当前房间,拾取后将物品加入背包并从房间中删除(避免重复拾取)。 - 统一变量命名:将原代码中混乱的
inventory/Inventory改为统一的背包,current_room改为当前房间,提升代码可读性。 - 简化房间切换逻辑:
获取新房间()函数直接使用字典的get方法,无需循环遍历,更高效简洁。 - 优化指令输入处理:支持中文指令(如“去 北”)和英文指令(如“go north”),同时统一转为小写处理,避免大小写输入错误。
- 修复切换房间后物品展示:每次循环都会调用
显示当前房间物品(),切换房间后自动展示新房间的物品状态(已拾取的房间不会再显示物品)。
内容的提问来源于stack exchange,提问作者Eddie
相关产品推荐
相关产品推荐

