|
|
d08eddda28
|
fix: HumanMahjongPlayer听牌检测不含字牌 + wildcard显示优化
1. CheckTing硬编码AllTiles(false,false)→漏字牌(武汉/国标等)
修复: 构造函数传includeHonors, MahjongRoom传_rules.Deck.IncludeHonors
2. wildcard显示: 翻牌定精时显示翻到的牌+精牌(带🀫前缀)
|
2026-07-04 22:28:29 +08:00 |
|
|
|
c2b5136085
|
refactor: _wildcards static→实例级 WildcardRegistry
Root cause: static HashSet跨测试/跨变体污染+硬编码名→编码映射
Changes:
- WildcardRegistry: 实例级wildcard管理(IsWildcard/CountWildcards/Clone)
- GameState: 新增Wildcards属性(含Clone)
- MahjongTile: 移除static_wildcards,IsWildcard仅查编码50-59
+ToString(tile,wildcards)重载用于游戏上下文显示
- MeldsSolver: _wildcards字段→构造函数注入(WildcardRegistry?)
- PhaseMachine: _wildcards字段+构造注入
- Deal(): State.Wildcards.Clear()+AddRange替代static ConfigureWildcards
+NameToEncoding查表替代switch硬编码
- RandomMahjongAI/HumanMahjongPlayer: state.Wildcards替代static调用
- HumanMahjongPlayer.CheckTing: 补wildcardCount参数(之前遗漏)
- ExecuteWinClaim: IsFinished=true→Settle()(之前Phase漏设)
Test: CoreTests清理ConfigureWildcards()→WildcardRegistry测试
Impact: 零static state→不同变体/测试完全隔离,未来支持随机宝牌
|
2026-07-04 20:05:26 +08:00 |
|
|
|
cbbe503117
|
fix: Code Review完整修复 — AI chi/暗杠/加杠/chi位置
发现的6个缺口:
1. HandleDiscardReactions AI分支缺chi → 新增ExecuteAiChi
2. StepTurn不处理an_kong/bu_kong → 新增ExecuteAnKong/ExecuteBuKong
3. PhaseMachine.GetLegalActions chi误在自回合 → 移除(chi只能反应)
4. ScoreEngine.CheckFinish死代码 → 保留(无影响)
5. ExecutePungKong用Random.Shared → 改用_rng
6. HumanMahjongPlayer残留chiOpt → 移除
|
2026-07-04 17:56:14 +08:00 |
|
|
|
a047877494
|
fix: CheckWin守卫wildcard重复计数 + 人类HUD集成对手出牌
Critical: 固定wildcard(紅中)在tiles列表中又被wildcardCount计数
→ tiles中14张(含1張紅中)+wildcardCount(1)=15, 15%3=0≠2→拒绝胡
修复: 守卫减去tiles中已含的wildcard数
UX: 对手出牌直接嵌入人类HUD
→ 例: 对手: AI-南:10张 出:1万3条5筒 | AI-西:13张
|
2026-07-04 17:46:21 +08:00 |
|
|
|
7c9d5b4637
|
fix: 癞子=136张内的牌(红中),不是额外+4张 + 宝牌HUD显示
- MahjongTile.ConfigureWildcards: 支持固定wildcard(如红中35)
- IsWildcard: 同时检查encoding 50+和配置的wildcard
- ToString: wildcard牌显示🀫中/🀫发等
- Deck: 固定wildcard作为普通牌加入(红中在136内)
- Deal: fixed类型wildcard不额外加牌
- HUD: 显示 '🀫 宝牌(癞子): 🀫中'
- Wuhan DSL: 移除wildcardCount:4
- 测试: Wuhan牌库136张
|
2026-07-04 17:37:20 +08:00 |
|
|
|
bf041b7e50
|
fix: CheckWin守卫!=14拒绝副露后手牌 + FullHand合并副露
根因: CheckWin要求tiles.Count==14,碰/杠后手牌只有11/8/5/2张
修复:
- CheckWin守卫: !=14 → total%3!=2 (接受2,5,8,11,14)
- FullHand(): 合并手牌+Exposed副露→虚拟完整手牌
- 所有CheckWin调用点改用FullHand (MahjongRoom+PhaseMachine+HumanMahjongPlayer)
- 新增集成测试: 副露后11张手牌自摸
|
2026-07-04 17:31:31 +08:00 |
|
|
|
d416450e56
|
fix: CanAnKong硬编码false + 人类HUD显示听牌/杠/对手状态
修复:
- CanAnKong: 硬编码false → 检查手牌中4张相同(暗杠)
- HumanMahjongPlayer: 添加MeldsSolver依赖,实时检测听牌
- 人类HUD: 显示牌墙/副露/听牌🀄/杠类型(暗/明/加)
- 交互模式人类: 对手显示'X张手牌 | 已pung[..]'不暴露手牌
|
2026-07-04 17:24:05 +08:00 |
|
|
|
f9242cf965
|
fix: 人类玩家显示摸到的牌 (LastDrawnTile + 箭头高亮)
- GameState新增LastDrawnTile字段
- StepTurn摸牌时记录LastDrawnTile
- HumanMahjongPlayer显示'刚刚摸到:X'并用→←箭头标记新牌
- 庄家首轮LastDrawnTile清空
|
2026-07-04 11:49:31 +08:00 |
|
|
|
4302ec2fd5
|
feat: 集成测试 + 手动出牌模式 + discart pool幽灵牌修复
集成测试 (10个):
- 发牌: 庄14闲13, 牌墙55
- 回合流转: 庄家第一轮不摸牌, 非庄家摸牌后出牌
- 数据完整性: 10回合后手牌+副露+牌墙+弃牌=108
- 对局完整性: 4种DSL全部不出错完成
- 构造听牌: 完整手牌第一轮自摸
手动出牌 (--human):
- HumanMahjongPlayer: 显示手牌/可选操作/h=胡/p=碰/k=杠/1-N=出牌
- MahjongRoom: humanPlayer参数
修复: DiscardPool碰/胡后不移除→幽灵牌→总牌数溢出
|
2026-07-04 11:45:54 +08:00 |
|