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

Python文本冒险游戏:关键词匹配与场景规则切换实现问询

实现文本冒险游戏的动态关键词匹配与规则切换

核心思路

用规则字典定义每个场景的触发条件与行为,结合状态集合管理当前激活的规则,通过关键词分组匹配逻辑判断玩家输入是否触发规则,触发后动态更新状态集合完成规则切换。

具体实现步骤

1. 定义规则结构

每个规则包含三个核心部分:

  • required_groups: 触发规则需要满足的关键词分组(每个分组至少匹配一个关键词)
  • response: 触发后输出的回应文本
  • state_changes: 触发后要执行的规则切换(停用旧规则、启用新规则)

示例规则定义:

# 规则字典:key是规则ID,value是规则详情
rules = {
    "break_window": {
        "required_groups": {
            "投掷类": ["throw", "toss"],
            "物品类": ["rock", "stone"],
            "动作类": ["smash", "break", "shatter"],
            "目标类": ["glass", "window"]
        },
        "response": "你捡起地上的石头狠狠砸向窗户,玻璃哗啦一声碎了个大洞!现在你可以从这里跳出去了。",
        "state_changes": {
            "deactivate": ["break_window"],
            "activate": ["jump_window_success"]
        }
    },
    "jump_window_success": {
        "required_groups": {
            "动作类": ["jump", "leap"],
            "目标类": ["window", "hole"]
        },
        "response": "你纵身跳出破窗,稳稳落在外面的草地上,成功逃离了这个房间!",
        "state_changes": {
            "deactivate": ["jump_window_success"],
            "activate": []
        }
    },
    "default_failure": {
        "required_groups": {},  # 无分组要求,作为默认匹配
        "response": "你不知道该怎么做,试试其他动作吧。",
        "state_changes": {}
    }
}

2. 关键词匹配逻辑

编写函数检查玩家输入是否满足规则的分组要求:

def matches_rule(player_input, rule):
    input_words = player_input.lower().split()
    required_groups = rule.get("required_groups", {})
    
    # 如果规则无分组要求,直接匹配(用于默认规则)
    if not required_groups:
        return True
    
    # 检查每个分组是否至少有一个关键词出现在输入中
    for group_keywords in required_groups.values():
        matched = any(word in input_words for word in group_keywords)
        if not matched:
            return False
    return True

3. 状态管理与规则切换

用集合跟踪当前激活的规则,每次处理输入时遍历激活的规则,找到第一个匹配的规则,执行回应并更新状态:

def main():
    # 初始激活的规则:break_window和默认规则
    active_rules = {"break_window", "default_failure"}
    
    print("欢迎来到文本冒险游戏!你被困在一个封闭的房间里,面前有一扇玻璃窗。")
    
    while True:
        player_input = input("> ")
        if player_input.lower() in ["quit", "exit"]:
            print("游戏结束!")
            break
        
        # 遍历激活的规则,寻找第一个匹配的
        matched_rule = None
        rule_to_update = None
        for rule_id in active_rules:
            rule = rules[rule_id]
            if matches_rule(player_input, rule):
                matched_rule = rule
                rule_to_update = rule_id
                break
        
        if matched_rule:
            # 输出回应
            print(matched_rule["response"])
            # 处理规则切换
            changes = matched_rule.get("state_changes", {})
            # 停用指定规则
            active_rules.difference_update(changes.get("deactivate", []))
            # 启用指定规则
            active_rules.update(changes.get("activate", []))

if __name__ == "__main__":
    main()

关键细节说明

  • 分组匹配灵活性:规则的required_groups支持任意数量的分组,每个分组内的关键词是“或”关系,分组之间是“与”关系,完全满足“顺序不限、多分组关键词同时触发”的需求。
  • 动态规则切换:通过state_changes可以精确控制触发后哪些规则失效、哪些规则生效,实现场景的线性或分支式推进。
  • 默认规则处理:保留一个无分组要求的默认规则,确保玩家输入无匹配时不会出现无响应的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 00:50:41