怎么玩
光路解谜最容易做成「背答案」:记下哪个镜子该转几下,然后一路点过去。为了避开这个,本作把颜色也拉进来了——同一条路径上如果两束光在接收器前汇合,颜色会相加,于是「把蓝的那束也引过来」变成了解法的一部分,而不只是多摆一面镜子。
另一件坚持的事是:光必须真的被算出来。画面上那些亮线不是预先画好的装饰,而是每帧从光源出发、逐格推进、遇到元件就改方向或分裂的结果。你动一下镜子,整张图的光会立刻重算。
- 关卡
- 30 关
- 网格
- 8 列 × 6 行
- 元件
- 5 种(镜 / 棱镜 / 玻璃砖 / 传送门 / 遮光板)
- 光色
- 红 绿 蓝 + 4 种混色
- 单束上限
- 64 段
- 每关记录
- 最少步数与通关状态
操作
一束光怎么走
每个光源有固定的位置和出射方向,颜色是红、绿、蓝里的一种。追踪时从它出发,按方向向量一格一格推进:空格继续直行,遇到元件就按规则改变方向、颜色,或者分裂出新的光束。分裂出来的束会排进队列,用同样的规则继续走。
为了防止镜面把光绕成死循环,单束最多走 64 段;同时记下「格子 + 方向 + 颜色」三元组,重复出现就不再继续。这两个限制保证了再怎么乱摆,画面也不会卡住。接收器本身不挡光,所以一条光路可以连续点亮好几个。
- 方向只有上下左右四种,镜面只做 90 度反射;
- 分光棱镜把一束变成直行与垂直两束;
- visited(格子, 方向, 颜色) 去重,单束上限 64 段;
- 所有接收器都被正确颜色照到即过关。
五种元件
元件种类刻意压到五种,每一种只负责一件事,看到图标就知道它会怎么改光路。前面几关一次只给一种,后面才叠起来用。
- 双面镜 `/` 与 `\`:点一下旋转 90 度,把光反射到垂直方向;
- 分光棱镜:一束进,直行与垂直两个方向各出一束;
- 玻璃砖:光穿过去时颜色按红 → 绿 → 蓝 → 红 偏移一档;
- 传送门:成对出现,从 A 进去按原方向从 B 继续,位置和朝向都保留;
- 遮光板:直接吸收光束,用来切断一条你不想让它继续走的路。
颜色会相加
颜色用三个位来记:红、绿、蓝各占一位。两束光落在同一格时按位相加,于是红加绿是黄,绿加蓝是青,红加蓝是品红,三色齐了就是白。玻璃砖把颜色在这三个位之间轮换一档,所以它其实是一个「换色器」,不是减速带。
接收器会写明自己要的颜色。只被红光照到而它要的是黄,不会算通过;得想办法把绿的那束也引到同一格。中后期不少关卡的解法都藏在这里:不是再修一条路,而是让两条路在终点前汇合。
- 红 #ff4d6d · 绿 #5fe3a0 · 蓝 #4cc9f0;
- 红 + 绿 = 黄,绿 + 蓝 = 青,红 + 蓝 = 品红;
- 红 + 绿 + 蓝 = 白;
- 错色照亮不会过关,但会给一点视觉提示。
三十关怎么保证有解
关卡不是随手撒几面镜子再祈祷能过。生成时先摆出一套完整可行的镜面布局,把光束跑一遍,只把「真的被照亮的格子」挑出来放接收器,且接收器要的颜色就等于那一格实际算出来的颜色。这样解答从构造上就存在。
然后把这套布局里的大部分镜面按原样锁好,只留少数几格留给玩家去转或去放。难度靠留白数量和引入的元件种类往上涨,不靠把答案藏得更深。固定种子保证同一关每次打开完全一样,也方便你回头刷最少步数。
步数、撤销与提示
每转一次镜面、每放一个元件记 1 步,撤销和提示不计步。过关时把这一关的步数写进本机记录,只保留更小的那个;选关屏里已通关的格子会标出来,标题屏显示你过了多少关、总共用了多少步。
提示会高亮一个「和解答布局还不一致」的格子,不直接替你转好。它不限次数,但也不会偷偷改答案。撤销用栈实现,能一路退回到开局;重置则把本关恢复到初始状态。
常见问题
- 光会不会因为镜子摆成环而卡住?
- 不会。单束最多走 64 段,而且「格子 + 方向 + 颜色」重复出现就停止追踪,循环会被直接截断。
- 接收器亮了为什么还不过关?
- 多半是颜色不对。看一下接收器要的是单色还是混色,把另一束光也引到同一格,或者用玻璃砖把颜色换一档。
- 提示会不会把答案直接给我?
- 不会。它只高亮一个还没摆对的格子,转几下、往哪转仍然由你决定,也不计入步数。
- 进度会同步到别的设备吗?
- 不会。通关状态与最少步数只写在这台设备的浏览器本地存储里,没有账号也没有服务端。