You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python文本类游戏优化:全物品收集自动胜利及代码建议

问题解决与代码优化建议

需求修改实现

要实现「背包满6个物品自动胜利,进入Innkeepers Suite直接失败」的逻辑,核心修改点如下:

  1. 每次收集物品后立即检查背包数量,满6则触发胜利并结束游戏
  2. 进入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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 19:27:33