二七王:S-6 大局结算按 基础分/冲关分/傍王分 三项分解
问题:大局结算面板要分项显示,而 account 只有「累积得分 + 每局得分数组」。
傍王分尤其拆不出来——N = 冲关奖数 + 傍王王数,两个来源【求和之后】才代入
grade_aw = X×(2Ni−Nj−Nk),事后无法反推各自占比。
解法:在算钱时就拆。把 N 分成 N_冲关(只计庄家)与 N_傍王(勾选后庄闲都算),
分别代入同一公式各算一次。公式对 N 线性,故恒有
grade_cg + grade_bw == grade_aw
这条恒等式正好当回归断言用。
服务端:
- class.paiju.js 抽出 award_pay(n) 复用同一公式,新增 grade_cg / grade_bw;
desk.seatlist 追加三个累计位(基础/冲关/傍王)。
- class.desk.js seatlist 初始化为 5 元素;account 下发改为【对象数组】
{ score, grades, grade_jf_total, grade_cg_total, grade_bw_total }。
原二元数组下标语义不清,且前端未开工,此时改代价最小(同 S-4 的判断)。
协议:aset.seatlist 增补 grade_cg / grade_bw;account 结构与恒等式
grade_jf_total + grade_cg_total + grade_bw_total == score 写明;
并记录这次结构变更的时间与理由。
测试(endgame 26 → 39 checks):
- 核心不变量:两分量之和 == grade_aw;两分量各自零和。
- 未勾傍王局:grade_bw 恒 0、grade_cg == grade_aw。
- 【新增一整局开傍王的端到端】:不开傍王时 grade_bw 恒 0,只验到平凡情形,
必须有傍王局才算真验证了拆分。该局逐项复核两个分量的公式、naward 口径,
并钉住「王数不全相等时 grade_bw 必有非零」防止又退化成平凡。
- 大局累计恒等式:基础+冲关+傍王 == 累积总分。
反向验证:把 _awbw 置零 → 4 条断言失败;把冲关分量误算到闲家头上 →
2 条断言失败。均已还原、全量 17 文件全绿。
另修四处测试桩:_rpc.js / test_paiju / test_rpc / test_success 里手工构造的
o_desk.seatlist 仍是 2 元素,未跟上 class.desk.js 的结构变更(脚本缺陷,
非业务缺陷)。
顺带解决小局结算「冲关分」标签的不严谨:改取 grade_cg 而非 grade_aw,
开傍王时不再把傍王贡献算进来。
遗留 T-31:参考图「基础分」与「总得分」两行数值相同且与右侧大字对不上
(30/30 vs +135),mock 不自洽。当前按 基础分=grade_jf_total、总分=score
提供。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
+27
-24
@@ -62,7 +62,7 @@
|
||||
|
||||
说「**冲关**」指庄家那一份,说「**算奖**」指两者合计。
|
||||
|
||||
> ⚠️ **小局结算的「冲关分」标签有一处不严谨**:它取的是 `grade_aw`,而 `grade_aw` 是按**合计后**的 `N`(冲关+傍王)算出来的。房间**没开傍王**时两者相等、标签准确;**开了傍王**时这个数其实含傍王的贡献,叫「冲关分」就偏窄了。根因与 S-6 同源——两个分量在算钱前就已合并、事后拆不开。**待 S-6 落地后此标签才能名副其实。**
|
||||
> 小局结算的「冲关分」取 **`grade_cg`**(S-6 已把算奖得分拆成冲关 / 傍王两个分量),开傍王时也不会把傍王的贡献算进来。
|
||||
|
||||
#### 四类「公开信息」——名字像、含义差很远
|
||||
|
||||
@@ -746,7 +746,7 @@ EQW_RoomOptions = {
|
||||
| --- | --- | --- | --- |
|
||||
| 大字 | 本局总分 | `grade` | `+20` 橙色(赢)/ `-10` 蓝色(输),底带光晕 |
|
||||
| 小字左 | **`牌局分 N`** | `grade_jf`(捡分子数得分) | 白标签 + 数值 |
|
||||
| 小字右 | **`冲关分 N`** | `grade_aw`(算奖得分) | 白标签 + 数值 |
|
||||
| 小字右 | **`冲关分 N`** | **`grade_cg`**(算奖得分里的冲关分量,S-6 新增;开傍王时不含傍王那部分) | 白标签 + 数值 |
|
||||
|
||||
> 两个标签的文案已由更新后的 `小局结算.png` 确定(原图两个都写「牌局分」是 mock 重复,现已修正为 `牌局分` / `冲关分`)。
|
||||
|
||||
@@ -820,9 +820,7 @@ EQW_RoomOptions = {
|
||||
- **名次徽章**:3 帧(1 金 / 2 橙 / 3 蓝,花瓣形),按总分排名取帧。
|
||||
- **总分大字**:正分橙色带 `+`、负分蓝色带 `-`,复用 §3.6 的 `NUM_RESULT_WIN` / `NUM_RESULT_LOSE`。
|
||||
|
||||
> ⚠️ **四项分数当前协议给不出,需服务端补**,见 §7.5 **S-6**:
|
||||
> `account` 只有「累积得分 + 每局得分数组」,没有「基础分 / 冲关分 / **傍王分**」这三项分解。
|
||||
> 尤其 **傍王分无法从现有字段拆出**——`naward = 冲关 + 傍王王数` 已经把两者合并,`grade_aw` 是按合并后的 `N` 算出来的。
|
||||
> **四项分数已由 S-6 补齐**:`account` 改为对象数组,含 `grade_jf_total`(基础分)/ `grade_cg_total`(冲关分)/ `grade_bw_total`(傍王分)/ `score`(总分),三项之和恒等于 `score`。
|
||||
|
||||
### 1.10 解散结算 `free_room` 【待设计】
|
||||
|
||||
@@ -1728,9 +1726,8 @@ codes/config/
|
||||
|
||||
## 7. 待补充清单
|
||||
|
||||
> **状态汇总**(2026-08-25):待确认规格 29 项**已全部有结论**(T-9 亮牌文案暂定 `x对 x主`;T-20 音效明确后续补充)。
|
||||
> **§7.5 服务端待补项**:S-1…S-5 已完成;**新增 S-6(大局结算四项分数,阻塞 D-9)与 S-7(明牌按钮条件与服务端校验不一致,有泄露口子)待处理**。
|
||||
> **设计稿只剩 D-8**(判定结果文字)。
|
||||
> **状态汇总**(2026-08-26):设计稿只剩 **D-8**(判定结果文字)。
|
||||
> **§7.5 服务端待补项**:S-1…S-6 已完成,**只剩 S-7**(明牌按钮条件与服务端校验不一致,有泄露口子)。
|
||||
|
||||
### 7.1 待出设计稿的界面
|
||||
|
||||
@@ -1948,31 +1945,37 @@ data.bottom.cards // 结算包
|
||||
| `docs/compliance/*.md`(3 份,24 处) | ⬜ **有意不改**——这三份是历次核对的**历史记录**,反映当时的 design 表述;下轮核对按新 design 重做即可,不追溯修改 |
|
||||
| `test/*.js` 其余注释(约 14 处) | ⬜ 仅注释、不影响行为,后续顺手清理 |
|
||||
|
||||
#### S-6 · 大局结算缺「基础分 / 冲关分 / 傍王分」三项分解(新增,⚠️ 阻塞 D-9)
|
||||
#### S-6 · 大局结算的三项分解 —— ✅ 已完成(2026-08-26)
|
||||
|
||||
**需求**:大局结算面板每行要显示 `基础分{n}` / `总得分{n}` / `冲关分{n}` / **`傍王分{n}`** 四项(见 `大局结算.png`)。
|
||||
**问题**:大局结算面板要显示 `基础分` / `冲关分` / `傍王分`,而原 `account` 只有「累积得分 + 每局得分数组」。其中**傍王分尤其拆不出来**——`N = 冲关奖数 + 傍王王数` 两个来源在**求和之后**才代入 `grade_aw = X×(2Ni−Nj−Nk)`,事后无法反推各自占比。
|
||||
|
||||
**现状**:协议 `account` 分组只有
|
||||
**解法**:在算钱时就拆。把 `N` 分成 `N_冲关`(只计庄家)与 `N_傍王`(勾选后庄闲都算),**分别代入同一公式**各算一次。公式对 `N` 线性,故恒有 `grade_cg + grade_bw == grade_aw`——这条恒等式正好当回归断言。
|
||||
|
||||
**小局包 `aset.seatlist[i]` 新增**:
|
||||
|
||||
| 字段 | 说明 |
|
||||
| --- | --- |
|
||||
| `grade_cg` | 算奖得分里的**冲关**分量(不含傍王) |
|
||||
| `grade_bw` | 算奖得分里的**傍王**分量(未勾傍王时恒 0) |
|
||||
|
||||
**大局包 `account` 结构改了**(原为二元数组,现为对象数组):
|
||||
|
||||
```json
|
||||
[[累积得分, [每局得分...]], ...]
|
||||
[{ "score": 0, "grades": [], "grade_jf_total": 0, "grade_cg_total": 0, "grade_bw_total": 0 }, …]
|
||||
```
|
||||
|
||||
拿不出上面四项中的任何一项分解。小局包 `aset.seatlist[i]` 虽有 `grade_jf`(捡分子数得分)与 `grade_aw`(算奖得分),但:
|
||||
| 面板栏位 | 取值 |
|
||||
| --- | --- |
|
||||
| 基础分 | `grade_jf_total` |
|
||||
| 冲关分 | `grade_cg_total` |
|
||||
| 傍王分 | `grade_bw_total` |
|
||||
| 右侧总分大字 | `score` |
|
||||
|
||||
1. **只有小局值,没有大局累计**——大局要的是全部局数的累加;
|
||||
2. **傍王分拆不出来**。这是最麻烦的一条:`naward = (庄家?冲关:0) + (傍王?王数:0)`,两个来源在**求和之后**才拿去算钱(`grade_aw = X×(2Ni−Nj−Nk)`)。等于说冲关与傍王的贡献在算钱前就已经混在一个 `N` 里,**事后无法从 `grade_aw` 反推各自占多少**。
|
||||
恒等式:`grade_jf_total + grade_cg_total + grade_bw_total == score`。
|
||||
|
||||
**建议实现**:在 `class.paiju.js` 算 `grade_aw` 的地方,把 `N` 拆成 `N_chongguan`(冲关)与 `N_bangwang`(傍王)**分别代入同一公式**各算一次,得到两个分量后再相加(相加结果必须等于现在的 `grade_aw`,可作为回归断言)。然后在 `account` 里逐项累计下发,例如:
|
||||
**顺带解决了小局结算「冲关分」标签的不严谨**(见 §0.0):该标签现在应改取 `grade_cg` 而非 `grade_aw`,开傍王时也名副其实了。
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| `grade_base_total` | 整数 | 基础分(捡分子数得分 `grade_jf`)的大局累计 |
|
||||
| `grade_cg_total` | 整数 | **冲关分**的大局累计(**不含**傍王) |
|
||||
| `grade_bw_total` | 整数 | 傍王分的大局累计 |
|
||||
| `score` | 整数 | 总得分(已有) |
|
||||
|
||||
**需先确认**:面板上的「基础分」与「总得分」两行分别对应什么——参考图里两者数值相同(`基础分30` / `总得分30`),是 mock 巧合还是确有区别?【T-31】
|
||||
> **T-31(「基础分」vs「总得分」两行分别是什么)仍未定**:参考图两者数值相同、且与右侧大字对不上(30/30 vs +135),是 mock 不自洽。当前实现按「基础分 = `grade_jf_total`、总分 = `score`」提供;若「总得分」另有所指需再调。
|
||||
|
||||
#### S-7 · 明牌按钮的显示条件与服务端校验不一致(新增,⚠️ 与 design 冲突)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user