服务端剖析

游戏服设计图

graph TD 游戏服 --> 房间1 游戏服 --> 房间2 游戏服 --> 房间3 游戏服 --> 房间4 游戏服 --> 房间5 游戏服 --> 房间6 游戏服 --> 房间N... 房间4 --> 第1局 房间4 --> 第2局 房间4 --> 第3局 房间4 --> 第4局 房间4 --> 第5局 房间4 --> 第6局 房间4 --> 第N...局 第4局 --> 第1轮 第4局 --> 第2轮 第4局 --> 第3轮 第4局 --> 第4轮 第4局 --> 第5轮 第4局 --> 第6轮 第4局 --> 第N...轮 第4轮 --> 出牌1 第4轮 --> 出牌2 第4轮 --> 出牌3 第4轮 --> 出牌4 第4轮 --> 出牌5 第4轮 --> 出牌N... 第4轮 --> 都不要

扑克牌比较

牌型识别

graph TD 66644 --> 5张牌 5张牌 --> C{3带2/5连顺/5炸?} C --> 3张6带2 大王小王 --> 2张牌 2张牌 --> D{对子/王炸?} D --> 大小王炸

牌型大小比较

66644–>3带2 – 有序数组 –> 3张3-3张2,510K,炸弹–>包括大小王炸–>牌值为大王小王 大王小王 > 66644

牌型排序

graph TD 牌型 --> 单张 牌型 --> 对子 牌型 --> 3带2 牌型 --> 顺子 牌型 --> 连对 牌型 --> 飞机 牌型 --> 510K 牌型 --> 炸弹 单张 -- 有序数组 --> 3-2,510K,炸弹 对子 -- 有序数组 --> 对3-对2,510K,炸弹 3带2 -- 有序数组 --> 3张3-3张2,510K,炸弹 顺子 --> 5连顺 5连顺 -- 有序数组 --> 3到7-10到A,510K,炸弹 顺子 --> ...连顺 连对 --> 2连对 2连对 -- 有序数组 --> 34连对-KA连对,510K,炸弹 连对 --> ...连对 飞机 --> 2飞机 2飞机 -- 有序数组 --> 34飞机-KA飞机,510K,炸弹 飞机 --> ...飞机 510K --> 副510K 副510K -- 有序数组 --> 正510K,炸弹 510K --> 正510K 正510K-- 有序数组 --> 炸弹 炸弹 --> 王炸 王炸 --> 一对小王 王炸 --> 一对大王 王炸 --> 大小王 炸弹 --> 4炸 4炸 -- 有序数组 --> 4张3-4张2,5炸,... 炸弹 --> ...炸

麻将平胡算法

实例演示

graph TB all(1万1万1万6筒7筒8筒1条2条3条5条6条7条西西) char(1万1万1万) dot(6筒7筒8筒) bamboo(1条2条3条5条6条7条) bb1(1条2条3条) bb2(5条6条7条) wind(西西) all-- 万子牌 -->char all-- 筒子牌 -->dot all-- 条子牌 -->bamboo all-- 风字牌 -->wind bamboo-- 间隔大于1 -->bb1 bamboo-- 间隔大于1 -->bb2 char-->刻子 dot-->顺子 wind-->将牌 bb1-->顺子 bb2-->顺子 刻子-->平胡 顺子-->平胡 将牌-->平胡

拆分-按花色-同花色按连续性

graph TB all(手牌) all-- 万 -->万子牌 all-- 筒 -->筒子牌 all-- 条 -->条子牌 all-- 风 -->风字牌 all-- 剑 -->中发白 万子牌-- 间隔大于1 -->万小块1 万子牌-- 间隔大于1 -->万小块2 万子牌-- 间隔大于1 -->万小块3 筒子牌-- 间隔大于1 -->筒小块1 筒子牌-- 间隔大于1 -->筒小块2 筒子牌-- 间隔大于1 -->筒小块3 条子牌-- 间隔大于1 -->条小块1 条子牌-- 间隔大于1 -->条小块2 条子牌-- 间隔大于1 -->条小块3 万小块1-- 可能是 -->刻子 万小块2-- 可能是 -->顺子 万小块3-- 可能是 -->将牌 筒小块1-- 可能是 -->刻子+刻子 筒小块2-- 可能是 -->顺子+顺子 筒小块3-- 可能是 -->刻子/顺子+将牌 条小块1-- 可能是 -->刻子+刻子+刻子 条小块2-- 可能是 -->顺子+顺子+刻子 条小块3-- 可能是 -->刻子+顺子+将牌 风字牌-- 可能是 -->顺子+将牌 刻子-->平胡 顺子-->平胡 将牌-->平胡 刻子+刻子-->平胡 顺子+顺子-->平胡 刻子/顺子+将牌-->平胡 刻子+刻子+刻子-->平胡 顺子+顺子+刻子-->平胡 刻子+顺子+将牌-->平胡

块-去花色-记数量-5进制编码-排序-查找

graph LR 31万(1万1万1万) 34筒(4筒4筒4筒) 38条(8条8条8条) 13万(1万2万3万) 13筒(4筒5筒6筒) 13条(7条8条9条) 141万(1万22222万3万) 141筒(5筒6666筒7筒) 141条(3条4444条5条) 1223万(1万2万2万3万3万4万) 1223筒(4筒5筒5筒6筒6筒7筒) 1223条(6条7条7条8条8条9条) e1(3*1) e2(1*25+1*5+1) e3(1*125+2*25+2*5+1) e4(1*25+4*5+1) 31万-- 等价于 -->34筒 34筒-- 等价于 -->38条 38条-- 记作块 -->3 3-- 5进制编码 -->e1 13万-- 等价于 -->13筒 13筒-- 等价于 -->13条 13条-- 记作块 -->1-1-1 1-1-1-- 5进制编码 -->e2 1223万-- 等价于 -->1223筒 1223筒-- 等价于 -->1223条 1223条-- 记作块 -->1-2-2-1 1-2-2-1-- 5进制编码 -->e3 141万-- 等价于 -->141筒 141筒-- 等价于 -->141条 141条-- 记作块 -->1-4-1 1-4-1-- 5进制编码 -->e4 e1-- 长度为key -->map e2-- 长度为key -->map e3-- 长度为key -->map e4-- 长度为key -->map