Python文本类游戏优化:全物品收集自动胜利及代码建议
问题解决与代码优化建议
需求修改实现
要实现「背包满6个物品自动胜利,进入Innkeepers Suite直接失败」的逻辑,核心修改点如下:
- 每次收集物品后立即检查背包数量,满6则触发胜利并结束游戏
- 进入Innkeepers Suite房间时直接判定失败,契合「被反派抓住」的叙事
修改后的完整代码:
rooms = { 'Dining Room': {'South': 'Bedroom', 'North': 'Shop', "East": 'Kitchen', 'West': 'Study', 'item': 'none'}, 'Bedroom': {'North': 'Dining Room', 'East': "Innkeepers Suite", 'item': 'Longbow'}, 'Garden': {'West': 'Shop', 'item': 'Book'}, 'Shop': {'East': 'Garden', 'South': 'Dining Room', 'item': 'Staff'}, 'Study': {'East': 'Dining Room', 'item': 'Gold Coins'}, 'Kitchen': {'West': 'Dining Room', 'North': 'Stables', 'item': 'Chest'}, 'Stables': {'South': 'Kitchen', 'item': 'Horse'}, 'Innkeepers Suite': {'West': 'Bedroom', 'item': 'Seeker'} } def instructions(): print('欢迎来到莲花客栈文本游戏') print('在被追踪者抓住前,收集客栈里的6件物品即可逃脱!') print('移动指令:West, East, North, South(支持大小写输入)') print('收集物品:输入"get item"') def player_status(current_room, inventory): print("-" * 40) print(f'你现在在:{current_room}') print(f'背包物品:{inventory}') room_item = rooms[current_room]['item'] print(f'房间内物品:{room_item if room_item != "none" else "无"}') def main(): current_room = 'Dining Room' inventory = [] instructions() while True: player_status(current_room, inventory) # 先检查是否已集齐所有物品 if len(inventory) == 6: print('恭喜!你集齐所有物品,成功逃脱!') break player_move = input('请输入指令:\n').strip().capitalize() # 处理移动指令 if player_move in rooms[current_room]: current_room = rooms[current_room][player_move] # 进入反派房间直接失败 if current_room == 'Innkeepers Suite': print('糟糕!你被追踪者抓住了,游戏失败!') break # 处理收集物品指令 elif player_move == 'Get Item': room_item = rooms[current_room]['item'] if room_item != 'none': inventory.append(room_item) print(f'你获得了:{room_item}') rooms[current_room]['item'] = 'none' else: print('这个房间里没有可收集的物品!') else: print('无效指令,请重新输入!') if __name__ == "__main__": main() print('游戏结束!感谢游玩')
代码优化建议
- 变量命名规范:改用Python标准蛇形命名法,比如
currentRoom改为current_room、Inventory改为inventory,提升代码可读性 - 修复语法错误:原代码中
main()函数内嵌套的instructions()和player_location()未缩进,会触发语法报错,已在修改版中修正 - 输入容错处理:对用户输入做
strip()去空格、capitalize()统一首字母大写,支持大小写不敏感的指令输入(比如输入north也能识别) - 提取重复逻辑:把玩家状态打印、胜利失败判定等重复代码封装成独立函数,减少冗余
- 保护原始数据:如果需要支持多轮游戏,可在启动时复制房间字典:
game_rooms = rooms.copy(),后续操作副本避免修改原始数据 - 提示文本优化:将英文提示改为中文,调整表述更贴合游戏叙事,降低理解成本
- 脚本规范优化:用
if __name__ == "__main__":包裹主函数调用,符合Python脚本标准结构,方便模块导入时不自动执行游戏
内容的提问来源于stack exchange,提问作者a.brown.94
相关产品推荐
相关产品推荐

