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
相关产品推荐
相关产品推荐

