feat: 实现补杠和抢杠胡功能

新增 MeldType 和 MeldGroup 领域模型,支持碰、明杠、补杠、暗杠四种副露类型
GameSeat 新增副露管理方法,支持将碰升级为补杠
ResponseActionWindowBuilder 新增补杠响应窗口构建逻辑
SettlementService 新增补杠和抢杠胡结算规则
前端新增副露展示区域,支持显示各类副露标签
This commit is contained in:
hujun
2026-03-20 14:14:07 +08:00
parent 36dcfb7d31
commit d038a8732d
16 changed files with 633 additions and 29 deletions

View File

@@ -94,4 +94,21 @@ class GameEventTest {
.doesNotContainKey("sourceSeatNo")
.doesNotContainKey("tile");
}
@Test
void shouldAllowGangEventWithoutSourceSeatForConcealedGang() {
GameEvent concealedGang = GameEvent.responseActionDeclared(
"game-1",
GameEventType.GANG_DECLARED,
0,
null,
"3万"
);
assertThat(concealedGang.eventType()).isEqualTo(GameEventType.GANG_DECLARED);
assertThat(concealedGang.payload())
.containsEntry("actionType", "GANG")
.containsEntry("tile", "3万")
.doesNotContainKey("sourceSeatNo");
}
}