搭积木 · 五联骨牌
一个 4 岁孩子能自己玩的拼图游戏,也是一个能算出 12 块全部铺法的求解器。
| 平台 |
块数 |
适合年龄 |
依赖 |
| 网页 / Windows |
3–12 |
3 岁起(3 块)到成人(12 块) |
网页无依赖;WPF 版需 .NET Framework 4.8 |
它长什么样
棋盘是 5 行 × n 列,下面一排积木。把积木拖进去,铺满就赢了。
┌───┬───┬───┬───┬───┐
│ ■ │ ■ │ │ │ │
├───┼───┼───┼───┼───┤
│ ■ │ ■ │ │ │ │ ← 已经放好的 P 形(5 格)
├───┼───┼───┼───┼───┤
│ ■ │ │ │ │ │
├───┼───┼───┼───┼───┤
│ │ │ │ │ │
├───┼───┼───┼───┼───┤
│ │ │ │ │ │
└───┴───┴───┴───┴───┘
┌───┬───┬───┐
│ │ │ │ ← 从下面拖上来
└───┴───┴───┘
拖动时,目标格子会提前亮起虚线框——松手之前就知道会落在哪。放不下会自己弹回去,不扣分,也不会输。
给谁做的
给孩子
不用认字、不用会旋转、不用赶时间。手指拖过去,会自己摆正、自己吸附。
给家长
每一关都保证有解;孩子走进死胡同会有人提醒,不会卡在那儿哭。帮助里写清了每个按钮干什么。
给想弄明白"为什么快"的人
从"12 块骨牌"到"精确覆盖",再到 860 倍提速的来龙去脉,都在文档里,连二进制都从头讲过。
三步就能玩
- 按住下面的一块积木
- 拖到棋盘上,看绿色虚影
- 松手,听到"咔哒"就放好了
没有第四步。不需要点确认,不需要切换模式,也不需要先看教程——但如果孩子不识字,第一次打开会自动播一遍演示:一只黄色手指带着积木飞进去。
为什么 4 岁能上手
不是把大人的游戏简化,而是把"4 岁还做不到的事"从规则里拿掉:
| 设计 |
做法 |
为什么 |
| 不用会旋转 |
程序自动试 8 个朝向,选最贴合的 |
心理旋转能力要到 7 岁后才成熟 |
| 不用对得很准 |
磁吸半径约一格,靠近就吸 |
手指落点误差约 ±10mm |
| 不会失败 |
无计时、无步数、无"错误"提示 |
4 岁没有"输"的概念,只有挫败 |
| 不用认字 |
全部图标:▶ 🎲 💡 ↩️ ❓ |
不识字 |
| 不用瞎猜 |
实时虚线虚影预告落点 |
不确定感最劝退 |
| 不会卡死 |
关卡预验证有解 + 死局提示 |
拼不出来又不知道为什么,最伤兴趣 |
还有一条容易被忽略的:积木盘里的颜色是按位置分配的,不是按形状固定。这样同屏出现的几块颜色差异一定够大,不会出现两块几乎一样的绿让孩子分不清。
功能一览
| 功能 |
说明 |
| 拖拽拼图 |
实时虚影、自动朝向、磁吸、弹回 |
| 关卡生成 |
每关由求解器先拼一遍,确认有解才发出 |
| 🎲 换一组 |
同块数换一批积木 |
| 下一关 |
块数 +1,到上限自动隐藏 |
| 💡 提示 |
闪一下某块该放哪 |
| ↩️ 撤销 |
拿回最后一块 |
| ▶ 看一遍 |
动画演示怎么玩(只演示 3 块,其余留给孩子) |
| 死局检测 |
走不通时温和提示,而不是干瞪眼 |
| 完成动画 |
撒花 + 星星 + 音阶 |
| 内置帮助 |
玩法、操作、算法、图示,游戏内可开 |
| 音效 |
代码实时合成,不带任何音频文件 |
两个版本,怎么选
|
网页版 |
WPF 版 |
| 适合 |
改设计、试手感、手机上试 |
给孩子实际使用 |
| 块数 |
3–8 |
3–12 |
| 打开方式 |
双击 HTML |
双击 exe |
| 音效 |
WebAudio |
SoundPlayer + 代码生成 WAV |
| 帮助 |
网页弹层 |
原生窗口,不依赖浏览器 |
建议:先在网页版上调交互(改一行刷新就见效),定稿后再同步到 WPF。反过来做会很痛苦。
它聪明在哪
游戏本身不难,难的是"任意给一组积木,判断能不能铺满,并把所有铺法都列出来"。
旧版程序走的是"枚举所有摆放顺序"这条路——12 块有 4.79 亿种顺序,而正确答案只有 4040 个。n=8 时要跑 225 秒,还只找出了 261 个解。
新版换了个问法:不问"下一块放哪块",而问"最左上角那个空格,该由谁来盖住它"。这个空格是棋盘自己决定的,所以同一个铺法只可能有一条路径,顺序这个维度直接消失了。再加上"优先处理候选最少的格子",n=8 只要 0.24 秒,而且解一个不少。
| n |
8 |
10 |
12 |
| 耗时 |
0.24 s |
2.1 s |
9.0 s |
顺带一个反直觉的事实:12 块的解反而最少(4040 个)。因为 12 块全用上,一块都不能换,约束最紧;10 块可以从 12 块里挑,自由得多,反而有 27,804 个解。
想从头看懂这件事:见 docs/五联骨牌算法详解.md(从二进制、递归、深度优先一路讲到代码逐行)。
马上开始
网页版
双击 game/prototype.html
WPF 版
双击 game/PentominoKids.exe
或用 Visual Studio 打开 wpf/PentominoKids.sln 按 F5。
目录
方块之谜/
├── game/ 网页版(单文件,可直接分发)
│ ├── prototype.html
│ └── help.html
├── wpf/ WPF 版(.NET Framework 4.8)
│ ├── PentominoKids.sln
│ └── PentominoKids/ 游戏、求解器、帮助、音效、图标
├── docs/ 算法教学文档
└── src/ 原 WinForms 项目(已接入新求解器)
已知限制
- 没有进度保存,关掉就从头开始
- 不能静音
- WPF 版仅系统级 DPI 感知,多显示器混合缩放时可能略糊
- 12 块时若进入极深搜索,提示可能被节点上限跳过(不影响手动操作)
关于
编写 阿石
工具 用 WorkBuddy 写成 · 模型 DeepSeek-V4.1-Flash
献给圈圈。