二七王:前端子项目 A 实施计划

14 个任务,每个自带 TDD 循环与提交:shared 抽取与同步(1-2)、
单测框架与漂移守卫(3)、core 四个纯逻辑模块(4-7)、布局求解器(8)、
常量层三批(9/10/12)、精灵索引(11)、常量机械守卫(13)、接入骨架(14)。

顺带修订设计文档两处:shared 抽取函数数量 7→8(原文列了 8 个名字),
CardMark.markOf 签名与计划对齐(拖拉机判定需整手牌作上下文)。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-26 18:55:26 +08:00
co-authored by Claude Opus 5
parent 0f29c2e08c
commit e326481f2f
2 changed files with 2240 additions and 4 deletions
File diff suppressed because it is too large Load Diff
@@ -164,9 +164,8 @@ EQW_CardOrder.sort(cards, mainflower) // 返回新数组,从大到小,与
清单 §1.6 T-8 的三种牌面标记,前端据 `flower` 本地推导,服务端不下发: 清单 §1.6 T-8 的三种牌面标记,前端据 `flower` 本地推导,服务端不下发:
```js ```js
EQW_CardMark.markOf(cardId, mainflower, handCards) EQW_CardMark.marksOfHand(cards, mainflower) // 批量,返回 { cardId: mark };无标记的牌不出现
// → 'tractor' | 'zheng' | 'zhu' | null (三者互斥,每张牌至多一个) EQW_CardMark.markOf(cardId, cards, mainflower) // 单张 → 'tractor'|'zheng'|'zhu'|null(互斥,至多一个)
EQW_CardMark.marksOfHand(handCards, mainflower) // 批量,返回 { cardId: mark }
EQW_CardMark.countByFlower(cards) // 选主面板:{ flower: {count, pairs} } EQW_CardMark.countByFlower(cards) // 选主面板:{ flower: {count, pairs} }
``` ```
@@ -275,7 +274,7 @@ get_tuolaji_list ─→ id_to_code
trump_rank ───────→ id_to_code trump_rank ───────→ id_to_code
``` ```
共 7 个:`id_to_flower`、`id_to_number`、`id_to_code`、`order_cards`、`is_continuous`、`get_pairlist`、`get_tuolaji_list`、`trump_rank`。 共 8 个:`id_to_flower`、`id_to_number`、`id_to_code`、`order_cards`、`is_continuous`、`get_pairlist`、`get_tuolaji_list`、`trump_rank`。它们在 `class.arith.js` 里正好是**连续的一整段**(第 62–289 行),中间不夹杂其他函数,可整段搬运。
### 7.3 服务端改动 ### 7.3 服务端改动