3.0 KiB
3.0 KiB
Gift Zone CityTeam Mashup Design
Goal
在现有 MVP 壳子上补齐三个紧邻切片:
- 礼物区从 2 册扩到 3 册,先把
猫猫册做成可浏览的 MVP 版本 - 接通本地
cityTeam选队入口,只做本地选择和展示,不做服务端排行 - 把
主题大混战做成可进入的独立对局,并提供本地奖励回写
Scope
In
gift-zone增加catstab 和汇总计数cityTeam选择页、本地入队状态、入口按钮mashup入口从首页可进入独立对局mashup使用已解锁城市元素混搭生成棋盘mashup通关奖励写回本地存档
Out
- 真正的分享卡片视觉内容
- 开房 PK
- 城市战队排行榜服务端逻辑
- 礼物区
动物册 / 地图册 - 地区级猫猫收集规则
Design Decisions
1. 猫猫册口径
先用“已通关城市猫”作为 猫猫册 MVP 口径,而不是文档里的“地区猫”正式口径。
原因:
- 现有存档里已经有
collectedCats[]城市完成态 - 现有 CityManifest 已经有
cat和cover.catThumb - 这样可以不引入新资源、不改通关发奖链路
后续若升级为“地区猫”,只需要替换 cats album 的数据投影层,不必重写礼物区 UI 框架。
2. cityTeam 入口
cityTeam 入口同时挂在两个地方:
- 礼物区顶部信息卡
- 主页右侧“排行榜”卡片
如果未选队,进入 city-team-select 选择页;如果已选队,则展示当前所属战队的本地状态说明。选择仅允许已解锁城市,首次选择后本地锁定。
3. 主题大混战实现方式
不把 mashup 硬塞进现有城市关卡合同,而是新增一条轻量 mode 路径:
scene-store增加mashupscene- 生成器增加 mashup board 构建辅助函数
gameplay复用现有GameSessionmain.js根据 scene metadata 渲染 mashup 标题、结果和奖励文案
这样不需要把 contentSystem.getCity() 改成兼容“虚拟城市”,能控制改动面。
4. 混战奖励
混战不计入城市关卡进度。通关奖励规则:
- 优先随机发一个当前已解锁城市的冰箱贴
- 如果随机命中的冰箱贴已拥有,则发
shuffle +1
奖励完全本地化,只做存档回写和结果展示。
Data Flow
Gift Zone
playerState -> contentSystem.getGiftAlbums() / getGiftAlbumEntries() -> scene-store gift-zone -> main.js 礼物区页面
CityTeam
playerState.cityTeam -> scene-store 入口判断 / 选择写回 -> main.js 选择页与状态卡
Mashup
首页 mashup tile -> scene-store.openHomeTile('mashup') -> 构建 mashup board + session -> main.js gameplay -> 通关后 scene-store.completeMashupRun()
Testing
- 内容系统测试:礼物区 album 列表包含
cats,计数与条目投影正确 - scene-store 测试:cityTeam 选择页可打开、可选择、选后锁定
- scene-store 测试:
mashup在通关 2 城后可进入 - 对局/难度测试:mashup board 由多个城市元素组成且可复现
- scene-store 测试:mashup 通关可写入奖励