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

Python文本游戏Get Item函数故障排查求助

Python文本游戏Get Item函数故障排查与修复

问题描述

2-3个月前为学校完成了这个Python文本游戏项目,之后没再接触Python。现在想把它放进作品集,但Get Item函数存在故障:进入有物品的房间后,输入“get item”能显示物品,但无法将其加入inventory,之后也无法移动房间,陷入循环;且物品出现后无法用“Exit”指令退出游戏。此前move_room功能正常,未添加Get Item函数时无问题。怀疑故障原因可能是:

  1. 除起始房间外所有房间都有物品,不想用“None”作为占位符;
  2. directions_available将物品显示为可移动方向;
  3. 其他未知错误。
    打算基于结构更清晰的第二段代码修改,恳请帮忙解决问题。

故障修复方案

1. 修正物品加入Inventory的核心逻辑

检查get_item函数是否正确完成「移除房间物品→加入玩家背包」的流程,同时确保主循环接收更新后的状态:

def get_item(current_room, inventory):
    # 仅当房间存在item键时执行获取逻辑(无需None占位)
    if 'item' in current_room:
        item = current_room.pop('item')
        inventory.append(item)
        print(f"You picked up the {item}!")
    else:
        print("There's nothing here to take.")
    # 返回更新后的房间和背包状态,供主循环同步
    return current_room, inventory

2. 修复directions_available的方向识别错误

明确区分房间的「方向键」和「物品键」,避免把物品当作可移动方向:

def directions_available(current_room):
    # 定义固定的有效方向列表
    valid_dirs = ['north', 'south', 'east', 'west']
    # 只提取房间字典中属于有效方向的键
    return [dir for dir in valid_dirs if dir in current_room]

3. 解除主循环的阻塞问题

确保get item和Exit指令执行后,主循环能正常流转或终止:

# 初始化游戏状态
inventory = []
# 假设rooms是你的房间字典,start为起始房间键
current_room = rooms['start']

while True:
    # 打印当前房间信息
    print(f"\n=== {current_room['name']} ===")
    print(current_room['description'])
    
    # 显示房间内物品(如果存在)
    if 'item' in current_room:
        print(f"\nYou notice a {current_room['item']} here.")
    
    # 显示可用移动方向
    available_dirs = directions_available(current_room)
    print(f"\nYou can go: {', '.join(available_dirs)}")
    print("Commands: 'go [direction]', 'get item', 'Exit'")

    # 处理玩家输入
    command = input("\nEnter command: ").lower().strip()

    if command == 'exit':
        print("Thanks for playing!")
        break  # 直接终止循环,退出游戏
    
    elif command.startswith('go '):
        direction = command.split()[1]
        if direction in available_dirs:
            current_room = rooms[current_room[direction]]
        else:
            print("You can't move that way!")
    
    elif command == 'get item':
        # 同步更新房间和背包状态
        current_room, inventory = get_item(current_room, inventory)
        # 显示当前背包
        print(f"\nYour inventory: {', '.join(inventory) if inventory else 'Empty'}")
    
    else:
        print("Invalid command! Try again.")

4. 优化无物品房间的定义

无需用None占位,直接不给无物品的房间添加item键即可:

# 示例房间结构
rooms = {
    'start': {
        'name': 'Entrance Hall',
        'description': 'A spacious hall with doors to north and east.',
        'north': 'library',
        'east': 'kitchen'
        # 无item键,代表此房间没有物品
    },
    'library': {
        'name': 'Dusty Library',
        'description': 'Rows of old books line the walls.',
        'south': 'start',
        'item': 'ancient key'
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:52:59