文档索引

异文第二章关卡设计:对读

状态:关卡方案已完成,游戏内未实施。 设计与规则原型验证日期:2026-10-26。

第二章接在现有七张实验卡与门侧铭牌之后,新增 08–14 七张卡 + 一块双面铭牌。 只增加一枚新符号「丙」,含义为镜映;沿用甲、乙与一层框。玩家要逐渐分清: 图案的位置、箭头的朝向、复制的单位,是可以分别处理的三件事。

现有规则以 src/games/yiwen/engine.ts 为准,第一章内容在 src/games/yiwen/levels.ts。本方案中的镜映尚未接入执行器。

1. 本章要发生的发现

第一章让玩家发现「框会改变操作的作用范围」。第二章让这条理解再经受一次检验: 同样一枚新符号,在整张纸上会交换左右位置,在格内只改变图形自身。 随后用同一底稿的不同目标拆开两种效果,再把它们接回旋转和复制。

本章仍然自由选卡、自由运行,没有步数评分,也不按完成数量发放符号。 第二章从新存档也能直接打开;进入本章时,甲、乙、丙与加框全部可用。 第一章保留现有符号盘,两个章节都可随时返回。

预计首次游玩约 15–25 分钟,这是节奏目标,尚未经过玩家实测。 08–10 用相同底稿形成对照;11–12 用另一份底稿比较操作顺序与方向; 13–14 换底稿检查迁移;铭牌检查同一句子能否解释多个例子。

2. 丙的完整语义

下表中的符号名供设计和实现使用。游戏的按钮仍只写「甲 / 乙 / 丙」, 不直接把操作含义印在按钮上。

设计记号 游戏符号 作用
R 甲 整张纸顺时针转 90°,格子位置与箭头朝向都转
D 乙 把整张纸在右侧再接一份,逐行得到原行 + 原行
r 带框的甲 每格箭头顺时针转 90°,格子位置不变
d 带框的乙 每格在右侧复制一次,空白格也复制
M 丙 整张纸左右镜映,每行倒序,箭头同时左右镜映
m 带框的丙 每格内部左右镜映,格子位置不变

镜映时 > 与 < 互换;^、v、o 与空白都不改变自身形状。 因此丙不会让上箭头朝下,也不是把所有箭头转半圈。 M 的位置映射为 (x, y) → (width - 1 - x, y);m 的位置映射为恒等。 二者都保留纸张宽高、格子数和空白,不裁边,也不扩张纸张。

镜映永远相对于当前纸张的左右方向。仍是一层框,不新增嵌套、颜色、 可选区域或自动补偿。纸张上限继续为 8 × 8,句子上限继续为 8 枚。

丙采用与甲、乙相同的原创笔画方式绘制,笔画不直接画成镜子或翻转箭头; 有框与无框版本共用同一字形,框与已有符号完全同形。

3. 七张实验卡

3.1 底稿与目标清单

下面的 ^ > v < 分别是上、右、下、左箭头,o 是圆点,. 是占位置的空白。 / 分隔纸张的行,不是指令,也不是纸上的字符。 例如 >o / ^. 表示两行两列,第二行右侧的空白必须保留。 句子从左到右执行。参考解供开发验收,游戏内不展示。

编号 卡名 底稿(逐行) 目标(逐行) 一种参考解 最短枚数
08 新符 >o / ^. o< / .^ M 1
09 原位 >o / ^. <o / ^. m 1
10 只换位置 >o / ^. o> / .^ M m 2
11 先后 >o. / ^.. v< / o. / .. R M 2
12 上下 >o. / ^.. v.. / >o. R R M 3
13 逐格拓印 ^. / >o ^> / ^> / o. / o. m d R 3
14 合句 >o / v. .o.o / .o.o / >^>^ / >^>^ M d R D m 5

最短枚数只用于校对难度,不转成星级、奖励或通关条件。 只比较完整输出,接受任意等效写法。

3.2 08「新符」——整张纸发生了什么

希望发现: 新符号改变左右关系,也改变横向箭头的朝向。 圆点从右侧移到左侧,上箭头保持朝上,右箭头变成左箭头。 圆点、空白和两种朝向共同排除了「只是旋转」的猜测。

两层提示:

  1. 「先看圆点到了哪里,再看两种箭头各自的朝向。」
  2. 「先试一次丙。比较每一行的左右关系。」

典型错误:用甲反复试转。反馈仍是现有输出与轨迹,让玩家自己比较圆点位置; 不额外弹出规则解释。

3.3 09「原位」——框的含义仍然成立

希望发现: 底稿没有变,目标却只改变了一支箭头。 把第 05 张卡发现的范围规则迁移到丙:每格自己的镜映与整张纸的镜映不同。

两层提示:

  1. 「圆点和空白的位置都没变;两种箭头也没有一起转向。」
  2. 「比较带框与不带框的丙。框仍然表示分别处理每一格。」

典型错误:用两次带框的甲。它会让上箭头也朝下,当前底稿能直接显示这个区别。

3.4 10「只换位置」——把两种效果拆开

希望发现: 想交换位置,却保持每支箭头原来的朝向,可以先处理整体, 再在每格里抵消箭头自身的变化。两次操作的作用范围必须不同。

两层提示:

  1. 「目标交换了左右位置,但每支箭头的朝向和底稿相同。」
  2. 「先用丙交换位置,再用带框的丙修正箭头。也可以试试反过来。」

这里允许发现 M m 与 m M 等效,不把设计答案的顺序写成唯一正确顺序。 连续两个 M 或两个 m 都会回到底稿;可用于主动试验,但不给这种原样返回另设一关。

3.5 11「先后」——转纸与镜映不交换

希望发现: 整体旋转与整体镜映的先后会改变结果。 这次纸张不是正方形,玩家还能用行列数跟踪纸的方向。

两层提示:

  1. 「对照是三行两列。先让纸张的方向与它一致,再比较圆点的位置。」
  2. 「比较甲、丙和丙、甲的执行轨迹。本卡需要先甲再丙。」

M R 得到 .. / .o / >^,与目标 v< / o. / .. 明显不同。 这里讨论的是甲与丙的次序;不推广成「任意两个符号都不能交换」。

3.6 12「上下」——用已知规则表达另一条轴

希望发现: 丙只有左右镜映,但把纸先转半圈,再左右镜映,可以得到上下镜映。 目标中右箭头仍朝右,上箭头变成下箭头,能区分上下镜映与单纯转半圈。

两层提示:

  1. 「这次宽高没变,第一行和第二行交换了位置。右箭头却仍然朝右。」
  2. 「先让整张纸转半圈,再用一次丙。比较它和只转半圈的区别。」

参考解为 R R M,M R R 也通过。 注意 R M R 会回到一次左右镜映的效果,不会得到上下镜映; 设计说明与提示都不使用「两边各转一下」这种含糊说法。

3.7 13「逐格拓印」——新符号接回复制

希望发现: 先把横向箭头镜映,再按格成双,最后把纸转成纵向排列。 不再复用前三卡的底稿,检查玩家是否能把规则用于另一幅图。

两层提示:

  1. 「相同图形在上下方向相邻。先回想两种成双方式的差别,再检查箭头。」
  2. 「带框的丙只修正横向箭头;带框的乙逐格成双;甲把排列转到竖直方向。」

m d R 与 d m R 都通过。镜映和复制在这里可以交换, 不因交换后仍能通过而给出错误反馈。

3.8 14「合句」——两种复制单位同时出现

希望发现: 目标有两层重复:相同行相邻,同时一整段列又出现了两遍。 需要分别使用逐格复制和整张复制,再安排镜映的位置与范围。

两层提示:

  1. 「先分开看:哪些是相邻的相同格子,哪些是整段图案重复?最后再核对箭头。」
  2. 「一种写法是:丙、带框的乙、甲、乙、带框的丙。逐步查看两次复制分别做了什么。」

参考轨迹如下;每一处空白都参与下一步:

底稿       M          d            R          D            m
>o         o<         oo<<         .o         .o.o         .o.o
v.         .v         ..vv         .o         .o.o         .o.o
                                  <^         <^<^         >^>^
                                  <^         <^<^         >^>^

这是本章主要的组合题,不再用更多箭头或更大的底稿提高阅读负担。 d M R D m 也是五枚解。

4. 章末:双面铭牌

4.1 从照读刻痕到解释图例

第一章铭牌展示一句已写好的话。第二章铭牌提供两组底稿 → 拓印的图例, 没有写好的句子。玩家需要写一句话,同时解释两组图例;第三张底稿等待补出拓印。 这块铭牌同样从进入第二章起就可尝试,不检查七张卡的完成数。

它复用本章已经发现的规则,新增的只是「同一句用于多个例子」的检验方式。

图例 底稿(逐行) 已知拓印(逐行)
一 >o / ^. ..oo / ^^>> / ..oo / ^^>>
二 .v^ / >o. ..^^ / oovv / >>.. / ..^^ / oovv / >>..
待补 o<. / .^> 游戏内不展示目标;正确输出见下方

一种参考句子为 M D R d m r,最短为六枚。 它与 14 的句子不同:两种复制的使用位置互换,末尾还要分别调整箭头。 第三张的输出是:

>>..
^^<<
..oo
>>..
^^<<
..oo

两层提示:

  1. 「同一句要解释两组图例。先看整段重复出现在哪个方向,再看相同格子怎样相邻。」
  2. 「一种写法是:丙、乙、甲、带框的乙、带框的丙、带框的甲。两次复制使用不同范围。」

4.2 操作与判定

铭牌占用独立的句子草稿。工作台用「图例一 / 图例二 / 待补底稿」切换观察对象, 三张底稿共用一句话,切换时不能变成三个独立草稿。 每次运行都把当前句子从头应用到三张底稿;轨迹展示当前选中底稿的每一步。 两个已知图例旁分别显示「一致 / 未一致 / 超出纸张」,便于定位问题。 待补底稿显示实际输出,不显示隐藏对照。

「放入当前拓印」在运行后可用。成功条件为:

  1. 三张底稿均运行完整,没有容量错误。
  2. 同一句在两个已知图例上的最终输出分别与给定拓印一致。

接受所有满足条件的句子,不比较指令列表,也不依赖玩家当前点到了哪一步轨迹。 第三张用于展示这句话的推断结果,不另加一条玩家看不见的判错条件。 原型验证已确认,在本章六种指令和八枚上限下,满足两个图例的句子对第三张 产生同一输出,因此这里的推断没有多解歧义。

编辑句子后,上次运行的结果和可提交状态立即失效,必须重新运行; 查看旧轨迹不等于改变提交用的最终输出。

现状提醒(2026-11):第一章现有实现是 Yiwen.tsx 的 output = trace?.[step] ?? input, 提交铭牌时直接比较这个 output —— 查看中间轨迹后提交,用的就是当前那一步的输出。 第二章实现时要么按本节改成「始终用最后一步 / 运行结果」,要么先把第一章的提交口径 一并修正;不能照搬现有 submitPlate。 放入错误拓印时保留句子,反馈「两组图例还未同时一致。」; 有容量错误则显示该错误,不显示为普通不一致。 成功后展示第三张完整拓印,短句「两组图例使用同一句话。」即可。

5. 后续实施范围

本次交付为设计文档。实施时需要处理下列关联,不把它们提前视为已支持:

落点 需要的改动
src/games/yiwen/engine.ts 增加 mirror 指令;明确无框镜映位置和图形、有框只镜映图形
src/games/yiwen/art.tsx 增加丙的原创字形;避免现有二选一绘制分支把丙画成乙
src/games/yiwen/levels.ts 保留 01–07 与原铭牌;登记本章七卡、第二铭牌图例及手写目标
src/games/yiwen/Yiwen.tsx 章节切换、按章计数、丙的名称与符号盘、多底稿运行与轨迹、提交失效处理
src/games/yiwen/progress.ts 旧存档迁移、新指令白名单、第二铭牌独立草稿与完成状态
src/lib/game-catalog.ts 在真正交付后更新七张卡与单铭牌的现有介绍
tests/unit/yiwen.test.ts 镜映语义、等效解、独立目标可达性、铭牌多例判定、旧存档迁移
tests/e2e/yiwen.spec.ts 保留第一章路径;新增跨章续玩、共用句子、最终输出提交与窄屏验证

章节与卡片只按内容分组,第一章的编号、底稿、目标、铭牌 ID plate 均不改变。 新铭牌使用独立 ID plate-02。各章显示各自的 0 / 7,不会把第二章进度算成 第一章「七张实验卡已完成」。原来的「Demo 到这里结束」在实施后换成章节状态与下一章入口。

存档建议继续使用现有键 yiwen-demo-v1 读取旧记录,内部结构升级到 version: 2: 保留 selected、drafts、completed,把单个 opened 改为 openedPlates: string[]。 读取 v1 时完整保留第一章草稿、完成卡片与所选对象;opened: true 映射成 ['plate']。 读取 v2 时校验三个 rune 名、布尔框标记、八枚上限,以及合法卡片和铭牌 ID。 第二章新增内容不通过清空本地存档来实现。

6. 校对依据与待验收

6.1 已完成的规则原型验证

临时验证器调用现有 engine.apply 执行 R / D / r / d,只额外实现本章定义的 M / m 原型。先运行参考句子,再以广度优先搜索独立寻找最短解,搜索深度为 0–8, 包含全部六种指令,遵守每一步 8 × 8 的限制。 搜索按完整纸张的宽、高与格子内容去重;格子数超过目标就剪枝,因为本语言没有缩小操作。

验证结果:

  • 七个底稿都不等于各自目标;表中参考句子全部完整运行并准确命中目标。
  • 最短枚数依次为 1、1、2、2、3、3、5,与第 3 节一致。
  • 只使用旧四种指令时,七个目标在八枚以内全部不可达。
  • 单独移除 M 或 m 后,10 和 14 都不可达,确实需要理解两个作用范围。
  • 08/11/12 需要无框丙,09/13 需要带框丙;没有因底稿对称而绕开教学意图。
  • 铭牌的共同最短解为六枚;已发现等效写法 D r M R d m,它与参考句同样通过。
  • 铭牌用三张输出构成联合状态搜索,避免按前两张去重时丢掉第三张的不同预测。 深度 0–8 共访问 768 个不同联合状态;符合两组图例的第三张输出只有一种。

这些结果验证图案和规则的关系,不代表镜映已写入游戏,也不代表玩家已经理解这些关卡。

6.2 实施后必须验证

  • 镜映两次还原;无框与有框都保留尺寸、圆点和边缘空白,不修改输入对象。
  • 同一底稿上 R M 与 M R 不同;M m 与 m M 相同;逐格复制与逐格镜映可交换。
  • 目标独立手写,不能由参考解运行生成后再拿来验证同一个执行器。
  • 铭牌在前两例仅有一个匹配、第三例容量溢出、编辑后未重跑、查看中间轨迹时,都按第 4 节判定。
  • 第一章旧存档升级后,七张卡的草稿、已复原状态和原铭牌状态均保留;禁用存储仍可游玩。
  • 从新存档直接打开 14 或第二铭牌,无需完成第一章,也无需按提示才能拿到丙。
  • 320 / 390 / 768 / 1280 宽度和明暗主题下,逐格图案、共用句子和当前图例身份都可分辨。 三组铭牌图例用切换查看,窄屏无需同时挤下三块完整纸张。
  • 至少观察一轮玩家试玩,重点记录:09 是否被误认成转半圈、12 是否误用 R M R、 14 是否能看出两种复制单位,以及铭牌是否理解为三张共用一句。根据结果调整提示与排序。

本页内容来自仓库 docs/plan/yiwen-chapter-two.md·在 GitHub 上查看

异文第二章关卡设计:对读 · 聪明山