AI 创造力大赛 · 学习工作赛道

雾区谜解社 —— 项目架构全景

从人教版知识点到探案剧情,一条完整的技术链条

一、项目全景

雾区谜解社是一个纯前端静态网页互动学习系统,将初中物理、化学、数学知识转化为探案解谜游戏。项目由 6 个核心模块 协同工作,形成从"知识点"到"破案体验"的完整闭环。

flowchart TB
    subgraph Data["📦 数据层"]
        KG["🧠 知识图谱
knowledgeGraph
51个知识点 + 依赖关系 + 案件映射"] KP["📚 知识面板数据
KNOWLEDGE_DATA
漫画面板 + SVG图表"] end subgraph Intelligence["🧠 智能层"] KS["🎯 知识选择器
MZ_KnowledgeSelector
玩家评估 + 自适应选点"] CF["🏭 案件工厂
MZ_Factory
配置驱动动态生成案件"] end subgraph Engine["🎮 引擎层"] GE["⚙️ 游戏引擎
game.js
状态机 + 对话树 + 苏格拉底提问"] end subgraph Storage["💾 存储层"] ST["🗄️ 本地存储
MZ_Storage
玩家数据 + 档案 + 案件状态"] end KG -->|"知识点映射"| CF KP -->|"面板渲染"| GE KS -->|"评估结果"| CF CF -->|"完整案件脚本"| GE GE -->|"存档/读档"| ST ST -->|"历史数据"| KS GE -->|"最终输出"| UI["🖥️ 用户界面
对话 + 线索墙 + 知识展板 + 结案报告"]
图 1:项目六大模块与数据流向
51 知识图谱节点
4 学科覆盖
6 案件口味模板
9 能力维度
0 后端依赖

二、知识图谱 —— 四层约束模型

这是整个项目的核心创新。知识图谱不仅是知识点列表,而是一个从国家课程标准到游戏剧情的完整映射系统,由四个层级逐层约束,确保每个案件在知识层面都是严谨、可追溯的。

L1

课程标准层

以人教版初三/高一教材为核心,覆盖物理(运动学、力学)、化学(氧化还原、催化剂)、数学(函数、比例换算)三大主干学科,共 51 个知识点节点

L2

知识依赖层

每个节点定义 prerequisites(前置知识)、leadsTo(后续延伸)、lateralExpanse(横向跨学科展开)。当玩家卡住时,系统自动沿横向路径切换学科视角,降低挫败感

L3

题型能力层

每个知识点映射到 高考真题(examQuestions)和 9 项核心素养(建模、计算、分析、实验、综合、提问、迁移、表达、模糊决策),确保游戏能力培养对标真实考试要求

L4

案件剧情层

每个知识点通过 caseMap 绑定到具体案件场景,标注角色(core核心/support支撑/analogy类比/cross跨学科等),确保每个剧情设定都有对应的知识依据

知识图谱六大分区

分区节点数覆盖内容示例节点
初中物理 juniorPhysics 19 机械运动、力、压强、浮力、功和机械能、简单机械、热学、电学 P-J-03 速度概念 P-J-08 摩擦力
高中物理 seniorPhysics 20 运动的描述、匀变速直线运动、相互作用、牛顿运动定律、抛体运动、圆周运动、机械能守恒 P-G1-03 匀变速直线运动 P-G1-22 向心力
化学 chemistry 4 物质分类、能量变化、氧化还原反应、催化剂 C-G1-03 氧化还原反应
数学工具链 mathTools 8 有效数字、比例换算、二次函数、三角函数、方程组、参数方程、弧度、向量 M-J-02 比例与单位换算
能力维度 abilities 9 建模能力、计算能力、分析能力、实验操作、综合能力、提问力、迁移力、表达力、模糊决策力 每项含3级细化描述
案件知识路径 caseKnowledgePaths 3条 case-001(霓虹街区飞车·6步)、case-002(悬空摩天轮·7步)、case-003(基因实验室爆炸·8步跨学科) 每条含横向展开路径 + 高考真题参考

知识图谱中的跨学科桥梁

知识图谱的核心设计理念是纵向循序渐进,卡住时横向展开。当玩家在物理推理中遇到数学障碍,系统通过 lateralExpanse 字段自动切换到数学工具链;当纯物理思维无法解释实验现象,系统引入化学视角。

graph LR
    subgraph Physics["物理"]
        PJ03["P-J-03
速度概念"] --> PJ04["P-J-04
速度测量实验"] PJ08["P-J-08
摩擦力"] --> PG09["P-G1-09
牛顿第二定律"] PJ20["P-J-20
内能·热传递"] -->|"跨学科"| CG03["C-G1-03
氧化还原反应"] end subgraph Math["数学"] MJ01["M-J-01
有效数字"] MJ02["M-J-02
比例换算"] MJ03["M-J-03
二次函数"] end subgraph Chemistry["化学"] CG02["C-G1-02
化学能与热能"] CG03["C-G1-03
氧化还原反应"] end PJ01["P-J-01
长度测量"] -.->|"横向展开"| MJ01 PJ03 -.->|"横向展开"| MJ02 PG03["P-G1-03
匀变速运动"] -.->|"横向展开"| MJ03 PG01["P-G1-01
质点参考系"] -.->|"前置"| PG03 PG03 -.->|"后续"| PG19["P-G1-19
抛体运动"]
图 2:知识图谱中的依赖关系与跨学科桥梁(实线 = 纵向依赖,虚线 = 横向展开)

三、知识评估与选择器 —— 自适应难度匹配

MZ_KnowledgeSelector 模块(knowledge-selector.js)负责根据玩家历史表现,自动评估水平并推荐合适难度的知识点。它管理一个包含 20 个知识点的 KNOWLEDGE_POOL(KP-11 至 KP-30),覆盖物理、化学、数学三科,每个知识点标注了难度等级(1-3)和学科分类。

evaluatePlayer()

从 localStorage 档案中提取已掌握知识点,计算各学科统计和综合难度等级。玩家等级 ≥ 2 或破案 ≥ 3 自动提升难度上限。

selectKnowledgePoints()

根据玩家薄弱学科、案件口味偏好(都市→物理 / 科幻→物理 / 校园→数学 / 实验室→化学)、难度匹配度,自动筛选 5 个知识点,确保至少包含 1 个跨学科交叉。

口味 → 学科映射

都市 urban→物理 科幻 scifi→物理 校园 campus→数学 灾难 disaster→物理 实验室 lab→化学

不同案件口味自动匹配不同主学科,确保知识覆盖的多样性

四、案件工厂引擎 —— 配置驱动的动态生成

MZ_Factory 模块(case-factory.js,约 1400 行)是整个项目的内容生产中枢。它接收一份 JSON 配置(caseConfig),自动生成案件所需的全部内容:案件信息、线索列表、场景引入对话、知识面板、结案报告问题、侦探手记。

buildCase(caseConfig) —— 主入口

一次性构建完整的游戏脚本对象,包括:

六种口味模板

口味场景引入风格主学科示例开场
urban 都市新闻播报物理"紧急插播一条新闻…"
scifi 科幻基地日志物理"[空间站日志 #2047]…"
campus 校园社团广播数学"各位同学请注意…"
disaster 灾难紧急通报物理"⚠ 紧急预警…"
lab 实验室实验报告化学"[实验记录 #042]…"
ancient 古风大理寺卷宗综合"大理寺呈…"

案件工厂还为每个知识点自动生成 赛博风格 SVG 知识图表(260×160px 内联 SVG),统一使用薄荷绿到青色的渐变配色,与项目视觉风格保持一致。同时自动生成线索分析文本、追问问题、干扰条件(红鲱鱼)揭示信息。

五、游戏引擎 —— 状态机驱动的对话式交互

game.js 是整个系统的运行时核心,管理从案件进入到结案报告的完整流程。

状态机设计

stateDiagram-v2
    [*] --> exploration: 接受案件
    exploration --> reasoning: 线索收集完毕
    reasoning --> report: 核心问题解答正确
    report --> done: 提交结案报告
    done --> [*]: 解锁奖励

    state exploration {
        [*] --> scene_intro: 场景引入
        scene_intro --> clue_discussion: 发现线索
        clue_discussion --> knowledge_panel: 展开知识展板
        knowledge_panel --> scene_intro: 继续勘查
    }

    state reasoning {
        [*] --> socratic_q1: 苏格拉底提问①
        socratic_q1 --> socratic_q2: 追问
        socratic_q2 --> formula: 公式推导
        formula --> conclusion: 得出结论
    }

    state report {
        [*] --> detective_eye: 侦探之眼
        detective_eye --> flash: 灵光一闪
        flash --> superpower: 超能力解锁
        superpower --> [*]
    }
  
图 3:游戏引擎状态机(含嵌套子状态)

核心设计要点

苏格拉底提问引擎

不直接给出答案,而是通过层级递进的追问引导玩家自主推理。包含 stuckCheck 卡关检测机制,根据停留时间自动升级提示等级(0→1→2→3),在保持挑战性的同时防止挫败。

情绪关怀系统

通过 userMood 字段识别玩家情绪状态(neutral / frustrated / annoyed / excited / curious / divergent),触发对应角色的个性化回应。发散性回答先肯定再引导,不否定不纠正。

思维路径可视化

thinkingPath 数组记录玩家推理轨迹(线索收集顺序、卡点位置、突破时刻),结案后生成"思维火花"和"能力亮点"展示。

红鲱鱼(干扰条件)

redHerrings 系统追踪玩家是否被无关线索误导。结案报告中的"干扰条件揭秘"环节帮助玩家理解哪些信息是干扰项,培养批判性思维。

六、数据存储 —— 轻量级本地持久化

MZ_Storage 模块(storage.js,约 100 行)使用浏览器 localStorage 实现数据持久化,管理三个存储键:

存储键内容核心字段
mz_player 玩家数据 name, level, exp, badges[], knowledgePoints, solvedCases
mz_cases_status 案件状态 每个案件的解锁状态、完成进度、收集线索
mz_archive 档案库 已完成案件的完整记录(含知识点、用时、报告答案)

存储系统提供 addExp() 自动升级检测、unlockBadge() 去重解锁、addToArchive() 时间倒序归档等便捷方法。因为使用纯前端存储,用户数据完全保留在本地浏览器中,无需注册、无隐私风险。

七、数据流动全景 —— 从知识点到破案的全链路

下面以一次完整的案件生成与体验流程为例,展示六大模块如何协同工作:

sequenceDiagram
    participant User as 👤 玩家
    participant UI as 🖥️ 界面
    participant KS as 🎯 知识选择器
    participant CF as 🏭 案件工厂
    participant KG as 🧠 知识图谱
    participant GE as ⚙️ 游戏引擎
    participant ST as 💾 存储

    User->>UI: 点击"生成案件" / 选择口味
    UI->>KS: 请求评估玩家水平
    KS->>ST: 读取玩家档案
    ST-->>KS: 历史破案记录 + 已掌握知识点
    KS->>KS: evaluatePlayer() 计算难度等级
    KS->>KS: selectKnowledgePoints() 筛选知识点
    KS-->>CF: 返回 {knowledgeIds, assessment, targetSubject}

    CF->>KG: 读取知识图谱依赖关系
    KG-->>CF: 返回 prerequisites + leadsTo + lateralExpanse
    CF->>CF: buildCase() 生成完整案件脚本
    CF-->>UI: 返回 {caseInfo, hotspots, dialogue, report}

    UI->>GE: 加载案件数据,启动游戏
    GE->>GE: 播放场景引入对话
    GE->>GE: 线索勘查 → 知识展板展开
    GE->>GE: 苏格拉底提问 → 卡关检测
    GE->>GE: 完成推理 → 生成结案报告

    GE->>ST: 保存案件状态 + 更新档案
    ST-->>User: 解锁成就 + 经验值 + 新案件
  
图 4:从知识点选择到案件体验的完整数据流

文件结构一览

文件大小职责核心输出
data.js~2100行数据层:知识图谱 + 案件元数据 + 角色 + 徽章MZ_DATA 全局对象
knowledge-data.js~600行知识展板数据:case-001 的漫画面板 + SVG图表KNOWLEDGE_DATA 对象
knowledge-selector.js225行知识选择器:玩家评估 + 自适应知识点推荐MZ_KnowledgeSelector API
case-factory.js~1400行案件工厂:配置驱动的动态案件生成MZ_Factory API
game.js~1500行游戏引擎:状态机 + 对话树 + 苏格拉底提问gameState 状态管理
storage.js~100行存储层:localStorage 持久化MZ_Storage API
index.html首页案件选择 + 核心成员 + 玩法介绍主页界面
game.html游戏页对话界面 + 线索墙 + 知识展板 + 结案报告游戏运行时
creator.html创意工坊极简案件创作界面(关键词填空 + 弹窗式选项)用户自定义案件
cases.html案件库案件列表 + 火星基地翻页看板案件浏览

八、技术亮点总结

知识图谱四层模型

从课程标准→知识依赖→题型能力→案件剧情的完整映射,确保每个游戏设定都有知识依据,在国内教育游戏领域属于首创。

自适应难度引擎

根据玩家历史档案自动评估水平、识别薄弱学科,结合案件口味偏好动态生成适配难度的知识点组合,实现"千人千案"。

配置驱动案件工厂

只需 30-40 行 JSON 配置即可生成完整案件(对话、线索、知识面板、报告),大幅降低内容生产成本,支持用户自定义案件创作。

纯前端零依赖架构

无需后端服务器、无需数据库、无需用户注册。所有数据存储在浏览器 localStorage,可部署到任何静态托管服务,运维成本趋近于零。

一句话概括

雾区谜解社 以 知识图谱 为骨架、案件工厂 为血肉、游戏引擎 为神经,构建了一个从"人教版知识点"到"沉浸式探案体验"的完整技术闭环——所有代码运行在浏览器中,无需任何后端服务。