麻将规则引擎 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: 游戏结束 <=
四人桌,庄家,循右次序,形成逆时针出牌顺序
操作优先级:胡>杠(补),碰>吃(上家)>摸