麻将规则引擎 Communication {<-, ->}; Notification {<=, =>}
玩家(P) <=> 规则引擎(RE)
RE{定庄,定宝,发牌}
P: 游戏桌初始化 <=
P(庄家):抓牌(补) -> RE:计算状态{胡, 听}
P: 出牌 -> RE:计算状态{碰杠吃胡}
P: 状态更新{碰杠吃胡}<=
P: 吃一张 -> RE:计算状态{听}
> 出牌 -> RE:计算状态{碰杠吃胡}
P: 状态更新{碰杠吃胡}<=
P: 碰一张 -> RE:计算状态{听}
> 出牌 -> RE:计算状态{碰杠吃胡}
P: 状态更新{碰杠吃胡}<=
P: 杠牌 -> RE:
> 补牌 -> RE:计算状态{胡, 听}
> 出牌 -> RE:计算状态{碰杠吃胡}
P: 状态更新{碰杠吃胡}<=
P: 抓牌(摸) -> RE:计算状态{胡, 听}
P: 出牌 -> RE:计算状态{碰杠吃胡}
P: 状态更新{碰杠吃胡}<=
P: 胡牌 -> RE:结算
P: 游戏结束 <=
四人桌,庄家,循右次序,形成逆时针出牌顺序
操作优先级:胡>杠(补),碰>吃(上家)>摸