This commit is contained in:
2026-05-01 01:30:02 +08:00
parent aabad6407f
commit 2e9d0f4640
92 changed files with 4548 additions and 248 deletions

View File

@@ -82,7 +82,7 @@
5. 玩家从广场进入某个作品时,第 1 关必须先显示当前作品本身。
6. 第 2 关及以后必须按照“标签相似度权重 `70%` + 同作者权重 `30%`”选择下一关。
7. 游戏运行时必须全屏展示拼图画布。
8. 新游戏进入时难度必须从 `3*3` 开始,完成 `3`后切为 `4*4`,后续持续为 `4*4`
8. 新游戏进入时难度必须从`1` 关的 `3*3` 开始,并按关卡配置推进到 `4*4``5*5``6*6``7*7`;第 `11`起每 `6` 关循环复用第 `5~10` 关配置
9. 拼图运行时必须支持:
- 点击选择两块并交换
- 正确相邻后自动合并
@@ -517,21 +517,35 @@ tagSimilarityScore =
本次建议同时显示:
1. 当前关卡序号
2. 当前网格规格,例如 `3x3``4x4`
2. 当前网格规格,例如 `3x3``5x5``7x7`
## 9.3 难度与关卡推进规则
每次新 run 都必须从最低难度开始:
每次新 run 都必须从`1` 关配置开始:
1.`1~3` 关固定为 `3x3`
2.`4` 关开始固定为 `4x4`
3. 后续全部关卡保持 `4x4`
| 关卡 | 切割规格 | 限时 |
| ---------- | -------- | -------------- |
| 第 `1` 关 | `3x3` | `5` 分钟 |
| 第 `2` 关 | `4x4` | `5` 分钟 |
| 第 `3` 关 | `5x5` | `5` 分钟 |
| 第 `4` 关 | `5x5` | `3``30` 秒 |
| 第 `5` 关 | `5x5` | `3``30` 秒 |
| 第 `6` 关 | `6x6` | `4` 分钟 |
| 第 `7` 关 | `5x5` | `3``30` 秒 |
| 第 `8` 关 | `7x7` | `4``30` 秒 |
| 第 `9` 关 | `5x5` | `4` 分钟 |
| 第 `10` 关 | `7x7` | `4``30` 秒 |
`11` 关开始,每 `6` 关循环复用第 `5~10` 关配置。
对应函数建议:
```ts
function resolvePuzzleGridSize(clearedLevelCount: number): 3 | 4 {
return clearedLevelCount >= 3 ? 4 : 3;
function resolvePuzzleLevelConfig(levelIndex: number): {
gridSize: 3 | 4 | 5 | 6 | 7;
timeLimitMs: number;
} {
// 统一从关卡序号解析切割规格和倒计时。
}
```
@@ -646,8 +660,8 @@ V1 规则如下:
`2026-04-29` 起,拼图运行时加入倒计时:
1. `3x3` 关卡限时 `180`
2. `4x4` 关卡限时 `300`
1. 倒计时必须使用第 `9.3` 节的关卡配置函数,不允许在 UI 或本地兜底里按网格规模另写一套时间表
2. `1~10` 关按配置表执行;第 `11` 关起每 `6` 关循环复用第 `5~10` 关配置
3. 规定时间内未完成拼图,关卡状态变为 `failed`
4. 弹窗、查看原图覆盖、冻结时间生效期间不消耗倒计时。
5. 通关成绩只统计有效消耗时间,不统计暂停与冻结时间。
@@ -693,7 +707,7 @@ interface PuzzleProfile {
interface PuzzleRuntimeLevelSnapshot {
runId: string;
levelIndex: number;
gridSize: 3 | 4;
gridSize: 3 | 4 | 5 | 6 | 7;
profileId: string;
levelName: string;
authorDisplayName: string;
@@ -738,7 +752,7 @@ interface PuzzleRunSnapshot {
entryProfileId: string;
clearedLevelCount: number;
currentLevelIndex: number;
currentGridSize: 3 | 4;
currentGridSize: 3 | 4 | 5 | 6 | 7;
playedProfileIds: string[];
previousLevelTags: string[];
currentLevel: PuzzleRuntimeLevelSnapshot | null;
@@ -1167,7 +1181,7 @@ interface PuzzleRunSnapshot {
先做:
1. `3x3 / 4x4` 切图
1. `3x3 / 4x4 / 5x5 / 6x6 / 7x7` 切图
2. 点击两块交换
3. 正确连接自动合并
4. 合并块整体拖动
@@ -1202,7 +1216,7 @@ interface PuzzleRunSnapshot {
4. 发布后的拼图作品能进入平台广场。
5. 玩家从广场进入时,第 `1` 关必定是当前作品本身。
6.`2` 关及以后按照“标签相似度 `70%` + 同作者 `30%`”计算下一关。
7. 新 run `3` 关为 `3x3`,之后固定为 `4x4`
7. 新 run 的关卡切割和倒计时符合第 `9.3` 节配置,并且第 `11` 关起按第 `5~10` 关配置循环
8. 运行时支持点击两块交换。
9. 交换后正确相邻的块会自动合并。
10. 合并块可以整体拖动。

View File

@@ -93,8 +93,9 @@
1. 数字过大时做单位缩略展示
2. “游戏时长”卡固定以小时为单位展示,短时长不切换成分钟,长时长不切换成天
3. 进入页面先展示骨架屏
4. 数据请求失败时展示降级文案,不展示假数字
3. “玩过”卡展示值始终带 `个` 单位,例如 `0个``1个``1.2万个`
4. 进入页面先展示骨架屏
5. 数据请求失败时展示降级文案,不展示假数字
---