- 删除 modes/02-connect-1234 全部内容(历史见首个提交 8026e46) - 重写根 README:共同规则、两玩法差异、仓库结构、快速开始、关卡、工程约定、文档索引、路线 - PRODUCT.md / design.md / shared/README / 两份 GDD / 玩法一 README 去掉玩法二引用 - 保留 01 / 03 目录编号并注明原因(存档桶名、Cocos 资源路径)
9.8 KiB
number-swipe
多玩法休闲 puzzle(工作名,上架名未定)。目前两个玩法,都属于「顺序一笔画」路径推理:用一次滑动走遍盘面上每一格,预先写好的数字必须刚好在那一步踩到。两者几何与障碍不同,共用一个壳,规则代码彼此独立。
手机竖屏、单机、离线可玩;无计时、无体力、无分数。先做 Web 触摸原型验证玩法,再迁 Cocos Creator。
| 玩法 | 目录 | 一句话 | 状态 |
|---|---|---|---|
| 一 · 数字一笔 | modes/01-number-stroke |
矩形拼板一笔画,大格只计一步,数字 / 奇偶线索必须踩对 | Web 竖屏原型可玩,26 关(入门 10 + 进阶 10 + 奇与偶 6),有单文件试玩版 |
| 三 · 六边一笔 | modes/03-hex-walls |
六边形一笔画,墙贴在边上挡住那一条邻接 | Web 竖屏原型可玩,10 关 + 转墙实验包 9 关 |
目录编号保留 01 / 03:曾有玩法二(连连气球),2026-09-16 放弃并移出仓库(历史在首个提交里)。编号同时是存档桶名和 Cocos 资源路径,不要重排。
两个玩法的共同规则
- 哈密顿路径:每格恰好经过一次,只能走到相邻且未走过的格,第
k步的格子显示数字k。 - 线索:部分格预写数字
c,走到时步号必须等于c。线索可在中段;可以没有1(起点未知)。 - 允许画错,不允许锁死:踩错线索的格变红,不打断手势;随时沿原路撤销或一键重开;没有失败弹窗。
- 解唯一:每一关发布前由求解器断言恰好 1 条满足全部线索的路径。
- 提示不带错:无路径时指起点;路径是解的前缀时给下一步;已偏离时高亮分叉点让玩家退回,不继续往错路上填。
- 过关:所有格走过且所有线索正确 → 短动效后自动下一关。
两个玩法的差异
| 一 · 数字一笔 | 三 · 六边一笔 | |
|---|---|---|
| 格子 | 轴对齐矩形(1×1 到 3×3)和俄罗斯方块式异形块,整块只计 1 步 |
正六边形,一格一步,无大格 |
| 邻接 | 四向共边 | 六向共边(轴坐标 q, r) |
| 障碍 | 空洞 | 空洞 + 边墙(有墙的两格视为不相邻);实验:随步数旋转的转墙 |
| 额外线索 | 奇 / 偶(该格步号的奇偶性) | – |
| 难度主旋钮 | 大格出口多但只算 1 步;相邻线索的步号差 | 墙掐掉表面上的近路;墙贴在线索旁让第一步只剩一个方向 |
| 存档桶 | mode:01-number-stroke |
mode:03-hex-walls |
玩法三不是玩法一的 DLC:几何、邻接、障碍都独立,两边各写一份规则代码,禁止互相 import。
仓库结构
number-swipe/
README.md 本文件
docs/
PRODUCT.md 产品级约定:壳、隔离规则、玩法清单、里程碑
design.md UI 设计规范:色彩令牌、字阶、组件、四档动效(玩法一为参考实现)
design.html 设计师版:色板、组件样张、可回放动效(离线双击可看)
modes/
01-number-stroke/ 玩法一 · 数字一笔(自包含)
docs/GDD.md 规格(权威)
docs/HANDOFF.md 交接:做了什么、怎么做、与 GDD 的偏差、待办、Cocos 迁移顺序
levels/*.json 三个关卡包
src/ 纯 TS 规则层(零 DOM / 零 Cocos 依赖)
web/ 浏览器粘合层:DOM / Canvas / PointerEvent / localStorage
tools/ 求解器命令行:校验、设计辅助、随机生成
tests/ 规则层单元测试(node:test)
03-hex-walls/ 玩法三 · 六边一笔(自包含,同样的分层)
docs/GDD.md
docs/HANDOFF.md
levels/*.json
src/ web/ tools/ tests/
shared/ 壳:选玩法首页、设置、存档索引、广告位(尚无代码)
releases/
数字一笔-试玩版.html 玩法一单文件试玩版,离线可开
每个玩法目录都是一个独立的 npm 工程,有自己的 package.json、tsconfig 和 node_modules。
快速开始
需要 Node.js 20+。两个玩法的命令完全一致,只是目录和端口不同。
# 玩法一 · 数字一笔(默认端口 8000)
cd modes/01-number-stroke
npm install
npm run dev # 本地服务 + 监听改动,终端打印手机可访问的局域网地址
npm run check # 类型检查(含 src/ 无 DOM 校验)+ 单元测试 + 全关卡唯一解校验
# 玩法三 · 六边一笔(默认端口 8100)
cd modes/03-hex-walls
npm install
npm run dev
npm run check
其它脚本(两边都有):
| 命令 | 作用 |
|---|---|
npm run build |
打包到 web/dist/app.js,之后可直接双击 web/index.html |
npm run validate |
逐关校验:连通、恰好 1 解(玩法三额外:第 3 关起去墙后不唯一、无冗余墙) |
npm run validate -- 1-7 |
只看某关并打印解 |
npm run design -- 1-7 --minimize |
当前线索里哪些可删 |
npm run generate -- ... |
随机铺盘 + 作者解 + 挑线索,批量产候选关 |
仅玩法一有 npm run build:standalone,导出 releases/数字一笔-试玩版.html:脚本、样式、26 关数据与合成音效全部内置,发一个文件给朋友即可离线试玩,全部关卡直接可选。
开发参数:URL 加 ?dev=1 解锁全部关卡并暴露调试句柄(window.__numberStroke / window.__hexWalls);玩法一支持 &level=3-1 直接跳关。
关卡
关卡全部是 JSON,运行时只做规则模拟,不存解;解由 tools/validate.ts 在发布前枚举并断言唯一。
玩法一(modes/01-number-stroke/levels/)
pack-1-tutorial.json入门 10 关:每关只加一个旋钮——滑动 → 走完 → 撤销 → 大格 → 中段线索 → 空洞 → 先推再画 → 2×2 枢纽 → 长条 → 小考。pack-2-advanced.json进阶 10 关:生成器产出 + 人工过目。大连块高频、3×3、异形块,难度靠相邻线索的步号差拉开;2-8 是第一关无线索1。pack-3-parity.json奇与偶 6 关:格上写「奇」/「偶」要求步号奇偶,与数字线索互斥、可与大格共用;每条奇偶条件都参与唯一性。
玩法三(modes/03-hex-walls/levels/)
pack-1-tutorial.json教学 10 关:无墙两关 → 第一堵墙 → 墙贴在1旁 → 中段线索 → 空洞 + 两墙 → 陷阱格 → 综合 → 走廊 → 满花盘 4 墙。每关断言「去掉全部墙后解不唯一」,保证墙在干活。pack-2-spinner.json转墙 9 关(实验):绕顶点转的墙,每走一格顺时针转 120°。规则见玩法三 GDD 附录 A。
每关明细(格数、线索、去墙解数)见各玩法 README。
工程约定
隔离规则(详见 docs/PRODUCT.md):
modes/*之间禁止互相 import。规则、求解器、关卡、对局视图都属于玩法自己。shared/只放壳:玩法注册表、首页、设置、存档索引、广告位、通用皮肤。禁止出现过关判定、邻接、提示算法、关卡 JSON。- 存档按玩法 id 分桶,互不读写。
- 壳看到的入口只有
{ id, title, mount(root, ctx), unmount() };ShellContext只给存档读写、音效、振动、返回首页。
分层约定(两个玩法一致,为迁 Cocos 设计):
src/用tsconfig.src.json(lib: ["ES2020"])编译,不能碰 DOM,import 全部无后缀。这层原样拷进 Cocos 工程。- 绘制走
Painter接口(圆角矩形 / 多边形 / 圆 / 居中文字),Web 用 Canvas 实现,Cocos 换Graphics+Label池实现,View.draw()不改。 - 输入走
PointerInput.down/move/up(),事件源可替换;存档走KeyValueStore抽象,Cocos 用sys.localStorage包一层。 - 视觉令牌三处一致:
web/style.css :root、src/theme.ts、docs/design.md,由tests/theme.test.ts校验。
内容约定:关卡、美术、文案全部原创,不使用第三方题库或素材。
文档索引
| 文档 | 内容 |
|---|---|
docs/PRODUCT.md |
产品结构、隔离规则、共享决策、里程碑 |
docs/design.md / design.html |
UI 设计规范与设计师样张 |
modes/01-number-stroke/docs/GDD.md |
玩法一规格:规则、交互、反馈、关卡语言、求解器、竖直切面、验收 |
modes/01-number-stroke/docs/HANDOFF.md |
玩法一交接:实现细节、与 GDD 的偏差、已知问题、Cocos 迁移步骤 |
modes/03-hex-walls/docs/GDD.md |
玩法三规格,附录 A 为转墙规则 |
modes/03-hex-walls/docs/HANDOFF.md |
玩法三交接 |
shared/README.md |
壳的边界:能放什么、不能放什么 |
状态与路线
| 阶段 | 状态 |
|---|---|
| 各玩法 M1/M2:规则库 + 求解器 + 可玩原型 + 存档 / 提示 / 音效 / 振动 | 两个玩法均已达成 |
| 真人试玩调校:手势死区、教学梯度、关卡难度手感 | 待做,需要 3~5 个没玩过的人 |
| 壳:选玩法首页、设置、存档索引 | 未开始(两个玩法原型都已可玩,可以开工) |
M4:迁 Cocos Creator 3.x,各玩法独立场景,资源放 assets/modes/<id>/ |
未开始,迁移顺序写在各 HANDOFF |
已知的规格与实现偏差(各 HANDOFF §3 有全表):两份 GDD 的教学关数与内容计划(玩法一 12 关 / 44 关,玩法三 8 关 / 32 关)仍是早期目标值,实际为 10 关 / 26 关与 10 关。