麻将流程图
流程图
graph TD
准备 -->开始[开始游戏]
开始-->检查庄家胡[开局检查天胡]
检查庄家胡-->|Y| 胡[胡牌]
检查庄家胡-->|N| 出牌[出牌]
出牌-->检查碰杠胡[检查碰/杠/胡]
检查碰杠胡-->玩家选择碰杠胡过[玩家选择碰/杠/胡/过]
玩家选择碰杠胡过-->|杠|杠[杠]
玩家选择碰杠胡过-->|胡|胡[胡]
玩家选择碰杠胡过-->|碰|碰[碰]
玩家选择碰杠胡过-->|过|过[过]
过-->下家摸牌[下家摸牌]
碰-->出牌[出牌]
下家摸牌-->出牌[出牌]
杠-->出牌玩家摸牌[出牌玩家摸牌]
出牌玩家摸牌-->出牌[出牌]
胡-->结算[结算]
碰/杠,胡时,碰/杠先操作
sequenceDiagram
玩家1->>服务器:玩家1出牌|ASKOUT
服务器-->>玩家1:广播玩家1出牌|USEOUT
服务器-->>玩家2:广播玩家1出牌|USEOUT
服务器-->>玩家3:广播玩家1出牌|USEOUT
服务器-->>玩家4:广播玩家1出牌|USEOUT
服务器-->>玩家2:提示碰/杠|HINTOUT
服务器-->>玩家3:提示胡|HINTOUT
服务器-->>玩家4:等待操作|WAITOUT
服务器-->>玩家1:等待操作|WAITOUT
玩家2->>服务器:碰/杠|ASKOUT
服务器-->>玩家2:⚠️继续等待操作|WAITOUT(isKeep=true)
玩家3->>服务器:胡|ASKOUT
服务器-->>玩家1:广播玩家3胡牌|USEOUT
服务器-->>玩家2:广播玩家3胡牌|USEOUT
服务器-->>玩家3:广播玩家3胡牌|USEOUT
服务器-->>玩家4:广播玩家3胡牌|USEOUT
可碰/杠,碰/杠先操作且胡过
sequenceDiagram
玩家1->>服务器:玩家1出牌|ASKOUT
服务器-->>玩家1:广播玩家1出牌|USEOUT
服务器-->>玩家2:广播玩家1出牌|USEOUT
服务器-->>玩家3:广播玩家1出牌|USEOUT
服务器-->>玩家4:广播玩家1出牌|USEOUT
服务器-->>玩家1:等待操作|WAITOUT
服务器-->>玩家2:提示碰/杠|HINTOUT
服务器-->>玩家3:提示胡|HINTOUT
服务器-->>玩家4:等待操作|WAITOUT
玩家2->>服务器:碰/杠|ASKOUT
服务器-->>玩家2:⚠️继续等待操作|WAITOUT(isKeep=true)
玩家3->>服务器:过|ASKOUT
服务器-->>玩家1:广播玩家2碰/杠|USEOUT
服务器-->>玩家2:广播玩家2碰/杠|USEOUT
服务器-->>玩家3:广播玩家2碰/杠|USEOUT
服务器-->>玩家4:广播玩家2碰/杠|USEOUT
碰/杠 /胡都选择过
sequenceDiagram
玩家1->>服务器:玩家1出牌|ASKOUT
服务器-->>玩家1:广播玩家1出牌|USEOUT
服务器-->>玩家2:广播玩家1出牌|USEOUT
服务器-->>玩家3:广播玩家1出牌|USEOUT
服务器-->>玩家4:广播玩家1出牌|USEOUT
服务器-->>玩家1:等待操作|WAITOUT
服务器-->>玩家2:提示碰/杠|HINTOUT
服务器-->>玩家3:提示胡|HINTOUT
服务器-->>玩家4:等待操作|WAITOUT
玩家2->>服务器:过|ASKOUT
服务器-->>玩家2:⚠️继续等待操作|WAITOUT(isKeep=true)
玩家3->>服务器:过|ASKOUT
服务器-->>玩家2:给玩家2发牌(提示出牌)|HINTOUT
服务器-->>玩家1:等待玩家2出牌|WAITOUT
服务器-->>玩家3:等待玩家2出牌|WAITOUT
服务器-->>玩家4:等待玩家2出牌|WAITOUT
碰/杠,胡时,胡先操作
sequenceDiagram
玩家1->>服务器:玩家1出牌|ASKOUT
服务器-->>玩家1:广播玩家1出牌|USEOUT
服务器-->>玩家2:广播玩家1出牌|USEOUT
服务器-->>玩家3:广播玩家1出牌|USEOUT
服务器-->>玩家4:广播玩家1出牌|USEOUT
服务器-->>玩家1:等待操作|WAITOUT
服务器-->>玩家2:提示碰/杠|HINTOUT
服务器-->>玩家3:提示胡|HINTOUT
服务器-->>玩家4:提示等待WAITOUT
玩家3->>服务器:胡|ASKOUT
服务器-->>玩家1:广播玩家3胡牌|USEOUT
服务器-->>玩家2:广播玩家3胡牌|USEOUT
服务器-->>玩家3:广播玩家3胡牌|USEOUT
服务器-->>玩家4:广播玩家3胡牌|USEOUT
玩家2->>服务器:碰/杠|ASKOUT
服务器-->>玩家2:错误码|RETURN
两个玩家可以胡,一个玩家可以碰/杠
sequenceDiagram
玩家1->>服务器:玩家1出牌|ASKOUT
服务器-->>玩家1:广播玩家1出牌|USEOUT
服务器-->>玩家2:广播玩家1出牌|USEOUT
服务器-->>玩家3:广播玩家1出牌|USEOUT
服务器-->>玩家4:广播玩家1出牌|USEOUT
服务器-->>玩家1:等待操作|WAITOUT
服务器-->>玩家2:提示碰/杠|HINTOUT
服务器-->>玩家3:提示胡|HINTOUT
服务器-->>玩家4:提示胡|HINTOUT
玩家4->>服务器:胡|ASKOUT
服务器-->>玩家4:⚠️继续等待操作|WAITOUT(isKeep=true)
玩家2->>服务器:碰/杠|ASKOUT
服务器-->>玩家2:⚠️继续等待操作|WAITOUT(isKeep=true)
玩家3->>服务器:胡|ASKOUT
服务器-->>玩家1:广播玩家3,4胡牌|MultiUseOut
服务器-->>玩家2:广播玩家3,4胡牌|MultiUseOut
服务器-->>玩家3:广播玩家3,4胡牌|MultiUseOut
服务器-->>玩家4:广播玩家3,4胡牌|MultiUseOut
两个玩家可以胡,一个玩家可以碰
sequenceDiagram
玩家1->>服务器:玩家1出牌|ASKOUT
服务器-->>玩家1:广播玩家1出牌|USEOUT
服务器-->>玩家2:广播玩家1出牌|USEOUT
服务器-->>玩家3:广播玩家1出牌|USEOUT
服务器-->>玩家4:广播玩家1出牌|USEOUT
服务器-->>玩家1:等待操作|WAITOUT
服务器-->>玩家2:提示碰/杠|HINTOUT
服务器-->>玩家3:提示胡|HINTOUT
服务器-->>玩家4:提示胡|HINTOUT
玩家4->>服务器:胡|ASKOUT
服务器-->>玩家4:⚠️继续等待操作|WAITOUT(isKeep=true)
玩家3->>服务器:胡|ASKOUT
服务器-->>玩家1:广播玩家3,4胡牌|MultiUseOut
服务器-->>玩家2:广播玩家3,4胡牌|MultiUseOut
服务器-->>玩家3:广播玩家3,4胡牌|MultiUseOut
服务器-->>玩家4:广播玩家3,4胡牌|MultiUseOut
玩家2->>服务器:碰/杠|ASKOUT
服务器-->>玩家2:错误码
两个胡一个碰/杠
sequenceDiagram
玩家1->>服务器:玩家1出牌|ASKOUT
服务器-->>玩家1:广播玩家1出牌|USEOUT
服务器-->>玩家2:广播玩家1出牌|USEOUT
服务器-->>玩家3:广播玩家1出牌|USEOUT
服务器-->>玩家4:广播玩家1出牌|USEOUT
服务器-->>玩家1:等待操作|WAITOUT
服务器-->>玩家2:提示碰/杠|HINTOUT
服务器-->>玩家3:提示胡|HINTOUT
服务器-->>玩家4:提示胡|HINTOUT
玩家2->>服务器:碰/杠|ASKOUT
服务器-->>玩家2:⚠️继续等待操作|WAITOUT(isKeep=true)
玩家4->>服务器:胡|ASKOUT
服务器-->>玩家4:⚠️继续等待操作|WAITOUT(isKeep=true)
玩家3->>服务器:胡|ASKOUT
服务器-->>玩家1:广播玩家3,4胡牌|MultiUseOut
服务器-->>玩家2:广播玩家3,4胡牌|MultiUseOut
服务器-->>玩家3:广播玩家3,4胡牌|MultiUseOut
服务器-->>玩家4:广播玩家3,4胡牌|PBMultiUseOut
补杠
sequenceDiagram
玩家1->>服务器:补杠|ASKOUT
服务器-->>玩家2:提示胡|HINTOUT
服务器-->>玩家1:等待操作|WAITOUT
服务器-->>玩家3:等待操作|WAITOUT
服务器-->>玩家4:等待操作|WAITOUT
玩家2->>服务器:过|ASKOUT
服务器-->>玩家1:广播玩家1补杠成功|USEOUT
服务器-->>玩家2:广播玩家1补杠成功|USEOUT
服务器-->>玩家3:广播玩家1补杠成功|USEOUT
服务器-->>玩家4:广播玩家1补杠成功|USEOUT
抢杠胡
sequenceDiagram
玩家1->>服务器:补杠|ASKOUT
服务器-->>玩家2:提示胡|HINTOUT
服务器-->>玩家1:等待操作|WAITOUT
服务器-->>玩家3:等待操作|WAITOUT
服务器-->>玩家4:等待操作|WAITOUT
玩家2->>服务器:胡|ASKOUT
服务器-->>玩家1:广播玩家2抢杠胡|USEOUT
服务器-->>玩家2:广播玩家2抢杠胡|USEOUT
服务器-->>玩家3:广播玩家2抢杠胡|USEOUT
服务器-->>玩家4:广播玩家2抢杠胡|USEOUT
杠上花
sequenceDiagram
玩家1->>服务器:杠|ASKOUT
服务器-->>玩家1:广播玩家1杠|USEOUT
服务器-->>玩家2:广播玩家1杠|USEOUT
服务器-->>玩家3:广播玩家1杠|USEOUT
服务器-->>玩家4:广播玩家1杠|USEOUT
服务器-->>玩家1:给玩家1发牌(+出牌/胡牌)|HINTOUT
服务器-->>玩家2:等待操作|WAITOUT
服务器-->>玩家3:等待操作|WAITOUT
服务器-->>玩家4:等待操作|WAITOUT
玩家1->>服务器:胡|ASKOUT
服务器-->>玩家1:广播玩家1杠上花|USEOUT
服务器-->>玩家2:广播玩家1杠上花|USEOUT
服务器-->>玩家3:广播玩家1杠上花|USEOUT
服务器-->>玩家4:广播玩家1杠上花|USEOUT
一炮三响
sequenceDiagram
玩家1->>服务器:玩家1出牌|ASKOUT
服务器-->>玩家1:等待操作|WAITOUT
服务器-->>玩家2:提示胡|HINTOUT
服务器-->>玩家3:提示胡|HINTOUT
服务器-->>玩家4:提示胡|HINTOUT
玩家4->>服务器:胡|ASKOUT
服务器-->>玩家4:⚠️继续等待操作|WAITOUT(isKeep=true)
玩家3->>服务器:胡|ASKOUT
服务器-->>玩家3:⚠️继续等待操作|WAITOUT(isKeep=true)
玩家2->>服务器:胡|ASKOUT
服务器-->>玩家1:广播玩家2,3,4胡牌|MultiUseOut
服务器-->>玩家2:广播玩家2,3,4胡牌|MultiUseOut
服务器-->>玩家3:广播玩家2,3,4胡牌|MultiUseOut
服务器-->>玩家4:广播玩家2,3,4胡牌|MultiUseOut