feat: 收敛玩法运行时配置并加入故障恢复
This commit is contained in:
21
doc/games/积分赛/全局配置项.md
Normal file
21
doc/games/积分赛/全局配置项.md
Normal file
@@ -0,0 +1,21 @@
|
||||
# 积分赛全局配置项
|
||||
|
||||
本文档只列积分赛对公共配置块的默认落点。完整字段定义仍以 [全局规则与配置维度清单](D:/dev/cmr-mini/doc/config/全局规则与配置维度清单.md) 和 [配置选项字典](D:/dev/cmr-mini/doc/config/配置选项字典.md) 为准。
|
||||
|
||||
| 名称 | 字段 | 积分赛默认值 |
|
||||
| --- | --- | --- |
|
||||
| 开赛后显全场 | `game.visibility.revealFullPlayfieldAfterStartPunch` | `true` |
|
||||
| 必须先聚焦目标 | `game.punch.requiresFocusSelection` | `true` |
|
||||
| 最后点自动结束 | `game.session.autoFinishOnLastControl` | `false` |
|
||||
| 跳点启用 | `game.sequence.skip.enabled` | `false` |
|
||||
| 跳点半径 | `game.sequence.skip.radiusMeters` | 不启用时忽略 |
|
||||
| 跳点确认 | `game.sequence.skip.requiresConfirm` | 不启用时忽略 |
|
||||
| 终点始终可选 | `game.finish.finishControlAlwaysSelectable` | `true` |
|
||||
| 默认控制点分值 | `game.scoring.defaultControlScore` | `10` |
|
||||
|
||||
补充说明:
|
||||
|
||||
- 开始点和结束点不弹题
|
||||
- 普通点默认自动进入 10 秒题卡
|
||||
- 答题时比赛继续计时
|
||||
- 未选择目标点时,HUD 只提示“请选择目标点”
|
||||
53
doc/games/积分赛/最大配置模板.md
Normal file
53
doc/games/积分赛/最大配置模板.md
Normal file
@@ -0,0 +1,53 @@
|
||||
# 积分赛最大配置模板
|
||||
|
||||
本文档作为积分赛的完整模板入口。当前项目仍维护一份共享全量模板:
|
||||
|
||||
- [当前最全配置模板](D:/dev/cmr-mini/doc/config/当前最全配置模板.md)
|
||||
|
||||
如果要为积分赛新建一份“尽量全”的活动配置,建议至少覆盖这些块:
|
||||
|
||||
```json
|
||||
{
|
||||
"app": {},
|
||||
"map": {},
|
||||
"playfield": {
|
||||
"kind": "control-set",
|
||||
"source": {},
|
||||
"CPRadius": 6,
|
||||
"controlOverrides": {},
|
||||
"metadata": {}
|
||||
},
|
||||
"game": {
|
||||
"mode": "score-o",
|
||||
"session": {
|
||||
"startManually": false,
|
||||
"requiresStartPunch": true,
|
||||
"requiresFinishPunch": false,
|
||||
"autoFinishOnLastControl": false
|
||||
},
|
||||
"punch": {
|
||||
"policy": "enter-confirm",
|
||||
"radiusMeters": 5,
|
||||
"requiresFocusSelection": true
|
||||
},
|
||||
"scoring": {
|
||||
"type": "score",
|
||||
"defaultControlScore": 10
|
||||
},
|
||||
"guidance": {},
|
||||
"presentation": {},
|
||||
"visibility": {},
|
||||
"finish": {},
|
||||
"telemetry": {},
|
||||
"feedback": {}
|
||||
},
|
||||
"resources": {},
|
||||
"debug": {}
|
||||
}
|
||||
```
|
||||
|
||||
建议搭配阅读:
|
||||
|
||||
- [规则说明文档](D:/dev/cmr-mini/doc/games/积分赛/规则说明文档.md)
|
||||
- [游戏配置项](D:/dev/cmr-mini/doc/games/积分赛/游戏配置项.md)
|
||||
- [score-o.json](D:/dev/cmr-mini/event/score-o.json)
|
||||
246
doc/games/积分赛/最小配置模板.md
Normal file
246
doc/games/积分赛/最小配置模板.md
Normal file
@@ -0,0 +1,246 @@
|
||||
# 积分赛最小配置模板
|
||||
|
||||
本文档提供一份 **积分赛(`score-o`)最小可跑配置模板**。
|
||||
|
||||
目标:
|
||||
|
||||
- 只保留积分赛跑通所需的最少字段
|
||||
- 让测试尽量回到程序默认规则本身
|
||||
- 避免历史内容卡、H5 页面、样式覆盖继续干扰联调
|
||||
|
||||
如果你关心“最小模板下系统到底默认怎么跑”,请优先配合阅读:
|
||||
|
||||
- [积分赛规则说明文档](D:/dev/cmr-mini/doc/games/积分赛/规则说明文档.md)
|
||||
- [程序默认规则基线](D:/dev/cmr-mini/doc/gameplay/程序默认规则基线.md)
|
||||
|
||||
---
|
||||
|
||||
## 1. 最小模板
|
||||
|
||||
```json
|
||||
{
|
||||
"schemaVersion": "1",
|
||||
"version": "2026.03.31",
|
||||
"app": {
|
||||
"id": "sample-score-o-001",
|
||||
"title": "积分赛示例",
|
||||
"locale": "zh-CN"
|
||||
},
|
||||
"map": {
|
||||
"tiles": "../map/lxcb-001/tiles/",
|
||||
"mapmeta": "../map/lxcb-001/tiles/meta.json",
|
||||
"declination": 6.91,
|
||||
"initialView": {
|
||||
"zoom": 17
|
||||
}
|
||||
},
|
||||
"playfield": {
|
||||
"kind": "control-set",
|
||||
"source": {
|
||||
"type": "kml",
|
||||
"url": "../kml/lxcb-001/10/c01.kml"
|
||||
}
|
||||
},
|
||||
"game": {
|
||||
"mode": "score-o"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2. 字段说明
|
||||
|
||||
### `schemaVersion`
|
||||
|
||||
- 类型:`string`
|
||||
- 必填:是
|
||||
- 说明:配置结构版本
|
||||
- 当前建议值:`"1"`
|
||||
|
||||
### `version`
|
||||
|
||||
- 类型:`string`
|
||||
- 必填:是
|
||||
- 说明:配置版本号
|
||||
|
||||
### `app.id`
|
||||
|
||||
- 类型:`string`
|
||||
- 必填:是
|
||||
- 说明:活动配置实例 ID
|
||||
|
||||
### `app.title`
|
||||
|
||||
- 类型:`string`
|
||||
- 必填:是
|
||||
- 说明:活动标题 / 比赛名称
|
||||
|
||||
### `app.locale`
|
||||
|
||||
- 类型:`string`
|
||||
- 必填:否
|
||||
- 说明:语言区域
|
||||
|
||||
### `map.tiles`
|
||||
|
||||
- 类型:`string`
|
||||
- 必填:是
|
||||
- 说明:地图瓦片根路径
|
||||
|
||||
### `map.mapmeta`
|
||||
|
||||
- 类型:`string`
|
||||
- 必填:是
|
||||
- 说明:地图 meta 文件路径
|
||||
|
||||
### `map.declination`
|
||||
|
||||
- 类型:`number`
|
||||
- 必填:否
|
||||
- 说明:磁偏角,未填写时按程序默认值处理
|
||||
|
||||
### `map.initialView.zoom`
|
||||
|
||||
- 类型:`number`
|
||||
- 必填:否
|
||||
- 说明:初始缩放级别,未填写时按程序默认视口逻辑处理
|
||||
|
||||
### `playfield.kind`
|
||||
|
||||
- 类型:`string`
|
||||
- 必填:是
|
||||
- 说明:空间对象类型
|
||||
- 积分赛固定使用:`control-set`
|
||||
|
||||
### `playfield.source.type`
|
||||
|
||||
- 类型:`string`
|
||||
- 必填:是
|
||||
- 说明:空间底稿来源类型
|
||||
- 当前推荐值:`kml`
|
||||
|
||||
### `playfield.source.url`
|
||||
|
||||
- 类型:`string`
|
||||
- 必填:是
|
||||
- 说明:KML 文件路径
|
||||
|
||||
### `playfield.CPRadius`
|
||||
|
||||
- 类型:`number`
|
||||
- 必填:否
|
||||
- 说明:点位触发半径,未填写时按程序默认值处理
|
||||
|
||||
### `playfield.controlDefaults.score`
|
||||
|
||||
- 类型:`number`
|
||||
- 必填:否
|
||||
- 说明:普通积分点统一默认分值
|
||||
- 备注:适合整场大多数积分点共用一个分值
|
||||
|
||||
### `playfield.controlOverrides.*.score`
|
||||
|
||||
- 类型:`number`
|
||||
- 必填:否
|
||||
- 说明:积分点分值
|
||||
- 备注:如果写了 `playfield.controlDefaults.score`,单点这里会覆盖默认值
|
||||
|
||||
### `playfield.metadata.title`
|
||||
|
||||
- 类型:`string`
|
||||
- 必填:否
|
||||
- 说明:路线名称
|
||||
|
||||
### `playfield.metadata.code`
|
||||
|
||||
- 类型:`string`
|
||||
- 必填:否
|
||||
- 说明:路线编码
|
||||
|
||||
### `game.mode`
|
||||
|
||||
- 类型:`string`
|
||||
- 必填:是
|
||||
- 说明:玩法模式
|
||||
- 积分赛固定值:`score-o`
|
||||
|
||||
### `game.*`
|
||||
|
||||
- 类型:`object`
|
||||
- 必填:否
|
||||
- 说明:最小样例默认不依赖额外玩法覆盖字段
|
||||
- 备注:如需覆盖程序默认值,再补 `punch`、`scoring`、`guidance`、`finish` 等子块
|
||||
|
||||
---
|
||||
|
||||
## 3. 当前默认逻辑
|
||||
|
||||
如果你只写本页最小模板,积分赛会按程序默认规则运行。
|
||||
|
||||
### 3.1 默认局流程
|
||||
|
||||
- 进入游戏后默认只显示开始点
|
||||
- 系统默认提示玩家:需要先打开始点才正式开始比赛
|
||||
- 未打开始点前,积分点和结束点不生效
|
||||
- 首次成功打开始点后:
|
||||
- 正式开始比赛
|
||||
- 初始化本局数据
|
||||
- 开始计时
|
||||
- 显示全部积分点和结束点
|
||||
- 默认只给出“比赛开始”短反馈,并同步更新引导提示和 HUD
|
||||
- 最小模板下默认不弹开始白色内容卡
|
||||
- 比赛进行中默认允许自由点击任意未收集积分点,将其设为当前目标点
|
||||
- 当前目标点选定后,底部 HUD 信息面板默认显示该点距离等信息
|
||||
- 最小模板下,点击积分点默认不弹详情卡
|
||||
- 默认不要求先选中目标点
|
||||
- 任意未收集积分点进入打点半径后都可成功打点
|
||||
- 成功打点后默认:
|
||||
- 先得该点标注分值的基础分
|
||||
- 默认不弹题
|
||||
- 如需答题卡,需显式配置对应点位的 `quiz` CTA
|
||||
- 开始点和结束点默认不弹题,只弹提示信息
|
||||
- 默认至少完成 `1` 个普通积分点后,结束点才解锁
|
||||
- 结束点解锁后不需要先选为目标点
|
||||
- 成功打结束点后:
|
||||
- 停止计时
|
||||
- 给出完成短反馈
|
||||
- 直接进入默认成绩结算页
|
||||
- 默认不再额外叠加终点白色内容卡
|
||||
- 白色内容卡默认改为显式配置启用;只有某个点位明确配置 `autoPopup = true` 时,完成该点后才会先弹白卡
|
||||
|
||||
### 3.2 默认规则参数
|
||||
|
||||
- `map.declination`
|
||||
- 没配时默认按 `0`
|
||||
- `map.initialView.zoom`
|
||||
- 没配时由客户端初始视口逻辑接管
|
||||
- `playfield.CPRadius`
|
||||
- 没配时按客户端内置值处理
|
||||
- `playfield.controlDefaults.*`
|
||||
- 没配时按程序默认值处理
|
||||
- `playfield.controlOverrides.*.score`
|
||||
- 没配时按程序默认统一分值处理
|
||||
- `game.session.*`
|
||||
- 默认非手动开始
|
||||
- 默认要求起点打卡
|
||||
- 默认不要求终点打卡才能算“完赛资格”
|
||||
- 默认不在最后一个积分点自动结束
|
||||
- `game.punch.requiresFocusSelection`
|
||||
- 默认按 `true` 处理
|
||||
- `game.guidance.allowFocusSelection`
|
||||
- 默认按积分赛逻辑允许选点
|
||||
- `game.finish.finishControlAlwaysSelectable`
|
||||
- 默认按积分赛逻辑处理终点可选
|
||||
- `game.visibility.revealFullPlayfieldAfterStartPunch`
|
||||
- 默认按 `true` 处理
|
||||
|
||||
---
|
||||
|
||||
## 4. 当前样例说明
|
||||
|
||||
当前仓库中的 [score-o.json](D:/dev/cmr-mini/event/score-o.json) 已按这套最小测试口径收敛,除积分点分值外,不再附带历史测试内容卡、H5 页面和样式覆盖。
|
||||
|
||||
如果要查看公共完整字段,请继续参考:
|
||||
|
||||
- [当前最全配置模板](D:/dev/cmr-mini/doc/config/当前最全配置模板.md)
|
||||
33
doc/games/积分赛/游戏说明文档.md
Normal file
33
doc/games/积分赛/游戏说明文档.md
Normal file
@@ -0,0 +1,33 @@
|
||||
# 积分赛游戏说明文档
|
||||
|
||||
本文档作为 `score-o` 的目录入口,用来统一说明本玩法文档放在哪里、分别看什么。
|
||||
|
||||
## 1. 玩法定位
|
||||
|
||||
- 玩法名称:积分赛
|
||||
- 模式标识:`score-o`
|
||||
- 核心特征:自由选点,自由收集,终点可随时结束
|
||||
- 当前默认:普通点先得点位分值,再进入题卡,答对再得同分奖励
|
||||
|
||||
## 2. 本目录结构
|
||||
|
||||
- [规则说明文档](D:/dev/cmr-mini/doc/games/积分赛/规则说明文档.md)
|
||||
规则、流程、选点、计分、结算口径
|
||||
- [最小配置模板](D:/dev/cmr-mini/doc/games/积分赛/最小配置模板.md)
|
||||
最少字段怎么配才能跑起来
|
||||
- [最大配置模板](D:/dev/cmr-mini/doc/games/积分赛/最大配置模板.md)
|
||||
该玩法当前建议的完整配置骨架入口
|
||||
- [全局配置项](D:/dev/cmr-mini/doc/games/积分赛/全局配置项.md)
|
||||
跨玩法公共字段在积分赛下的默认取值
|
||||
- [游戏配置项](D:/dev/cmr-mini/doc/games/积分赛/游戏配置项.md)
|
||||
积分赛独有或强相关字段
|
||||
|
||||
## 3. 运行样例
|
||||
|
||||
- [score-o.json](D:/dev/cmr-mini/event/score-o.json)
|
||||
|
||||
## 4. 关联公共文档
|
||||
|
||||
- [配置选项字典](D:/dev/cmr-mini/doc/config/配置选项字典.md)
|
||||
- [全局规则与配置维度清单](D:/dev/cmr-mini/doc/config/全局规则与配置维度清单.md)
|
||||
- [当前最全配置模板](D:/dev/cmr-mini/doc/config/当前最全配置模板.md)
|
||||
54
doc/games/积分赛/游戏配置项.md
Normal file
54
doc/games/积分赛/游戏配置项.md
Normal file
@@ -0,0 +1,54 @@
|
||||
# 积分赛游戏配置项
|
||||
|
||||
本文档用于汇总当前系统对 `score-o` 的已支持可配置项,重点只看和积分赛玩法直接相关的字段。
|
||||
|
||||
说明:
|
||||
|
||||
- 跨玩法公共字段请继续参考 [配置选项字典](D:/dev/cmr-mini/doc/config/配置选项字典.md)
|
||||
- 本文只补积分赛视角下最常用、最关键的字段
|
||||
|
||||
## 1. 顶层与样例入口
|
||||
|
||||
| 字段 | 作用 | 默认逻辑 |
|
||||
| --- | --- | --- |
|
||||
| `game.mode` | 指定玩法模式 | 固定为 `score-o` |
|
||||
| `event/score-o.json` | 当前联调样例 | 可直接运行 |
|
||||
|
||||
## 2. 点位与分值
|
||||
|
||||
| 字段 | 作用 | 可选项 / 取值 | 默认逻辑 |
|
||||
| --- | --- | --- | --- |
|
||||
| `playfield.controlOverrides.<key>.score` | 单个积分点分值 | `number` | 未配置时回退到 `game.scoring.defaultControlScore`,再回退到玩法默认 `10` |
|
||||
| `playfield.controlOverrides.<key>.title` | 打点后内容卡标题 | `string` | 未配置时走系统默认文案 |
|
||||
| `playfield.controlOverrides.<key>.body` | 打点后内容卡正文 | `string` | 未配置时走系统默认文案 |
|
||||
| `playfield.controlOverrides.<key>.autoPopup` | 打点后是否先弹内容卡 | `true` / `false` | 默认 `true`;即使关闭,普通点默认题卡仍会自动进入 |
|
||||
|
||||
## 3. 选点与打点
|
||||
|
||||
| 字段 | 作用 | 可选项 / 取值 | 默认逻辑 |
|
||||
| --- | --- | --- | --- |
|
||||
| `game.punch.policy` | 打点方式 | `enter` / `enter-confirm` | 默认 `enter-confirm` |
|
||||
| `game.punch.radiusMeters` | 打点半径 | `number` | 默认 `5` |
|
||||
| `game.punch.requiresFocusSelection` | 是否必须先选目标点 | `true` / `false` | 默认 `true` |
|
||||
| `game.guidance.allowFocusSelection` | 是否允许点击地图切换目标点 | `true` / `false` | 默认 `true` |
|
||||
|
||||
## 4. 结束与结算
|
||||
|
||||
| 字段 | 作用 | 可选项 / 取值 | 默认逻辑 |
|
||||
| --- | --- | --- | --- |
|
||||
| `game.finish.finishControlAlwaysSelectable` | 终点是否始终可打 | `true` / `false` | 默认 `true` |
|
||||
| `game.session.autoFinishOnLastControl` | 最后一个积分点后是否自动结束 | `true` / `false` | 默认 `false` |
|
||||
| `game.session.requiresFinishPunch` | 是否要求打终点才结束 | `true` / `false` | 当前默认 `false` |
|
||||
|
||||
## 5. 默认答题逻辑
|
||||
|
||||
当前普通积分点会自动进入默认题卡流程,默认口径如下:
|
||||
|
||||
- 倒计时 `10` 秒
|
||||
- 默认随机数学题
|
||||
- 答对加该点同分奖励
|
||||
- 答错或超时不得奖励分
|
||||
|
||||
详细规则请看:
|
||||
|
||||
- [规则说明文档](D:/dev/cmr-mini/doc/games/积分赛/规则说明文档.md)
|
||||
318
doc/games/积分赛/规则说明文档.md
Normal file
318
doc/games/积分赛/规则说明文档.md
Normal file
@@ -0,0 +1,318 @@
|
||||
# 积分赛规则说明文档
|
||||
|
||||
本文档用于定义 `score-o` 在**最小模板**下的系统默认规则,作为后续实现、联调和配置扩展的共同基线。
|
||||
|
||||
目标:
|
||||
|
||||
- 明确积分赛在“不额外写规则字段”时应该怎么跑
|
||||
- 把开局、目标点选择、打点、答题、结束和结算流程写清楚
|
||||
- 为后续配置化拆分提供规则依据
|
||||
|
||||
如果后续要继续扩写更多正式玩法文档,建议统一使用:
|
||||
|
||||
- [玩法设计文档模板](D:/dev/cmr-mini/doc/gameplay/玩法设计文档模板.md)
|
||||
|
||||
---
|
||||
|
||||
## 1. 适用范围
|
||||
|
||||
本文默认规则适用于:
|
||||
|
||||
- `game.mode = "score-o"`
|
||||
- 使用最小积分赛模板启动
|
||||
- 未显式覆盖开局流程、目标点规则、答题、结算和默认表现规则
|
||||
|
||||
本文定义的是**系统默认行为**,不是所有字段都必须先配置出来。
|
||||
|
||||
---
|
||||
|
||||
## 2. 一句话规则
|
||||
|
||||
玩家进入游戏后先看到起点,完成起点打卡后正式开赛;玩家可自由前往任意积分点,进入其打点半径后成功打点并获得该点基础分;玩家也可点击任意积分点将其设为当前目标点,用于 HUD 距离引导;最小模板下默认不带答题;默认至少完成 `1` 个普通积分点后,结束点才解锁并可结束比赛。
|
||||
|
||||
---
|
||||
|
||||
## 3. 默认流程总览
|
||||
|
||||
### 3.1 进入游戏
|
||||
|
||||
- 系统进入“待起跑”状态
|
||||
- 地图默认只显示:
|
||||
- 起点
|
||||
- 玩家当前位置
|
||||
- 基础 HUD
|
||||
- 所有积分点和结束点默认不显示
|
||||
- 页面提示玩家:需要先打开始点,比赛才会正式开始并开始计时
|
||||
|
||||
### 3.2 打开始点
|
||||
|
||||
- 玩家首次成功打开始点后,比赛正式开始
|
||||
- 系统立即初始化本局数据
|
||||
- 系统开始计时
|
||||
- 系统显示全部积分点和结束点
|
||||
- 默认只给出“比赛开始”短反馈,并同步更新引导提示和 HUD
|
||||
- 最小模板下,开始点完成后默认不弹白色内容卡
|
||||
- 默认关门时间为开赛后 `2` 小时
|
||||
- 当距离关门时间小于等于 `10` 分钟时,HUD 时间区默认切换为倒计时强调样式
|
||||
|
||||
### 3.3 进行中自由打点
|
||||
|
||||
- 玩家可自由前往任意未收集积分点完成打点
|
||||
- 玩家也可点击任意未收集积分点,将其设为当前目标点
|
||||
- 当前目标点设定后,底部 HUD 信息面板更新该点相关信息
|
||||
- 最小模板下,点击积分点默认只做目标选择,不弹详情卡
|
||||
- 默认不要求先选中目标点
|
||||
- 任意未收集积分点进入打点半径后都可成功打点
|
||||
- 成功打点后:
|
||||
- 获得该点基础分
|
||||
- 该点记为已收集
|
||||
- 最小模板下默认不弹答题卡
|
||||
- 如显式配置答题 CTA,则在该点完成后进入答题
|
||||
|
||||
### 3.4 打结束点
|
||||
|
||||
- 默认至少完成 `1` 个普通积分点后,结束点才解锁
|
||||
- 结束点不需要先被设为当前目标点
|
||||
- 成功打结束点后:
|
||||
- 系统停止计时
|
||||
- 先给出完成短反馈
|
||||
- 直接进入默认成绩结算页
|
||||
- 默认不再额外叠加终点白色内容卡
|
||||
|
||||
---
|
||||
|
||||
## 4. 局状态与数据初始化
|
||||
|
||||
### 4.1 默认局状态
|
||||
|
||||
积分赛默认包含以下状态:
|
||||
|
||||
1. `ready`
|
||||
2. `running`
|
||||
3. `finished`
|
||||
4. `settled`
|
||||
|
||||
### 4.2 起点打卡后的初始化数据
|
||||
|
||||
首次成功打开始点时,系统至少初始化以下运行时数据:
|
||||
|
||||
- `startTime`
|
||||
- `elapsedTime`
|
||||
- `currentTargetId`
|
||||
- `collectedControls`
|
||||
- `availableControls`
|
||||
- `score`
|
||||
- `baseScore`
|
||||
- `quizBonusScore`
|
||||
- `quizCorrectCount`
|
||||
- `quizWrongCount`
|
||||
- `quizTimeoutCount`
|
||||
- `finishTime`
|
||||
|
||||
---
|
||||
|
||||
## 5. 打点与目标点规则
|
||||
|
||||
### 5.1 开始点
|
||||
|
||||
- 开始点必须打卡
|
||||
- 开始点不弹答题卡
|
||||
- 开始点默认只给短反馈和引导更新
|
||||
- 开始点默认不弹白色内容卡
|
||||
- 未打开始点前,积分点和结束点不触发正式打点逻辑
|
||||
|
||||
### 5.2 积分点
|
||||
|
||||
- 积分点自由选择,不按顺序推进
|
||||
- 玩家默认不需要先点击某个积分点
|
||||
- 点击某个积分点时,会把它设为当前目标点,主要用于 HUD 和距离引导
|
||||
- 最小模板下,点击点位本身不产生额外内容反馈
|
||||
- 任意未收集积分点进入打点半径后都可成功打点
|
||||
- 已成功打过的积分点不可重复得分,不可重复出题
|
||||
- 已成功打过的积分点再次进入范围时,只保留已收集状态展示
|
||||
|
||||
### 5.3 非目标点进入半径
|
||||
|
||||
- 如果玩家进入某个未选中的积分点打点半径:
|
||||
- 默认仍然可以正式打点
|
||||
- 默认获得基础分
|
||||
- 最小模板下默认不进入答题
|
||||
- “当前目标点”只影响 HUD 和距离引导,不影响默认打点资格
|
||||
|
||||
### 5.4 目标点切换
|
||||
|
||||
- 玩家在比赛进行中可随时点击其他未收集积分点,切换当前目标点
|
||||
- 切换后底部 HUD 信息面板应更新为新目标点信息
|
||||
|
||||
### 5.5 结束点
|
||||
|
||||
- 结束点默认在至少完成 `1` 个普通积分点后生效
|
||||
- 结束点不需要先设为目标点
|
||||
- 结束点不弹答题卡
|
||||
- 结束点默认只给完成短反馈并直接进入结果页
|
||||
- 结束点默认不弹白色内容卡
|
||||
- 如果超过关门时间仍未结束,系统按“超时结束”处理
|
||||
- “超时结束”需与正常完赛、主动退出明确区分
|
||||
|
||||
---
|
||||
|
||||
## 6. 计分与答题规则
|
||||
|
||||
### 6.1 基础分
|
||||
|
||||
- 成功打到某个积分点后,立即获得该点标注分值作为基础分
|
||||
- 如果该点未单独配置分值,则走默认分值逻辑
|
||||
|
||||
### 6.2 默认答题规则
|
||||
|
||||
- 最小模板下默认不启用答题
|
||||
- 如需答题,需显式为对应点位配置 `quiz` CTA
|
||||
- 显式启用后,答题时比赛继续计时,不暂停比赛时间
|
||||
|
||||
### 6.3 奖励分
|
||||
|
||||
- 最小模板下默认不存在答题奖励分
|
||||
- 如显式启用答题,则可按题卡配置再获得奖励分
|
||||
|
||||
### 6.4 不弹题对象
|
||||
|
||||
- 开始点不弹题
|
||||
- 结束点不弹题
|
||||
- 未成功打点的非目标点不弹题
|
||||
|
||||
### 6.5 排名与结算默认口径
|
||||
|
||||
- 第一排序:总分高者优先
|
||||
- 第二排序:同分时总用时短者优先
|
||||
|
||||
---
|
||||
|
||||
## 7. HUD 默认规则
|
||||
|
||||
### 7.1 HUD 基础信息
|
||||
|
||||
比赛期间底部 HUD 信息面板默认可承载以下信息:
|
||||
|
||||
- 当前比赛时间
|
||||
- 当前总分
|
||||
- 当前目标点摘要
|
||||
- 当前目标点分值
|
||||
- 玩家与当前目标点的距离
|
||||
|
||||
### 7.2 未选择目标点
|
||||
|
||||
- 如果当前还未选择目标点:
|
||||
- HUD 显示“请选择目标点”类提示
|
||||
- HUD 目标摘要区域显示“请选择目标点”
|
||||
- 不显示目标距离
|
||||
- 仍显示比赛时间和总分等基础信息
|
||||
|
||||
### 7.3 已选择目标点
|
||||
|
||||
- 选择目标点后,HUD 更新为该点信息
|
||||
- HUD 目标摘要区域显示当前点名称与分值摘要
|
||||
- 玩家切换目标点后,HUD 立即切换为新目标点信息
|
||||
|
||||
---
|
||||
|
||||
## 8. 地图与表现默认规则
|
||||
|
||||
### 8.1 起跑前显示
|
||||
|
||||
- 起跑前仅显示开始点
|
||||
- 所有积分点和结束点隐藏
|
||||
|
||||
### 8.2 起跑后显示
|
||||
|
||||
- 打完开始点后显示全部积分点和结束点
|
||||
- 当前目标点需要有明确高亮态
|
||||
- 所有积分点默认建议显示分值标签
|
||||
|
||||
### 8.3 点位默认表现
|
||||
|
||||
- 未选中的积分点显示基础分值和基础样式
|
||||
- 积分点默认显示分值,而不是序号
|
||||
- 积分点分值默认绘制在圆圈内
|
||||
- 积分点默认按分值分档显示不同颜色
|
||||
- 积分点默认半径保持一致,不因分值高低自动变大
|
||||
- 当前目标点需要有更强的动效和高亮
|
||||
- 已收集积分点默认变灰
|
||||
- 结束点始终可见,但视觉权重默认低于当前目标点
|
||||
|
||||
### 8.4 腿线默认表现
|
||||
|
||||
- 积分赛默认不显示腿线
|
||||
- 也不启用腿线动效
|
||||
|
||||
---
|
||||
|
||||
## 9. 反馈与结算页默认规则
|
||||
|
||||
### 9.1 开始反馈
|
||||
|
||||
- 开始点成功后默认给出“比赛开始”类短反馈
|
||||
- 同时更新黑色引导提示条和 HUD 目标摘要
|
||||
- 最小模板下默认不弹开始白卡
|
||||
- 如需开始点完成后展示白色内容卡,需显式开启对应点位的 `autoPopup = true`
|
||||
|
||||
### 9.2 结束反馈
|
||||
|
||||
- 结束点成功后默认先给短反馈
|
||||
- 随后直接进入默认成绩结算页
|
||||
- 默认不再额外弹出终点白色内容卡
|
||||
- 如需再次查看终点说明,需显式配置点击内容能力
|
||||
|
||||
### 9.3 默认成绩结算页
|
||||
|
||||
默认结算页至少显示:
|
||||
|
||||
- 总分
|
||||
- 基础积分
|
||||
- 答题奖励积分
|
||||
- 已收集点数
|
||||
- 答题正确数
|
||||
- 答题错误数
|
||||
- 答题超时数
|
||||
- 总用时
|
||||
- 是否打终点完赛
|
||||
|
||||
---
|
||||
|
||||
## 10. 边界与容错默认规则
|
||||
|
||||
### 10.1 GPS 防重复触发
|
||||
|
||||
- 同一点成功结算后,系统应有短暂防抖或冷却,避免 GPS 抖动导致重复触发
|
||||
|
||||
### 10.2 重复进入已收集点
|
||||
|
||||
- 已收集点再次进入范围时不重复得分、不重复答题、不重复弹完成提示
|
||||
|
||||
### 10.3 切换目标点
|
||||
|
||||
- 切换目标点只改变当前目标和 HUD 信息,不回滚已有得分和已收集状态
|
||||
|
||||
### 10.4 页面中断恢复
|
||||
|
||||
- 小程序切后台或页面重进后,默认应恢复当前比赛状态
|
||||
- 已开始的比赛默认不应自动重开
|
||||
|
||||
---
|
||||
|
||||
## 11. 与最小模板的关系
|
||||
|
||||
积分赛最小模板只需要保证以下骨架存在:
|
||||
|
||||
- `playfield.kind = "control-set"`
|
||||
- `game.mode = "score-o"`
|
||||
- `game.punch.policy`
|
||||
- `game.punch.radiusMeters`
|
||||
|
||||
其余流程默认按本文档执行。
|
||||
|
||||
也就是说,本文档定义的是:
|
||||
|
||||
- 最小模板下的系统默认局流程
|
||||
- 后续配置化扩展前的默认产品行为
|
||||
- 积分赛样例配置和实现验收时的基准口径
|
||||
|
||||
Reference in New Issue
Block a user