整理中文文档结构与索引

This commit is contained in:
2026-03-30 18:49:22 +08:00
parent 3b9117427e
commit 24bc60bc7f
49 changed files with 462 additions and 136 deletions

View File

@@ -0,0 +1,294 @@
# 游戏结算层方案
## 1. 目标
为游戏结束后的结果展示建立独立结算层,不把结算逻辑散落在:
- 规则层
- HUD
- 顶部提示
- 页面临时弹窗
目标是:
- 统一承接结束态
- 展示成绩与摘要信息
- 支撑不同玩法的结算差异
- 为后续文创奖励、奖章、分享做扩展位
一句话:
**把“比赛结束后显示点什么”提升为正式的结果场景能力。**
---
## 2. 当前现状
当前项目已经有:
- `session_finished`
- `gameSessionStatus = finished`
- 基础成绩、里程、时长、心率等 telemetry
- 游戏信息面板可读取当前状态快照
但还没有正式的:
- `ResultScene`
- `SummaryModel`
- 结束后专属页面承载
---
## 3. 设计原则
### 3.1 结算不应只是提示条
结束不是一个瞬时反馈,而是一次阶段切换。
所以它需要独立层,而不是只弹一句:
- 已完成
- 已结束
### 3.2 结算要与玩法解耦
顺序赛、积分赛、后续幽灵赛、金币赛,结算内容不同。
所以应该有:
- 通用结算结构
- 玩法补充区块
### 3.3 结算要可扩
后续可能加入:
- 奖章
- 排名
- 收藏卡
- 文创解锁
- 分享图
所以一开始就要留结构。
---
## 4. 建议的新层级
建议增加:
- `ResultScene`
概念上与这些层并列:
- `MapPresentation`
- `HUD`
- `Feedback`
- `ContentExperienceLayer`
职责:
- 承接结束态
- 持有结算模型
- 控制显示与关闭
- 为玩法结果提供统一展示结构
---
## 5. 建议的数据模型
### 5.1 SummaryModel
```ts
interface ResultSummaryModel {
title: string
subtitle: string
mode: string
finished: boolean
durationMs: number
distanceMeters: number
averageSpeedKmh: number | null
calories: number | null
averageHeartRateBpm: number | null
completedCount: number
skippedCount: number
totalCount: number
score: number | null
extraRows: Array<{ label: string; value: string }>
}
```
### 5.2 ResultSceneState
```ts
interface ResultSceneState {
visible: boolean
summary: ResultSummaryModel | null
}
```
---
## 6. 第一阶段应展示什么
建议先做一版“基础结算页”,不要一上来做复杂演出。
### 通用区域
- 赛事名称
- 玩法名称
- 完成状态
- 总用时
- 总里程
- 平均速度
- 卡路里
- 平均心率
### 玩法区域
顺序赛:
- 完成控制点数量
- 跳过点数量
- 总控制点数量
积分赛:
- 总得分
- 已完成点数
- 未完成点数
### 操作区
- 返回地图
- 关闭
- 后续再加重开 / 分享
---
## 7. 配置建议
建议在配置中预留:
```json
{
"game": {
"result": {
"enabled": true,
"showTelemetry": true,
"showCollectedContent": true,
"showAwards": false,
"template": "default"
}
}
}
```
这意味着:
- 结算是否启用
- 展示哪些区块
- 用哪个模板
都可配置。
---
## 8. 与当前架构的关系
### 规则层
负责:
- 产出 `session_finished`
### Telemetry
负责:
- 提供里程、速度、心率、卡路里等数据
### MapEngine
负责:
- 在结束时汇总通用结算模型
- 把结果快照送到页面层
### 页面层
负责:
- 渲染结算页
---
## 9. 第一阶段最小实施范围
建议第一阶段只做:
1. `session_finished -> ResultScene`
2. 基础 summary 展示
3. 顺序赛 / 积分赛的简单差异化字段
4. 手动关闭 / 返回地图
先不要一上来做:
- 复杂章节动画
- 排名
- 分享图生成
- 复杂奖章系统
---
## 10. 后续扩展方向
这层建好后,可以逐步加:
- 文创奖励
- 奖章 / 成就
- 排名
- 解锁内容
- 分享卡
- 二次引导
---
## 11. 推荐实施顺序
1. 定义 `ResultSummaryModel`
2.`MapEngine` 汇总结束快照
3. 页面层增加结果面板
4. 顺序赛 / 积分赛各补一组玩法字段
5. 再考虑动画、奖励和品牌内容
---
## 12. 与文创体验层的配合
后续建议:
- 文创体验层
- 承接“游戏中途”的体验
- 结算层
- 承接“游戏结束后”的体验
二者不要混。
如果后续结算后要解锁文创卡片,可以由:
- `ResultScene`
- 显示结算
- 结算完成后
- 再触发内容奖励卡
---
## 13. 结论
当前最合适的方向不是继续在结束时零散堆文案,而是:
**正式增加一层 `ResultScene`,承接顺序赛、积分赛以及未来更多玩法的统一结算体验。**
第一阶段先做基础 summary后续再逐步接入文创奖励、奖章、排名和过场动画。