服务端剖析
游戏服设计图
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