fix: 完善拼消消模板运行规则

This commit is contained in:
2026-06-11 00:50:18 +08:00
parent c98c3de96d
commit 21ac5642e8
19 changed files with 1952 additions and 317 deletions

View File

@@ -28,17 +28,19 @@
| 形状 | 数量 | 单组单元数 | 解锁 |
| --- | ---: | ---: | --- |
| 1x2 | 23 | 2 | 第 1 关 |
| 1x3 | 5 | 3 | 第 1 关 |
| 2x2 | 4 | 4 | 第 1 关 |
| 2x3 | 3 | 6 | 第 1 关 |
| 1x3 | 5 | 3 | 第 2 关 |
| 2x2 | 4 | 4 | 第 3 关 |
| 2x3 | 3 | 6 | 第 4 关 |
流程:
```text
主题 / 场地底图主题词 / 用户图 -> 4 张 sheet 坐标规划 -> gpt-image-2 生成素材工作表 -> 按 4x6 裁切 1x1 -> 合成最终 atlas -> atlas 与卡牌切片持久化 -> OSS / asset_object / bind -> session draft 回写
卡牌素材主题 / 背景图画面描述 / 用户背景图 -> 4 张 sheet 坐标规划 -> gpt-image-2 生成素材工作表 -> 按 4x6 裁切 1x1 -> 合成最终 atlas -> atlas 与卡牌切片持久化 -> OSS / asset_object / bind -> session draft 回写
```
中央场地底图的 prompt 来源固定为:若用户填写 `boardBackgroundPrompt`AI 生成图只读取该字段;若该字段为空,才回退读取 `themePrompt`。用户直接上传图资产时不再用主题词重写该资产,只执行平台资产持久化与换签。中央场地底图在运行态不是普通棋盘衬底,而是玩家逐渐消除卡牌后露出的主题目标图;生成请求使用与中央棋盘一致的 1:1 正方形尺寸prompt 必须强调探索、揭开全貌、追求完成目标、精致主题主视觉和强主题表现,不写“画面干净”或“适合作为卡牌棋盘底图”。
背景图的 prompt 来源固定为:若用户填写 `boardBackgroundPrompt`AI 生成背景图只读取该字段;若该字段为空,才回退读取 `themePrompt`。用户直接上传背景图资产时不再用主题词重写该资产,只执行平台资产持久化与换签。背景图在运行态不是整页氛围背景,而是玩家逐渐消除卡牌后露出的主题目标图;生成请求使用与中央棋盘一致的 1:1 正方形尺寸prompt 必须强调探索、揭开全貌、追求完成目标、精致主题主视觉和强主题表现,不写“画面干净”或“适合作为卡牌棋盘底图”。
工作台 UI 对齐拼图创作流程:左上角保留返回按钮,下方展示大标题“拼消消创作”;工作台只收集游戏内容配置,包括卡牌素材主题和背景图配置。背景图配置通过同一个单图槽位表达“上传图片 / 填写画面描述”两种输入方式,槽位标题显示为“背景图”,描述输入显示为“画面描述”,工作台内容区不再套额外外层信息框。作品标题与简介属于发布元信息,不在工作台出现;前端创建草稿时可按主题派生内部占位标题,结果页点击发布时弹出发布前检查面板,先通过 `update-work-meta` 保存标题 / 简介,再调用发布接口。
### 素材工作表风险与切片验证
@@ -65,13 +67,13 @@
`module-puzzle-clear` 已固定以下规则:
- 关卡配置:单关 `6x6/35`600 秒
- 关卡配置:4 关,棋盘均为 `6x6`;第 1 关目标 15、300 秒、仅 `1x2`;第 2 关目标 20、300 秒、解锁 `1x2/1x3`;第 3 关目标 30、420 秒、解锁 `1x2/1x3/2x2`;第 4 关目标 35、600 秒、解锁全部 `1x2/1x3/2x2/2x3`
- 图案组配比:`1x2=23``1x3=5``2x2=4``2x3=3`
- 开局随机铺满并保证至少一步可解。
- 补牌按列重力下落;补牌后仍保证至少一步可解。
- 开局只放入本关目标消除数对应的全部卡牌;棋盘放不下的牌进入顶部准备区,牌不足棋盘格数时空格保留;开局仍保证至少一步可解。
- 补牌按列重力下落;顶部没有新牌时空格留在场上并露出背景图;补牌后若场上仍有卡牌则保证至少一步可解。
- 完整图案组消除并清空对应格。
- 半锁定拼接组只由玩家主动交换 / 撞入打散,补牌不破坏。
- 超时失败只作用于当前关,可重试;完成 35 次消除目标并清空棋盘后整局完成。
- 超时失败只作用于当前关,可重试;胜利条件永远是消除完本关全部卡牌,达到目标消除数且棋盘与顶部准备区都没有剩余卡牌后进入下一关,第 4 关全部卡牌消除后整局完成。
## API 命名空间
@@ -94,7 +96,7 @@ api-server 路由熔断使用 SpacetimeDB 创作入口配置 `puzzle-clear`
正式 `published` run 记录开局、全局完成、当前关失败、耗时和消除统计。runtime action 返回的终态事件包括:
- `run-finished`:第 1 关完成并结束整局,结果 JSON 至少包含 `status``level``clears``clearDelta``elapsedMs`
- `run-finished`:第 4 关完成并结束整局,结果 JSON 至少包含 `status``level``clears``clearDelta``elapsedMs`
- `level-failed`:当前关超时失败,结果 JSON 至少包含 `status``level``clears``clearDelta``elapsedMs`
草稿试玩只消费同一份 snapshot/action 结果做表现,不写正式统计。
@@ -108,7 +110,7 @@ api-server 路由熔断使用 SpacetimeDB 创作入口配置 `puzzle-clear`
- `puzzle-clear-result` -> `/creation/puzzle-clear/result`
- `puzzle-clear-runtime` -> `/runtime/puzzle-clear`
runtime 移动端优先,首屏结构为顶部倒计时 / 关铭牌、顶部列准备区、棋盘、失败 / 完成弹层。棋盘主网格、半锁定组覆盖层和消除 / 掉落覆盖层统一使用 1.5px 格间距。动画包括开场翻转、局部正确拼合高光、完整消除放大淡出列补牌延迟下落,不再有下一关切换。消除和补牌动画只能作为当前后端 snapshot 的表现层覆盖;已有场上卡片因重力下沉后的最终格不得被旧消除坐标或掉落覆盖层隐藏,避免出现“下方空位但上方卡片未下落”的视觉假象;新补入卡牌应等完整消除淡出进入尾段后再播放下落反馈。
runtime 移动端优先,首屏结构为顶部倒计时 / 关铭牌、顶部列准备区、棋盘、失败 / 完成弹层。棋盘主网格、半锁定组覆盖层和消除 / 掉落覆盖层统一使用 1.5px 格间距。动画包括开场翻转、局部正确拼合高光、完整消除放大淡出列补牌延迟下落和关卡完成后的下一关切换。消除和补牌动画只能作为当前后端 snapshot 的表现层覆盖;已有场上卡片因重力下沉后的最终格不得被旧消除坐标或掉落覆盖层隐藏,避免出现“下方空位但上方卡片未下落”的视觉假象;新补入卡牌应等完整消除淡出进入尾段后再播放下落反馈。列补牌下落的过渡层生命周期必须覆盖 `delay + duration + settle buffer`,并按下落距离延长动画时长,避免叠层在延迟后刚出现就被卸载;下落叠层不得带白色背景、白色边框或提亮滤镜,卡片图本身负责视觉主体,避免下滑时白闪。拖拽覆盖替换时,拖动卡由拖拽 ghost 落到目标格,被覆盖的目标卡才使用替换飞行层回到源空位;替换飞行层同样不得带白底、白边或白色外壳,避免目标卡在新位置先闪白再显示。
## 验证计划