麻将协议图
玩家发AskOut
graph LR;
玩家AskOut -- IsForce=true -->强制出牌;
玩家AskOut -- IsForce=false -->非强制出牌;
强制出牌 -- action=0 -->出一张牌;
强制出牌 -- action=2 -->暗补杠[暗杠
补杠];
强制出牌 -- action=3 -->主动胡[天胡
自模
杠上花
];
强制出牌 -- action=5 -->取消杠/胡;
非强制出牌 -- action=1 -->碰;
非强制出牌 -- action=2 -->直杠;
非强制出牌 -- action=3 -->被动胡[地胡
点炮胡
抢杠胡
];
非强制出牌 -- action=4 -->过[玩家不出];
系统派牌的出牌HINTOUT
graph LR;
出牌[系统派牌的
出牌HINTOUT] -->|IsForce|必出[必须为true,客户端提示玩家必须
从出牌/杠/胡中选择一个操作,
可以取消杠/胡];
出牌-->|CanHu|可胡[若CanHu的值为true
则填写下一步内容];
可胡-->HuPai[HuPai:胡的牌
HuMask:胡牌类型
HuTypeNum:胡牌番型];
出牌-->|CanGang|可杠[若CanGang的值为true
则填写下一步内容];
可杠-->杠牌表[GangList手牌中所有
可杠牌的列表];
出牌-->|CanPeng|碰[必须为false];
碰-->碰牌[Pengpai:无效];
出牌-->|HasAddPai|派牌[必须为true];
派牌-->派的牌[AddPai:必须为
有效的系统派牌];
出牌-->|CursorSeatId|指向[牌桌风向标:必须为活动
玩家的座位号,这里为
被派牌玩家座位号];
出牌-->|QiangNum|墙牌[必须填,用于桌面上展示
派牌后牌墙剩余的牌数量];
出牌-->|SeatId|座位号[必填,用于回放使用
这里为被派牌玩家座位号];
出牌-->|CanOut|是否最后一张牌[最后一张派牌流局时
可以为false否则
派牌后必须为true];
碰牌后的出牌HINTOUT
graph LR;
出牌[碰牌后的
出牌HINTOUT] -->|IsForce|必出[必须为true,客户端提
示玩家必须从出牌/杠中
选择一个操作,可以取消杠];
出牌-->|CanGang|杠[CanGang的值为true
则填写下一步内容];
杠-->杠list[GangList杠牌列表,
所有可以杠的牌];
出牌-->|CanOut|CanOut[必须为true,
碰完后一定可以出牌];
出牌-->|CursorSeatId|CursorSeatId[必填,牌桌风向标:指向活动玩家
这里为当前出牌玩家座位号];
出牌-->|QiangNum|QiangNum[必填,用于桌面上展示剩余的牌];
出牌-->|SeatId|SeatId[必填,回放使用,这里为
当前出牌玩家的座位号];
出牌-->|CanPeng|碰[必须为false];
碰-->碰牌[Pengpai:无效];
出牌-->|CanHu|胡[必须为false];
胡-->HuPai[HuPai:无效
HuMask:无效
HuTypeNum:无效];
出牌-->|HasAddPai|派牌[必须为false];
派牌-->AddPai[AddPai:无效];
碰/杠/(点炮)胡HINTOUT
graph LR;
胡HINTOUT[碰/杠/胡HINTOUT]-->|IsForce|必出[必须为false,其他玩
家出牌后才会出现碰杠胡];
胡HINTOUT-->|CanPeng|碰[若CanPeng的值为true
则填写下一步内容];
碰-->碰牌[Pengpai:可碰的牌
即出牌玩家出的牌];
胡HINTOUT-->|CanGang|杠[若CanGang的值为true
则填写下一步内容];
杠-->杠list[GangList:可以杠的牌];
胡HINTOUT -->|CanHu|胡[CanHu的值为true
则填写下一步内容];
胡-->胡牌[HuPai:胡的牌
HuMask:胡类型
HuTypeNum:胡牌番型];
胡HINTOUT --> |QiangNum|QiangNum[必填,用于桌面上展示
剩余的牌数量];
胡HINTOUT --> |CursorSeatId| CursorSeatId[必填,牌桌风向标:指向活动玩家
这里为出牌玩家座位号];
胡HINTOUT-->|HasAddPai|派牌[必须为false];
派牌-->AddPai[AddPai:无效];
胡HINTOUT --> |SeatId|SeatId[必填,回放使用,当前可以
碰/杠/胡的玩家的座位号];
胡HINTOUT-->|CanOut|出牌[必须为false];
等待WAITOUT
graph LR;
等待[等待WAITOUT] --> |CursorSeatId|出牌玩家[必填,风向标指向出牌的玩家];
等待-->|HasAddPai|派牌[是否是有系统派牌,
有则填写下一步内容];
派牌-->派牌玩家[AddPaiSeatId:
被派牌玩家的座位号];
等待-->|QiangNum|牌墙[必填,用于桌面展示剩余牌的数量];
等待-->|IsKeep|IsKeep[玩家做出一个操作后,
还需要等待其他玩家操作,
则IsKeep=true];
发牌/同步当前桌子手牌信息
graph LR;
发牌[发牌PBAssignPai]-->|PaiList|手牌[手牌不能为空,不包含已经杠/碰的牌,
若是开局后系统发牌则一定为13张];
发牌-->|Hint|出牌[Hint不为空,则为当前玩家出牌,与Wait互斥];
发牌-->|Wait|等待[Wait不为空,则等待庄家出牌,与Hint互斥];
发牌-->|leftPaiNum|左边牌数[给每个玩家发完牌后,起摸点左边
剩余的牌,通过骰子获得];
发牌-->|rightPaiNum|右边牌数[给每个玩家发完牌后,起摸点右边
剩余的牌,通过骰子获得];
发牌-->|syncNumList|牌数量[必填,同步每个玩家的手牌数量,
展示其他玩家的牌数量];
发牌-->|zhuangSeat|庄家[必填,庄家座位号,标识庄家];
小局结算
graph LR;
结算[小局结算
PBSmallSettlement]-->|ID|ID[当前游戏的房间号];
结算-->|status|房间状态[结算时的房间状态,
小局结算时状态为小局结束];
结算-->|now|当前局数[进行小局结算时的当前局数];
结算-->|next|下局局数[下局局数,已结束则为0
客户端判断是否继续准备];
结算-->|total|总局数[展示总局数];
结算-->|name|玩法名称[当前游戏的名称];
结算-->|doc|玩法描述[游戏玩法的具体描述];
结算-->|time|时间[展示结束时的时间];
结算-->|baseScore|房间底分[展示当前游戏的底分]
结算-->|overReason|结束原因[结束原因:解散/结束/局数打满/
玩家退出等,用于展示相应提示或动画]
结算-->|overDoc|结束说明[结束文字说明:玩家发起解散/
超过局数解散/玩家退出等]
结算-->|dataValid|数据是否有效[数据是否有效,结算前状
态不是游戏中,则数据无效]
结算-->|isFlow|是否流局
结算-->|prizeHorseList|奖马[奖马:摸到的奖马牌及是否是马]
结算-->|players|玩家情况[展示每个
玩家的数据]
结算的players玩家数据
graph LR;
玩家[players玩家数据]-->|userId|id[玩家ID,用于展示
玩家的信息]
玩家-->|NickName|NickName[玩家昵称,用于
展示玩家的信息]
玩家-->|WinScore|WinScore[展示本局输赢分数
赢为正数,输为负数]
玩家-->|IsBanker|IsBanker[标识是否是庄家]
玩家-->|IsPao|IsPao[标识是否是放炮]
玩家-->|IsHu|IsHu[如果这个玩家是胡牌玩家
则填写下一步内容]
IsHu-->HuType[HuPai:胡的牌
HuType:展示胡牌类型
HuTypeNum:胡牌番型]
WinScore-->HuScore[HuScore:总胡牌分数
GangScore:总的杠分数
PrizeHorseScore:
总奖/杀马分数]
玩家-->|HandPaiList|HandPaiList[玩家的手牌]
玩家-->|GangList|GangList[展示玩家所有杠的牌列表]
玩家-->|PengList|PengList[展示玩家所有碰的牌列表]