框架通信
2021.03.05
0 1 2 3 4 5 6 7 8 // 1-9筒
9 10 11 12 13 14 15 16 17 // 1-9条
18 19 20 21 22 23 24 25 26 // 1-9万
27 28 29 30 // 东南西北
31 32 33 // 中发白
可增加花牌
34 35 36 37 // 春夏秋冬
2021.03.08
创建麻将游戏场景的时候,就会初始化麻将牌,ps.buf 并洗牌
DrawnCard(card,bool) 发牌
cardpool 当前模式整副牌
pos 当前状态下的牌索引
获取万牌数量:100, 200, 800, 900, 800, 0, 0, 0, 0, 1500, 2500, 2000, 800, 400 sum 10000
随机 0-9999 其中一个数字
权重. 可通过调整json 配置文件,动态调整麻将发牌类型的概率,而后经过计算各个牌型的分值,计算出该手牌的牌型分数
根据牌型分数 加之其他策略,决定是否把好牌发给机器人 player1 player2 handcard1 handcard2
2021.03.09
发牌逻辑:玩家听牌后摸到的牌直接替换成自己可以胡的牌,通过客户端传的playerop opcode10 来开启功能。
分析其他玩家操作当前出牌,数据结构使用队列。 依次把 胡 杠 碰 吃 操作写入。
canHu() 分析玩家能否胡牌
思路 把当前手牌大于2张的牌,依次看做将牌,带入计算,获取顺子 和刻子 看是否能胡牌 风扑,将扑
胡牌数据结构图:
root
1-9筒 1-9万 1-9条 东南西北 中发白 //去除2张将牌
1 2 3 4 //构建顺牌,添加刻子
时间复杂度:最坏情况下 14343 O(n²)
空间复杂度:拷贝一份,然后传递指针 O(n)
2021.03.10
玩家操作: 思路,直接把玩家摸牌和其他玩家打牌,分开分别处理。就不存在判断供牌玩家,胡牌玩家了。
自身摸牌时操作,由客户端进行处理。
waitdiscard 阶段,接收客户端发送的 出牌 暗杠,补杠,胡,过操作
别人打出的牌进行操作,根据玩家进行压栈操作。依次压入 胡 碰杠 吃
waitcpkh 阶段,接收客户端根据服务器返回操作 而发送的 胡,抢杠胡,碰杠,吃,过操作
2021.03.11
上午详细研究 吃碰杠胡算法
然后研究框架
胡牌 去除将牌,去除刻子,看剩余手牌是否可以组成顺子
碰牌 当前牌数量是否>=2
杠牌 当前牌数量是否==3
吃牌 枚举所有情况 123 456 789 9种吃牌情况
1 23
12 3
123
789
78 9
7 89
123 789
456
1 2 3 4 5 6 7 8 9
1 4 3 1 1 1 1 1 1
3 2