docs: Phase 1 立项完成 — 城市抓猫猫

- 01-project-charter.md: 立项书(方向/MVP范围/成功指标/待决策项)
- 02-game-design.md: 游戏设计(玩法规则/地图/猫猫/图鉴/广告/分享)
- 03-content-pipeline.md: 内容管线(数据结构/素材规范/分包策略)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
manpengan
2026-03-28 22:31:31 +08:00
parent d907b253ec
commit e74ac1e91e
5 changed files with 659 additions and 11 deletions

194
docs/01-project-charter.md Normal file
View File

@@ -0,0 +1,194 @@
# 01 Project Charter
## 1. 项目基本信息
| 字段 | 内容 |
|------|------|
| 项目名 | 城市抓猫猫 |
| 项目类型 | 微信小游戏 |
| 当前阶段 | 立项 / MVP 定义 |
| 平台约束 | Canvas 渲染、竖屏单手、首包 4 MB、无 DOM/BOM、60 fps 目标 |
| 文档目标 | 明确产品方向、MVP 范围、核心差异化与成功标准,作为后续设计和开发依据 |
## 2. 一句话定义
城市主题的"抓大鹅式堆叠三消"微信小游戏,玩家通过解锁全球城市、收集特色猫猫与城市图鉴,获得"解谜 + 旅行收藏"的双重体验。
## 3. 产品愿景
- 做一个不只是"换皮抓大鹅"的小游戏,而是具备长期扩展能力的城市收藏型解谜产品。
- 用"城市文化 + 猫猫 IP + 关卡挑战"形成可传播、可持续更新的内容结构。
- 在微信生态内验证"轻玩法 + 强主题 + 强收集"的产品路线。
## 4. 目标用户
**核心画像**
- **休闲解谜用户** -- 喜欢抓大鹅、羊了个羊、收纳、找物、消除类产品,追求短局放松和通关成就感。
- **女性和泛休闲用户** -- 对猫猫、旅行、城市文化、可爱视觉有偏好,愿意截图分享和收藏打卡。
- **微信生态用户** -- 碎片化游玩(通勤、午休、睡前),愿意分享和打卡,接受广告换奖励。
**市场数据支撑**
| 数据点 | 数值 | 来源 |
|--------|------|------|
| 微信小游戏 MAU | 5.71 亿 | 2025 微信公开课 |
| 微信渗透率 | 51.5% | 同上 |
| 40 岁以上用户占比 | 42.1% | 同上 |
| 女性用户占比 | 53% | 同上 |
| 主动找游戏(下拉/搜索/分享) | > 80% | 同上 |
| 2025 小程序游戏市场收入 | 535.35 亿元YoY +34.39% | DataEye 2025 报告 |
| 收入结构 -- IAP 占比 | 68.11% | 同上 |
| 收入结构 -- IAA 占比 | 31.89% | 同上 |
**用户获取关键路径**:微信下拉入口 > 好友分享卡片 > 搜索 > 广告投放。MVP 阶段优先依赖分享裂变和搜索自然流量。
## 5. 核心卖点
| # | 卖点 | 具体说明 |
|---|------|---------|
| 1 | 城市主题 | 每个城市都有独立视觉记忆点和特色物件(冰箱贴/纪念品/贴纸),形成可辨识的关卡身份 |
| 2 | 猫猫 IP | 每个城市对应一只特色猫猫(融合城市文化元素的参数化设计),形成收集驱动 |
| 3 | 探索 Meta | 通过城市解锁、护照盖章、图鉴完成度形成长期目标,激发完成主义动力 |
| 4 | 易上手 | 核心操作沿用成熟堆叠三消机制(点击拾取 → 槽位堆叠 → 三消消除),学习成本低,首局即懂 |
| 5 | 可扩展 | 城市内容包可持续更新(新洲/新城市/新猫猫),适合长线运营和版本节奏 |
## 6. 竞品对比
### 6.1 直接竞品对比表
| 维度 | 羊了个羊 | 抓大鹅 | Water Sort Puzzle | Hexa Sort | 城市抓猫猫(本项目) |
|------|---------|--------|-------------------|-----------|---------------------|
| 品类 | 堆叠三消 | 堆叠三消 | 排序解谜 | 排序 + 建造 | 堆叠三消 + 城市收藏 |
| 核心驱动 | 社交裂变 + 高难度情绪 | 活动运营 + 闯关 | 单局解谜快感 | 排序 + 建造 Meta | 通关 + 收集 + 打卡 + 解锁 |
| 主题/世界观 | 弱(纯抽象) | 中(杂物主题) | 弱(纯色水管) | 中(城镇建造) | 强(全球城市 + 猫猫 IP |
| D1 留存 | 高(社交拉动) | 35-45% | 40-50% | 45-55% | 目标 > 40% |
| D30 留存 | 依赖社交热度,衰减快 | 中等 | < 10%(无 Meta 层) | > 15%(有建造 Meta | 目标 > 8%(城市图鉴 Meta |
| 长线内容 | 弱 | 中 | 弱 | 中(建造) | 强(城市包持续扩展) |
| 日活参考 | 峰值超 300 万 | 百万级 | 全球千万级下载 | 终身收入 $2700 万+ | -- |
| 变现模型 | IAA 为主 | IAA + 轻 IAP | IAA 为主 | IAA + IAP | IAA 为主 → 逐步加 IAP |
### 6.2 我们的差异化
- **不是单纯高难度情绪型产品**,而是"城市收藏型解谜" -- 用正向收集感替代挫败-裂变循环。
- **不是杂物堆叠**,而是统一的"城市纪念品 / 冰箱贴 / 贴纸"视觉体系 -- 每个城市关卡有清晰的文化身份。
- **不是单局刺激为主**,而是"通关 + 收集 + 打卡 + 解锁"复合驱动 -- 提供跨局的长期目标感。
- **通过城市内容系统和难度控制系统建立后续壁垒** -- 竞品可抄玩法,但不易复制完整的城市内容库和生产流水线。
## 7. 核心产品判断
| 判断维度 | 方向 |
|---------|------|
| 核心玩法 | 抓大鹅式堆叠三消(点击拾取 → 槽位堆叠 → 三消消除) |
| 包装方向 | 城市探索 + 猫猫收集(护照/图鉴/猫猫档案) |
| 变现方向 | IAA 为主(冷启动期占比约 80%),轻 IAP 为辅;成熟期目标 IAP 提升至 40-45% |
| 版本策略 | 先做小而完整的 MVP1 洲 6 城市),验证后再扩洲、国家、城市 |
| 激励视频 eCPM | 约 60-120 元/千次曝光(微信小游戏休闲品类参考值) |
| 社交裂变贡献 | 目标 30-50% 新用户来自好友分享 |
| 2026 首发激励金 | 上限 400 万/款(微信小游戏首发激励计划) |
## 8. MVP 范围
### 8.1 进入 MVP
| 模块 | 范围 | 说明 |
|------|------|------|
| 城市地图 | 1 个洲(亚洲) | 作为首批内容包 |
| 城市数量 | 6 个:北京、东京、曼谷、首尔、新加坡、伊斯坦布尔 | 文化辨识度高、素材丰富、覆盖东亚/东南亚/西亚 |
| 城市元素 | 每城市 12-15 个特色元素(冰箱贴风格) | 建筑、美食、文化符号、交通工具等 |
| 猫猫形象 | 每城市 1 个猫猫头形象 | 融合城市文化元素的参数化猫猫设计 |
| 图鉴系统 | 1 套基础城市护照/图鉴系统 | 城市解锁进度、猫猫收集、护照盖章 |
| 每日挑战 | 1 套每日挑战 | 每日 1 关限时挑战,提供日常活跃目标 |
| 分享系统 | 1 套基础分享明信片 | 城市通关/猫猫收集成果分享卡片 |
| 激励视频广告 | 复活、重排、道具、奖励翻倍 | 核心变现手段 |
| 插屏广告 | 局后展示 | 严格控频(每 3 局最多 1 次,单日上限 5 次) |
### 8.2 不进入 MVP
| 排除项 | 原因 |
|--------|------|
| 复杂剧情 | MVP 聚焦玩法验证,剧情增加开发和内容成本 |
| 重社交系统(组队、实时对战) | 技术复杂度高MVP 只做分享裂变 |
| 过深国家/洲多级地图运营玩法 | MVP 简化为"洲 → 城市"二级结构 |
| 大量皮肤付费系统 | MVP 不做 IAPV1.1+ 再引入 |
| 多玩法混合模式 | MVP 只验证堆叠三消核心玩法 |
| IAP 内购 | MVP 只做 IAA 验证V1.1+ 加入去广告月卡等轻 IAP |
## 9. 技术与内容壁垒
### 9.1 技术壁垒
| 壁垒 | 说明 |
|------|------|
| 城市内容系统 | 城市元素、标签、图鉴、封面、猫猫资产统一配置化JSON 驱动),新增城市只需配置 + 资源,不改代码 |
| 可控难度生成器 | 控制遮挡层级、解法数、失败率、难度曲线;支持按城市/关卡精调,保证通关率在目标区间 |
| 资源分包策略 | 按洲/城市内容包加载,首包只含核心代码 + 首城资源;后续城市按需下载,保证首包 < 4 MB |
| 纯 Canvas 2D 手写框架 | 不用引擎Cocos/Laya首包预算约 2.5 MB自研轻量渲染/事件/动画/资源管理模块 |
### 9.2 内容壁垒
| 壁垒 | 说明 |
|------|------|
| 参数化猫猫设计体系 | 基于统一猫猫基础形态 + 城市文化参数(服饰/配饰/颜色/表情),批量生成城市猫猫 |
| 城市纪念品视觉语言 | 扁平冰箱贴风格,统一线条粗细、调色板、圆角风格,形成系列感 |
| 可持续扩展的城市图库和图鉴数据 | 结构化城市数据(地标、美食、交通、文化符号),支持快速扩展新城市 |
| AI 生成 + 人工修正的内容生产流水线 | AI 出图Midjourney/SD→ 人工修正(一致性/尺寸/透明背景)→ 入库,单城市素材产出周期 2-3 天 |
## 10. 商业化思路
| 变现方式 | 触发场景 | 预估收入占比 | 阶段 |
|---------|---------|-------------|------|
| 激励视频 | 复活(通关失败时)、重排(牌面无解时)、获取道具、额外奖励翻倍 | 55-65% | MVP 起 |
| 插屏广告 | 局后结算页、城市解锁节点 | 15-20% | MVP 起 |
| 去广告月卡 | 12-18 元/月,免除所有强制广告 | 10-15% | V1.1+ |
| 猫猫装扮 | 猫猫皮肤/配饰付费解锁 | 3-5% | V1.1+ |
| 城市快速解锁 | 跳过通关直接解锁城市内容 | 2-5% | V1.1+ |
**变现节奏**:冷启动期 IAA 占比约 80%,成熟期目标 IAP 提升至 40-45%。
**分享裂变**:城市解锁、猫猫收集、护照打卡结果生成分享卡片 → 好友点击进入游戏。
**开发者分成**:基础 60% + 月流水梯度激励最高 10% = 最高可达 70%。
## 11. 成功指标
### 11.1 MVP 验证指标(上线 2 周内)
| 指标 | 目标值 | 说明 |
|------|--------|------|
| 新手首局完成率 | > 95% | 首关必须极简,验证新手引导有效性 |
| 单局时长 | 2-4 分钟 | 休闲小游戏最佳甜区,太短无沉浸感,太长碎片化不友好 |
| 次日留存D1 | > 40% | 微信小游戏休闲品类合格线,低于此值需检查核心循环 |
| 激励视频完成率 | > 60% | 验证广告触发时机和奖励吸引力是否合理 |
| 首城通关率6 关) | > 70% | 验证前 6 关难度曲线是否平滑 |
| 分享率DAU 中分享人数占比) | > 15% | 验证分享明信片的传播动力 |
### 11.2 中期指标(上线 1-3 个月)
| 指标 | 目标值 | 说明 |
|------|--------|------|
| 7 日留存D7 | > 20% | 验证城市解锁和图鉴系统能否提供跨日目标 |
| 30 日留存D30 | > 8% | 验证 Meta 层(护照/图鉴/猫猫收集)的长期留存能力 |
| 人均解锁城市数 | > 36 城中) | 验证城市间推进动力是否足够 |
| 图鉴完成度(活跃用户平均) | > 40% | 验证收集系统的参与度 |
| ARPDAU | > 0.3 元 | 微信小游戏 IAA 品类基准线 |
| 自然新增占比 | > 50% | 验证产品自传播能力,降低获客成本依赖 |
## 12. 当前待锁定决策
| # | 决策项 | 建议方向 | 决策依据 | 状态 |
|---|--------|---------|---------|------|
| 1 | 消除机制 | 沿用抓大鹅堆叠三消,不做大变体 | 机制成熟、用户认知成本低、开发风险小 | 待确认 |
| 2 | 首页层级 | MVP 简化为"洲 → 城市"二级(去掉国家层) | 减少导航深度MVP 只有 1 洲 6 城市,三级无意义 | 待确认 |
| 3 | 首批 6 城市 | 北京、东京、曼谷、首尔、新加坡、伊斯坦布尔 | 文化辨识度高、素材丰富、地理分布覆盖亚洲主要区域 | 待确认 |
| 4 | 美术风格 | 扁平冰箱贴风 | 辨识度高、AI 生成友好、适合小尺寸 Canvas 渲染 | 待确认 |
| 5 | 素材生产 | AI 出图 + 人工修正 | 单城市 2-3 天产出,成本可控,质量可接受 | 待确认 |
## 13. 下一步产出
| 产出物 | 文件 | 内容要点 |
|--------|------|---------|
| 核心玩法与系统设计 | `02-game-design.md` | 堆叠三消规则、槽位机制、道具设计、地图结构、图鉴系统、每日挑战规则 |
| 内容生产流水线 | `03-content-pipeline.md` | 城市数据结构JSON schema、素材规范尺寸/格式/命名、AI 生成 prompt 模板、人工修正 checklist |
| MVP 城市清单 | 同上或独立文档 | 6 城市元素清单(每城 12-15 个)、猫猫设计参数、封面/图鉴配置 |
| 核心玩法原型 | 代码原型 | 关卡生成规则草案、难度参数定义、核心交互 demo |

193
docs/02-game-design.md Normal file
View File

@@ -0,0 +1,193 @@
# 02 Game Design — 城市抓猫猫
## 1. 核心玩法规则
### 1.1 基础机制
抓大鹅式堆叠三消:
- 场景中多层堆叠物件(城市特色元素:冰箱贴、美食、建筑、动物等)
- 上层物件遮挡下层,只有**未被完全遮挡**的物件可点击拾取
- 底部 **7 格暂存槽**
- 点击物件 → 飞入暂存槽 → 3 个同类物件自动消除
- 暂存槽满 7 格且无法消除 → 游戏失败
### 1.2 胜利/失败条件
| 条件 | 规则 |
|------|------|
| 胜利 | 清除场景中所有物件 |
| 失败 | 暂存槽满 7 格无法消除 |
| 时间 | 无时间限制MVP 阶段),靠物件数量控制局时 2-4 分钟 |
### 1.3 道具系统MVP
| 道具 | 效果 | 免费额度 | 额外使用 |
|------|------|---------|---------|
| 重排 Shuffle | 重新打乱场景中剩余物件的堆叠顺序 | 每局 1 次 | 激励视频 |
| 撤回 Undo | 撤回最后拾取的 3 个物件放回场景原位 | 每局 1 次 | 激励视频 |
| 移出 Remove | 从暂存槽移出 3 个不同物件放到临时区(下次消除后回归暂存槽) | 每局 1 次 | 激励视频 |
### 1.4 操作交互
| 交互 | 规格 |
|------|------|
| 拾取方式 | 单点点击(不用拖拽) |
| 飞入动画 | 贝塞尔曲线路径0.2s |
| 消除动画 | 闪光 + 缩放消失0.3s |
| 通关动画 | 撒花 + 城市特色猫猫出现1s |
---
## 2. 地图结构
### 2.1 导航层级MVP 简化为二级)
```
主页面洲选择3x3 棋盘)
└── 洲内页面城市选择3x3 棋盘)
└── 城市关卡(单局游戏)
```
### 2.2 主页面设计
- 3x3 棋盘布局,每格代表一个洲
- MVP 只开放 1 个洲(亚洲),其余锁定显示"即将开放"
- 洲封面:标志性元素 + 解锁进度(如"3/9 城市已解锁"
### 2.3 洲内页面设计
- 3x3 棋盘布局,每格代表一个城市
- 城市封面:特色猫猫头像 + 城市名
- 已通关城市:猫猫头像点亮 + 通关星级
- 未解锁城市:灰色剪影 + 锁图标
- 解锁规则:顺序解锁(通关前一个解锁下一个),第 1 个城市默认解锁
### 2.4 城市关卡结构
每个城市包含 **6 个基础关卡**,全部通关才算"通关该城市"。
- 每关使用该城市 12-15 个特色元素中的 8-12 个
- 难度递增:关 1 用 6 种元素各 3 个,关 6 用 10 种元素各 3-4 个 + 更深堆叠
- 通关后获得该城市的猫猫收集卡
---
## 3. 城市猫猫系统
### 3.1 猫猫收集
- 每个城市对应 1 只特色猫猫
- 通关该城市所有 6 关 → 获得猫猫收集卡
- 猫猫头像作为城市封面显示在地图上
### 3.2 猫猫设计规则
每只猫猫的差异化维度:
| 维度 | 说明 |
|------|------|
| 品种暗示 | 不写实,用颜色和花纹暗示 |
| 城市穿戴 | 城市特色装饰(东京猫戴招财猫面具、北京猫戴虎头帽) |
| 视觉风格 | 统一扁平冰箱贴风格,确保一致性 |
### 3.3 猫猫展示
| 场景 | 表现 |
|------|------|
| 通关城市 | 猫猫出场动画(从屏幕外跳入 + 特效) |
| 图鉴页面 | 已收集猫猫陈列展示 |
| 未收集 | 灰色剪影 + "???" |
---
## 4. 图鉴系统
### 4.1 城市图鉴
- 记录每个城市的通关状态、星级、特色元素收集进度
- 展示该城市文化小知识1-2 句话)
### 4.2 猫猫图鉴
- 已收集猫猫陈列(按洲分类)
- 每只猫猫有名字 + 1 句话介绍
- 收集进度X/Y 只
### 4.3 护照系统
- 每通关一个城市,护照盖一个章
- 护照页面可分享为"明信片"
- 护照进度是核心成就展示
---
## 5. 每日挑战
| 项目 | 规格 |
|------|------|
| 内容 | 每天 1 个随机城市的特殊关卡 |
| 难度 | 比普通关卡略高(更多物件种类、更深堆叠) |
| 奖励 | 金币(用于未来 IAP 系统)+ 特殊明信片 |
| 生成方式 | 程序化生成(基于难度参数随机组合) |
---
## 6. 广告入口设计
| 广告类型 | 触发点 | 频次控制 |
|---------|--------|---------|
| 激励视频 | 失败后"复活"(清空暂存槽继续) | 每局最多 1 次 |
| 激励视频 | 使用额外道具(重排/撤回/移出) | 每种每局 1 次 |
| 激励视频 | 通关后"双倍奖励" | 每局可选 |
| 激励视频 | 每日签到奖励翻倍 | 每日 1 次 |
| 插屏广告 | 通关结算后(非失败后) | 每 3 局 1 次 |
原则:**失败后不弹插屏**(避免负面情绪叠加),激励视频全部可选不强制。
---
## 7. 分享入口设计
| 触发点 | 分享内容 | 奖励 |
|--------|---------|------|
| 通关城市 | 城市猫猫卡片 + "我解锁了XX猫" | 金币 |
| 护照盖章 | 护照截图 + 收集进度 | 道具 |
| 每日挑战通关 | 挑战结果卡片 | 金币 |
| 图鉴里程碑 | "已收集X只猫猫" | 特殊明信片 |
分享卡片设计:猫猫形象 + 城市背景色 + 进度信息 + 小程序入口按钮。
---
## 8. 难度设计思路
### 8.1 难度参数
| 参数 | 范围 | 说明 |
|------|------|------|
| 物件种类数 | 6-12 | 种类越多,匹配越难 |
| 每种物件数量 | 3 的倍数(通常 3 或 6 | 必须是 3 的倍数保证可消除 |
| 堆叠层数 | 2-5 层 | 层数越多,可见物件越少 |
| 遮挡密度 | 低/中/高 | 物件重叠面积占比 |
| 总物件数 | 18-60 | 局时控制核心参数 |
### 8.2 城市内难度曲线
```
关1: 6种 × 3个 = 18件, 2层, 低遮挡 → 新手教学
关2: 7种 × 3个 = 21件, 2层, 低遮挡 → 轻松熟悉
关3: 8种 × 3个 = 24件, 3层, 中遮挡 → 开始有策略
关4: 9种 × 3个 = 27件, 3层, 中遮挡 → 需要思考
关5: 10种 × 3个 = 30件, 4层, 中高遮挡 → 考验规划
关6: 10种 × 3-6个 = 36件, 4层, 高遮挡 → Boss关
```
### 8.3 跨城市难度递进
| 城市序号 | 定位 | 特点 |
|---------|------|------|
| 城市 1北京 | 教学城市 | 最简单,引导玩家熟悉机制 |
| 城市 2-3 | 平滑上升 | 物件种类增加,层级不变 |
| 城市 4-5 | 进阶挑战 | 引入更高层级 + 更多种类 |
| 城市 6 | 挑战级 | 最大物件数 + 最深堆叠 |

261
docs/03-content-pipeline.md Normal file
View File

@@ -0,0 +1,261 @@
# 03 Content Pipeline — 城市抓猫猫
## 1. 城市数据结构
每个城市是一个独立的内容包。使用 JS module 格式(微信小游戏 `require()` 不支持 JSON
### 1.1 城市配置
```javascript
// cities/beijing.js
module.exports = {
id: 'beijing',
name: '北京',
nameEn: 'Beijing',
continent: 'asia',
// 地图封面
cover: {
catImage: 'images/cats/beijing.png', // 猫猫头像
bgColor: '#CC2936', // 城市主色调
},
// 城市文化信息
culture: {
tagline: '天安门前看猫猫', // 一句话标语
funFact: '北京是世界上拥有最多宫殿的城市', // 文化冷知识
},
// 特色元素列表12-15个
elements: [
{ id: 'beijing_01', name: '糖葫芦', category: 'food', image: 'elements/beijing/tanghulu.png' },
{ id: 'beijing_02', name: '京剧脸谱', category: 'culture', image: 'elements/beijing/opera_mask.png' },
// ... 12-15 个
],
// 关卡配置6关
levels: [
{ id: 1, elementCount: 6, piecesPerElement: 3, layers: 2, density: 'low' },
{ id: 2, elementCount: 7, piecesPerElement: 3, layers: 2, density: 'low' },
{ id: 3, elementCount: 8, piecesPerElement: 3, layers: 3, density: 'medium' },
{ id: 4, elementCount: 9, piecesPerElement: 3, layers: 3, density: 'medium' },
{ id: 5, elementCount: 10, piecesPerElement: 3, layers: 4, density: 'medium_high' },
{ id: 6, elementCount: 10, piecesPerElement: [3,3,3,3,3,6,3,3,3,3], layers: 4, density: 'high' },
],
}
```
**字段说明:**
| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `id` | string | Y | 城市唯一标识,小写英文,用于文件路径 |
| `name` | string | Y | 中文名 |
| `nameEn` | string | Y | 英文名 |
| `continent` | string | Y | 所属洲 id |
| `cover.catImage` | string | Y | 猫猫头像路径(相对于资源根目录) |
| `cover.bgColor` | string | Y | 城市主色调 HEX |
| `culture.tagline` | string | Y | 一句话标语,不超过 10 个字 |
| `culture.funFact` | string | Y | 文化冷知识,不超过 25 个字 |
| `elements[].id` | string | Y | 格式 `{city_id}_{两位序号}` |
| `elements[].name` | string | Y | 元素中文名 |
| `elements[].category` | string | Y | 分类:`food` / `culture` / `landmark` / `nature` / `item` |
| `elements[].image` | string | Y | 图片路径(相对于资源根目录) |
| `levels[].piecesPerElement` | number\|number[] | Y | 3 的倍数;数组时长度须等于 `elementCount` |
### 1.2 洲索引配置
```javascript
// continents/asia.js
module.exports = {
id: 'asia',
name: '亚洲',
nameEn: 'Asia',
bgColor: '#FF6B6B',
cities: ['beijing', 'tokyo', 'bangkok', 'seoul', 'singapore', 'istanbul'],
unlockOrder: ['beijing', 'tokyo', 'bangkok', 'seoul', 'singapore', 'istanbul'],
}
```
`unlockOrder` 决定城市解锁顺序:通关前一个城市后解锁下一个。
---
## 2. 素材规范
### 2.1 元素图标
| 项目 | 规范 |
|------|------|
| 尺寸 | 128x128px @2x(实际渲染 64x64 |
| 格式 | PNG透明背景 |
| 风格 | 扁平冰箱贴风 -- 圆角矩形白底 + 彩色图标 + 1px 浅灰描边 + 微投影 |
| 色彩 | 高饱和度,同城市内元素色彩需有区分度(消除时快速识别) |
| 命名 | `{city_id}_{序号}.png`,如 `beijing_01.png` |
### 2.2 猫猫头像
| 项目 | 规范 |
|------|------|
| 尺寸 | 封面 256x256px @2x + 图鉴 128x128px @2x |
| 格式 | PNG透明背景 |
| 风格 | 正面朝向的扁平猫猫头,统一基础轮廓 + 城市特色装饰 |
| 差异化 | 通过颜色、花纹、头饰/装饰体现城市特色 |
| 命名 | `cat_{city_id}.png`(封面)、`cat_{city_id}_thumb.png`(图鉴) |
### 2.3 城市背景
- 不做复杂背景图
- 用城市主色调 (`bgColor`) 作为纯色/渐变底
- 可选:底部用 2-3 个城市地标的简笔剪影
### 2.4 音效
| 音效 | 描述 | 时长 |
|------|------|------|
| 点击拾取 | 轻快的"叮" | 0.1s |
| 三消消除 | 满足感的"嗒嗒嗒"连续音 | 0.3s |
| 通关 | 猫叫 + 欢快音效 | 1s |
| 失败 | 温和的失望音(不要太负面) | 0.5s |
格式要求MP3单声道44.1kHz,单个文件 < 50KB。
---
## 3. 猫猫生成规则
### 3.1 基础模板
所有猫猫基于统一的基础轮廓模板:
- 圆形头部
- 三角形耳朵
- 简笔五官(两眼 + 鼻 + 嘴 + 胡须)
### 3.2 差异化参数
| 参数 | 说明 | 示例 |
|------|------|------|
| `baseColor` | 主体毛色 | 北京: 橘色, 东京: 白色 |
| `pattern` | 花纹类型 | 虎斑 / 纯色 / 三花 / 奶牛 |
| `patternColor` | 花纹颜色 | -- |
| `accessory` | 头饰/装饰 | 北京: 虎头帽, 东京: 招财猫铃铛 |
| `expression` | 表情 | 微笑 / 眯眼 / 吐舌 |
### 3.3 生产流程
1. 用 AI 工具Midjourney / DALL-E / Stable Diffusion按参数生成初稿
2. Prompt 模板:
```
flat design cat head icon, {baseColor} cat with {pattern},
wearing {accessory}, cute, simple, sticker style,
white background, no text
```
3. 人工修正:统一线条粗细、色彩饱和度、整体风格一致性
4. 导出 2 个尺寸256px + 128px
---
## 4. 关卡配置格式
### 4.1 难度参数
```javascript
{
elementCount: 8, // 使用多少种元素
piecesPerElement: 3, // 每种元素几个(必须是 3 的倍数)
layers: 3, // 堆叠层数
density: 'medium', // 遮挡密度low / medium / medium_high / high
}
```
**难度递进规律:** 关 1-2 低密度入门 -> 关 3-4 中密度爬坡 -> 关 5-6 高密度挑战。关 6 允许 `piecesPerElement` 为数组,制造不均匀分布的额外难度。
### 4.2 关卡布局生成
不手工摆放物件位置,用程序化生成器:
- **输入:** 难度参数 + 城市元素列表
- **输出:** 每个物件的 `{ elementId, x, y, layer, rotation }`
- **生成约束:**
- 每层物件不超过总数的 40%
- 最底层至少有 30% 的物件初始可点击
- 保证可解性(从目标状态反向推导)
### 4.3 难度验证
用脚本模拟 1000 次随机合理操作,验证通关率:
| 关卡 | 目标通关率 |
|------|-----------|
| 关 1 | > 95% |
| 关 2 | > 90% |
| 关 3 | > 80% |
| 关 4 | > 70% |
| 关 5 | > 60% |
| 关 6 | 50-60% |
失败率过高时降低 `density` 或 `layers`。
---
## 5. 分包策略
### 5.1 包体划分
```
主包(<= 4MB
├── game.js + js/(核心框架、渲染引擎、游戏逻辑) ~150KB
├── images/ui/(通用 UI 元素、按钮、图标) ~300KB
├── images/cats/beijing.png首个城市猫猫头像 ~50KB
├── audio/通用音效6-8 个) ~300KB
├── cities/beijing.js首个城市数据配置 ~5KB
└── images/elements/beijing/(首个城市元素图标) ~200KB
─────────
~1005KB
分包 - 城市包(每包 <= 2MB
└── sub-asia/
├── cities/tokyo.js + bangkok.js + ...
├── images/elements/tokyo/ + bangkok/ + ...
└── images/cats/tokyo.png + bangkok.png + ...
```
### 5.2 首包预算分配
| 内容 | 预估大小 | 说明 |
|------|---------|------|
| 代码(框架 + 逻辑) | ~150KB | 纯 Canvas 手写,无引擎 |
| 通用 UI 素材 | ~300KB | 按钮、图标、背景、字体 |
| 首城市素材(北京) | ~250KB | 15 元素 + 猫猫 + 封面 |
| 音效 | ~300KB | 6-8 个通用音效 |
| **合计** | **~1000KB** | **利用率 25%,空间充裕** |
### 5.3 加载策略
- 进入洲页面时预下载该洲分包(`wx.preDownloadSubpackage`
- 单个城市包预估:配置 ~5KB + 元素图 15x10KB = ~155KB + 猫猫 ~30KB = ~190KB
- 6 城市约 1.14MB,在分包限制内
---
## 6. MVP 城市清单与素材计划
### 6.1 首批 6 城市
| 城市 | 元素主题方向 | 猫猫特色 |
|------|------------|---------|
| 北京 | 糖葫芦、京剧脸谱、天安门、烤鸭、兔儿爷、长城砖、故宫角楼、豆汁、二锅头、鸟巢、铜锣、毛笔 | 橘猫 + 虎头帽 |
| 东京 | 寿司、招财猫、富士山、樱花、鸟居、拉面、抹茶、浮世绘、新干线、达摩、和服扇、章鱼烧 | 白猫 + 招财猫铃铛 |
| 曼谷 | 冬阴功、嘟嘟车、大象、泰拳手套、芒果糯米饭、金佛、莲花、榴莲、泰丝、椰子、船面、佛塔 | 暹罗猫配色 + 泰式花环 |
| 首尔 | 泡菜坛、石锅拌饭、韩服、景福宫、烧酒瓶、年糕、K-pop 话筒、太极旗扇、韩式炸鸡、柿子、海苔卷 | 韩国短尾猫 + 韩服小帽 |
| 新加坡 | 鱼尾狮、辣椒螃蟹、榴莲建筑、叻沙、金沙酒店、兰花、肉骨茶、冰激凌三明治、组屋、咖椰吐司 | 花猫 + 小狮子鬃毛 |
| 伊斯坦布尔 | 土耳其红茶、蓝色清真寺、热气球、烤肉串、郁金香、恶魔之眼、土耳其冰淇淋、地毯、石榴、旋转舞裙 | 安哥拉猫 + 恶魔之眼项圈 |
### 6.2 生产时间估算(单城市)
| 步骤 | 耗时 | 说明 |
|------|------|------|
| 元素清单确认 | 0.5h | 确定 12-15 个特色元素 |
| AI 出图 | 1h | Prompt 生成 + 筛选 |
| 人工修正 | 2-3h | 统一风格、调色、切图 |
| 猫猫设计 | 1h | AI 出图 + 人工修正 |
| 数据配置 | 0.5h | 写城市 JS module |
| **单城市合计** | **5-6h** | -- |
| **6 城市合计** | **30-36h** | 可并行压缩 |