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

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('无效命令,请重新输入!')

关键修改说明

  1. 输入处理优化:将输入转为小写后拆分,避免大小写判断混乱;支持多词物品名称的拼接(如get 大木槌可正确识别)
  2. 指令匹配修正:按照游戏提示的get关键词判断拾取指令,修复了原代码中列表与字符串对比的逻辑错误
  3. 物品拾取逻辑完善:拾取成功后将房间物品标记为none,防止重复拾取;增加了空房间的提示反馈
  4. 提示逻辑修正:移除无差别物品提示,仅在对应操作时给出准确反馈
  5. 函数解耦:为user_info添加参数,不再依赖全局变量,代码健壮性提升
  6. 中文本地化:将游戏文本转为中文(如需英文版本可自行回译)

内容的提问来源于stack exchange,提问作者M1KEWH000

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 10:27:48