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

Python文本游戏go移动、get拾取命令运行异常问题排查

Python文本游戏移动、拾取功能修复方案

问题根因

  • 未定义current_room变量跟踪玩家当前所在房间,无法判断移动合法性、也无法获取当前房间的可拾取物品
  • 命令匹配逻辑硬编码且存在语法错误:仅适配了go west单条移动指令,get ' '的判断写法完全无法匹配用户输入的get 物品名格式指令
  • 嵌套循环逻辑失效:rooms == rooms['Coat room']判断永远不成立,内层循环从未执行
  • 函数调用不匹配:get_item定义要求传入物品参数,实际调用无传参,且函数内的命令判断逻辑完全错误
  • 存在多处笔误:比如Chemical room的North指向小写的operating room,和全局定义的首字母大写房间名不一致,command == input()用判断符做赋值操作,输入内容无法存储
  • 没有统一的命令解析逻辑,所有指令靠硬编码判断,可维护性为0

修复后完整可运行代码

# IT140脚本入门课程文本游戏
# Derek Pruitt 2021/10/01
# 需先执行 pip install pyttsx3 安装依赖
import pyttsx3

engine = pyttsx3.init()
# 设置女声
voices = engine.getProperty('voices')
engine.setProperty('voice', voices[1].id)
# 设置语速
engine.setProperty('rate', 125)

# 欢迎语
engine.say('Hello, welcome to my text based game!')
print('Hello, welcome to my text based game!')
engine.say('what is your name')
engine.runAndWait()
player = input('请输入你的名字:\n')
engine.say(player + ' we welcome you')
engine.runAndWait()

# 初始化玩家背包
inventory = []
# 房间配置:每个房间的可移动方向、房间内物品
rooms = {
    'Cabin': {'West': 'Coat room'},
    'Coat room': {'South': 'Operating room', 'East': 'Cabin', 'item': 'Key'},
    'Operating room': {'South': 'Chemical room', 'North': 'Cabin',
                       'West': 'Armoire', 'East': 'Prayer room', 'item': 'Oil'},
    'Armoire': {'East': 'Operating room', 'item': 'Crossbow'},
    'Prayer room': {'West': 'Operating room', 'North': 'Sleeping chamber',
                    'item': 'Holy cross'},
    'Sleeping chamber': {'South': 'Prayer room', 'item': 'The Skinner'},
    'Chemical room': {'North': 'Operating room', 'East': 'Meat room',
                      'item': 'poison'},
    'Meat room': {'West': 'Chemical room', 'item': 'Cooked meat'}
}
# 初始化当前所在房间为出生点Cabin
current_room = 'Cabin'

def show_instructions():
    # 打印游戏指令
    print("任意时间输入 'Quit' 可退出游戏")
    print("收集齐6件物品即可获胜,遇到The Skinner则游戏失败")
    print("移动指令格式:go 方向(支持South/North/East/West,大小写不敏感)")
    print("拾取物品指令格式:get 物品名")
    print(f"你当前所在房间:{current_room}")
    if 'item' in rooms[current_room]:
        print(f"当前房间可拾取物品:{rooms[current_room]['item']}")
    print(f"当前背包:{inventory}\n")

def get_item(item_name):
    # 校验当前房间是否有对应物品,有则拾取
    if 'item' in rooms[current_room] and rooms[current_room]['item'].lower() == item_name.lower():
        inventory.append(rooms[current_room].pop('item'))
        print(f"已成功拾取{item_name},当前背包:{inventory}")
        # 胜利条件判断
        if len(inventory) == 6:
            print("恭喜你收集齐所有物品,游戏胜利!")
            engine.say("Congratulations, you win!")
            engine.runAndWait()
            exit()
    else:
        print(f"当前房间没有{item_name},请确认物品名是否正确")

if __name__ == '__main__':
    show_instructions()
    while True:
        command = input("\n请输入指令:\n").strip()
        if command.lower() == 'quit':
            print("游戏退出")
            break
        # 解析移动指令
        if command.lower().startswith('go '):
            direction = command.split(' ',1)[1].capitalize()
            # 判断方向是否合法
            if direction in rooms[current_room]:
                current_room = rooms[current_room][direction]
                print(f"你已进入{current_room}")
                # 遇到Boss判断失败
                if 'item' in rooms[current_room] and rooms[current_room]['item'] == 'The Skinner':
                    print("你遇到了The Skinner,游戏失败!")
                    engine.say("Game over!")
                    engine.runAndWait()
                    break
                show_instructions()
            else:
                print("该方向无法通行,请输入其他方向")
                show_instructions()
        # 解析拾取指令
        elif command.lower().startswith('get '):
            item = command.split(' ',1)[1]
            get_item(item)
        # 非法指令
        else:
            print("请输入合法指令")
            show_instructions()

功能验证说明

  • 出生点默认在Cabin,输入go west可进入Coat room,房间内有Key
  • 进入Coat room后输入get Key即可将物品加入背包
  • 所有移动、拾取逻辑自动适配所有房间配置,不需要单独硬编码每个房间的指令判断
  • 自动触发胜负条件判断,收集6件物品获胜,进入Sleeping chamber遇到The Skinner失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:54:02