Files
cmr-mini/doc/games/积分赛/规则说明文档.md

325 lines
9.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 积分赛规则说明文档
> 文档版本v1.1
> 最后更新2026-04-03 20:40:00
本文档用于定义 `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`
其余流程默认按本文档执行。
也就是说,本文档定义的是:
- 最小模板下的系统默认局流程
- 后续配置化扩展前的默认产品行为
- 积分赛样例配置和实现验收时的基准口径