- 删除 modes/02-connect-1234 全部内容(历史见首个提交 8026e46) - 重写根 README:共同规则、两玩法差异、仓库结构、快速开始、关卡、工程约定、文档索引、路线 - PRODUCT.md / design.md / shared/README / 两份 GDD / 玩法一 README 去掉玩法二引用 - 保留 01 / 03 目录编号并注明原因(存档桶名、Cocos 资源路径)
169 lines
9.8 KiB
Markdown
169 lines
9.8 KiB
Markdown
# number-swipe
|
||
|
||
多玩法休闲 puzzle(工作名,上架名未定)。目前两个玩法,都属于「顺序一笔画」路径推理:用一次滑动走遍盘面上每一格,预先写好的数字必须刚好在那一步踩到。两者几何与障碍不同,共用一个壳,规则代码彼此独立。
|
||
|
||
手机竖屏、单机、离线可玩;无计时、无体力、无分数。先做 Web 触摸原型验证玩法,再迁 Cocos Creator。
|
||
|
||
| 玩法 | 目录 | 一句话 | 状态 |
|
||
|---|---|---|---|
|
||
| 一 · 数字一笔 | [`modes/01-number-stroke`](modes/01-number-stroke) | 矩形拼板一笔画,大格只计一步,数字 / 奇偶线索必须踩对 | Web 竖屏原型可玩,26 关(入门 10 + 进阶 10 + 奇与偶 6),有单文件试玩版 |
|
||
| 三 · 六边一笔 | [`modes/03-hex-walls`](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+。两个玩法的命令完全一致,只是目录和端口不同。
|
||
|
||
```bash
|
||
# 玩法一 · 数字一笔(默认端口 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`](docs/PRODUCT.md)):
|
||
|
||
1. `modes/*` 之间禁止互相 import。规则、求解器、关卡、对局视图都属于玩法自己。
|
||
2. `shared/` 只放壳:玩法注册表、首页、设置、存档索引、广告位、通用皮肤。禁止出现过关判定、邻接、提示算法、关卡 JSON。
|
||
3. 存档按玩法 id 分桶,互不读写。
|
||
4. 壳看到的入口只有 `{ 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/PRODUCT.md) | 产品结构、隔离规则、共享决策、里程碑 |
|
||
| [`docs/design.md`](docs/design.md) / [`design.html`](docs/design.html) | UI 设计规范与设计师样张 |
|
||
| [`modes/01-number-stroke/docs/GDD.md`](modes/01-number-stroke/docs/GDD.md) | 玩法一规格:规则、交互、反馈、关卡语言、求解器、竖直切面、验收 |
|
||
| [`modes/01-number-stroke/docs/HANDOFF.md`](modes/01-number-stroke/docs/HANDOFF.md) | 玩法一交接:实现细节、与 GDD 的偏差、已知问题、Cocos 迁移步骤 |
|
||
| [`modes/03-hex-walls/docs/GDD.md`](modes/03-hex-walls/docs/GDD.md) | 玩法三规格,附录 A 为转墙规则 |
|
||
| [`modes/03-hex-walls/docs/HANDOFF.md`](modes/03-hex-walls/docs/HANDOFF.md) | 玩法三交接 |
|
||
| [`shared/README.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 关。
|