Files
cmr-mini/doc/gameplay/程序默认规则基线.md

446 lines
10 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
本文档用于定义当前客户端在**不依赖活动配置细项**时,程序层应该内建的默认规则。
目标:
- 先把程序能力层的默认行为定住
- 让代码实现优先对齐这一套基线
- 等默认行为稳定后,再决定哪些能力值得开放成配置
说明:
- 本文档讲的是**程序默认规则**
- 它先于活动配置存在
- 它不讨论后台录入方式
- 它不追求一次把所有参数开放出去
- 当前这批玩法默认值已开始集中收口到 [gameModeDefaults.ts](D:/dev/cmr-mini/miniprogram/game/core/gameModeDefaults.ts)
- 设置页默认值与锁态已开始集中收口到 [systemSettingsState.ts](D:/dev/cmr-mini/miniprogram/game/core/systemSettingsState.ts)
---
## 1. 总体原则
当前规则收敛顺序固定为:
1. 先定程序默认能力
2. 再定玩法默认差异
3. 最后才开放活动配置覆盖
程序层默认规则要满足 3 个要求:
- 默认可玩:不给额外配置也能顺畅跑完一局
- 默认统一:相同类型行为在不同玩法下表达一致
- 默认克制:不把调试、测试、历史试验行为带进最小流程
补充一条设置页原则:
- 设置值和锁态分离管理,避免运行时状态被历史缓存污染
---
## 2. 程序默认层次
前台默认只保留 5 类可见反馈层。
同时,程序默认值分成两条并行基线:
- 对局规则默认值
- 系统设置默认值
### 2.1 黑底引导提示条
职责:
- 只负责告诉玩家“下一步该做什么”
规则:
- 自动消失
- 可手动关闭
- 文案变化时可有轻动画
- 默认只配轻震动
- 不承担结果反馈
- 不承担内容说明
### 2.2 彩色短反馈条
职责:
- 只负责告诉玩家“刚刚发生了什么”
规则:
- 短暂出现
- 不带按钮
- 不显示长说明
- 不承担下一步引导
### 2.3 白色内容卡
职责:
- 只承载显式配置的点位内容
规则:
- 默认不进入最小流程
- 默认关闭
- 仅当某个点位明确启用时才参与流程
- 浏览型卡片默认短时自动消失
- 交互型卡片只在显式开启时出现
### 2.4 答题卡
职责:
- 承载显式启用的答题玩法
规则:
- 属于强交互层
- 最小模板下默认关闭
- 仅当点位显式配置 `quiz` CTA 时才进入
- 不依赖白色内容卡作为前置
### 2.5 成绩总览页
职责:
- 承载结算结果
规则:
- 终点完成后直接进入
- 不再额外叠终点白卡
---
## 3. 打点默认规则
### 3.1 开始点
程序默认行为:
- 必须先打开始点才能正式开赛
- 成功打开始点后开始计时
- 起点完成后只给短反馈,并更新引导和 HUD
- 默认不弹白色开始卡
- 从准备页进入地图即视为进入对局,不再额外要求点击开始按钮
- 默认不弹答题卡
### 3.2 普通点
程序默认行为:
- 成功打点后先完成基础结算
- 最小模板下默认不弹答题卡
- 如需答题,必须显式配置点位 CTA
- 默认不先弹白色内容卡
- 默认不重复得分
- 默认不重复出题
### 3.3 结束点
程序默认行为:
- 成功打终点后先给完成短反馈
- 随后直接进入结果页
- 默认不弹白色终点卡
- 默认不弹答题卡
### 3.4 关门时间
程序默认行为:
- 默认关门时间为开赛后 `2` 小时
- 距离关门时间小于等于 `10` 分钟时HUD 第 1 页时间区切换为倒计时显示
- 倒计时显示需有区别于正常计时的强调样式
- 到达关门时间后,系统自动结束当前对局
- 超时结束必须和正常完赛、主动退出区分开
---
## 4. 玩法默认差异
程序只内建少量玩法差异,不把所有东西做成配置。
### 4.1 顺序打点 `classic-sequential`
默认差异:
- 按顺序推进
- 默认允许跳点
- 默认跳点半径 = 打点半径的 2 倍
- 默认跳点前弹出确认
- 当前目标点由系统自动推进
- 终点默认需要在中间点都“成功或跳过”后才生效
- 普通点基础分默认 `1`
- 普通点默认不附带答题奖励
### 4.2 积分赛 `score-o`
默认差异:
- 自由打点
- 默认不存在跳点
- 默认不要求先选中目标点
- 点击某个积分点时,默认只更新当前目标和 HUD 信息
- 未点击选中时,也允许直接进入任意积分点范围完成打点
- 默认至少完成 `1` 个普通积分点后,终点才解锁
- 普通点基础分默认取该点分值
- 普通点默认不附带答题奖励
---
## 5. HUD 默认规则
HUD 属于公共程序能力,不属于某个玩法专属实现。
### 5.1 固定结构
- HUD 固定为 2 页
- 第 1 页为比赛主信息页
- 第 2 页为心率 / 遥测页
- 异型壳子布局固定,不因玩法改变结构
### 5.2 第 1 页默认职责
- 时间
- 里程
- 动作标签
- 目标摘要
- 目标距离
- 进度摘要
- 速度
- 临近关门时间时,时间槽位切换为倒计时
### 5.3 第 2 页默认职责
- 心率
- 卡路里
- 平均速度
- 精度或相关遥测值
### 5.4 遥测身体数据来源
程序默认口径:
- HUD 第 2 页使用统一遥测运行时
- 活动配置里的 `game.telemetry.*` 只作为活动默认值
- 玩家年龄、静息心率、体重等身体数据,后续允许由线上接口覆盖
- 线上身体数据一旦到位,应高于活动配置生效
默认优先级:
`系统默认值 -> 活动遥测默认值 -> 玩家线上身体数据`
### 5.5 玩法映射默认口径
- 顺序打点:
- 目标摘要显示当前目标点
- 进度摘要显示完成进度和跳点数
- 积分赛:
- 目标摘要显示当前选中目标点
- 进度摘要显示总分和收集进度
### 5.6 目标角色默认口径
程序默认把目标拆成 4 类:
- 可打目标:当前进入范围后可真正完成打点的对象
- 引导目标:用于距离音效、接近提示和弱引导的对象
- HUD 目标:用于底部信息面板距离与摘要显示的对象
- 展示高亮目标:用于地图上重点高亮的对象
约束:
- 这 4 类目标不能再混用
- 积分赛里“选中目标”默认只影响 HUD 目标
- 距离音效默认只跟随引导目标,不跟随选中状态
---
## 6. 距离反馈默认规则
距离反馈和黑底引导提示条分离管理。
### 6.1 黑底引导提示条
- 默认只走轻震动
- 不绑定提示音
### 6.2 距离提示
默认分为 3 档:
1. `distant`
2. `approaching`
3. `ready`
默认口径:
- `ready`:进入可打点范围
- `approaching`:接近目标
- `distant`:较远但仍处于有效提醒范围
- 更远距离默认静默
默认阈值:
- `distantDistanceMeters = 80`
- `approachDistanceMeters = 20`
- `readyDistanceMeters = 5`
默认节奏:
- `distant`:弱提醒,默认间隔 `4800ms`
- `approaching`:较明确提醒,默认间隔 `950ms`
- `ready`:确认提醒,默认间隔 `650ms`
---
## 7. 系统设置默认规则
设置页属于程序公共能力,不属于某个玩法专属逻辑。
### 7.1 设置项结构
每个设置项默认由两部分组成:
- `value`:设置值
- `isLocked`:是否允许玩家修改
### 7.2 默认值规则
程序默认要求:
- 每个设置项都必须有系统默认值
- 玩家未手动修改时,直接使用系统默认值
- 默认值应集中维护,不散落在页面逻辑里
### 7.3 持久化规则
程序默认要求:
- `value` 需要持久化
- `isLocked` 不持久化
- 页面每次进入时,锁态都应重新按当前运行时规则计算
- 锁态只受系统默认值与活动配置影响,玩家不能在页面中修改锁态
- 设置页中的锁态徽标只做状态展示,不提供点按切换能力
- 锁态生存期:从当前游戏配置载入并进入该局开始,到本局正常结束、超时结束或主动退出为止
默认优先级:
`系统设置默认值 -> 玩家本地持久化值`
锁态优先级:
`系统锁态默认值 -> 当前运行时或活动规则覆盖`
### 7.4 当前已集中维护的设置基线
当前已在 [systemSettingsState.ts](D:/dev/cmr-mini/miniprogram/game/core/systemSettingsState.ts) 集中维护:
- 轨迹显示
- GPS 点显示
- 侧边按钮习惯
- 自动旋转
- 指北针调校
- 北向参考
- 中央标尺显示与锚点
- 各设置项的默认锁态
---
## 8. 最小流程基线
### 8.1 顺序打点最小流程
1. 进入游戏,只显示开始点
2. 打开始点,开赛并显示全场
3. 按顺序推进普通点
4. 普通点打点后默认只做基础结算
5. 可触发跳点
6. 打终点后直接进入结果页
7. 如果超过 `2` 小时仍未结束,系统按超时结束处理
### 8.2 积分赛最小流程
1. 进入游戏,只显示开始点
2. 打开始点,开赛并显示全部积分点和终点
3. 可直接前往任意积分点,或点击某个点更新当前目标
4. 进入积分点范围后成功打点
5. 普通点打点后默认只做基础结算
6. 默认至少完成 `1` 个普通积分点后可打终点结束
7. 如果超过 `2` 小时仍未结束,系统按超时结束处理
---
## 9. 暂不开放为配置的内容
当前先不优先配置化的内容:
- 弹层体系层级
- 起点是否弹白卡
- 普通点是否先白卡后答题
- 终点是否白卡后结算
- HUD 是否双页
- HUD 异型壳子结构
- 黑条提示与距离反馈的职责边界
这些内容应先作为程序默认能力稳定下来。
---
## 10. 故障恢复基线
当前故障恢复按“轻量快照恢复”处理:
- 仅恢复进行中的对局
- 仅恢复核心赛局状态、遥测累计值和地图基础视口
- 不恢复白卡、答题卡、临时动效、短反馈和提示层
- 恢复后由规则层和展示层重新计算 HUD、按钮文案、目标提示和音效状态
当前默认恢复内容:
- 当前配置入口
- `startedAt / completedControlIds / skippedControlIds / currentTargetControlId / score / modeState`
- 累计里程、基础心率/卡路里累计、最后 GPS 点
- `zoom / centerTile / rotation / gpsLock`
当前默认不恢复内容:
- 详情卡
- 答题中间态
- 待查看内容入口
- 所有瞬时动效和提示队列
---
## 11. 后续开放配置的原则
后续只有满足以下条件的内容,才建议开放成配置:
- 运营确实会频繁改
- 改动不会破坏主流程一致性
- 改完不会引入一组新的层级冲突
优先可配置的内容应是:
- 点位分值
- 点位内容是否启用
- 点位样式
- 三档距离提示阈值
- 三档距离提示间隔
---
## 12. 一句话结论
当前阶段应以这份文档作为**程序默认能力基线**先把最小流程、弹层职责、HUD 结构和距离反馈定死,再决定哪些内容值得进入配置层。