前段时间学会了打麻将,觉得老祖宗的智慧真的博大精深,很好玩,食胡的时候真兴奋啊,于是空余时间就想自己写个麻将游戏出来,模仿欢乐麻将那种,数学差,想了两个礼拜才想出一个胡牌算法,前段时间学会了打麻将。
觉得老祖宗的智慧真的博大精深,很好玩,食胡的时候真兴奋啊,于是空余时间就想自己写个麻将游戏出来,模仿欢乐麻将那种,数学差,想了两个礼拜才想出一个胡牌算法,
大概思路是这样的
比如你手中的牌是这样的 m 代表是万子的意思
['m1','m1','m1','m2','m2','m2','m2','m3','m3','m3','m4','m4','m4','m4'];
1、我们首先找出可成为对子的牌有 m1,m2,m3,m4
2、初始化每一张牌的可能路线,比如 m1 可与其他牌组合成顺子,也可以自己当成刻子,m2 可以与其他牌成为顺子,可以自己变成刻子,可以自己变成杠,但当其作为对子的话就只有一个可能,与其他牌成为顺子
如上所述,我们可以得出 ,当 m1 为对子的时候,所有牌的可能性
m1 = [顺]
m2 = [顺,刻,杠]
m3 = [顺,刻]
m4 = [顺,刻,杠]
那么可能的路线有
顺 顺 顺 顺
顺 顺 顺 刻
顺 顺 顺 杠
等等,相当于一个排列算法,这里就有 132*3 = 12 种可能性,若到最后每种牌剩余数都为 0,则胡牌,当 m1 作对子不成立时候,依次尝试 m2,m3,m4 作对子,重复以上的步骤,都不行的话就不能胡了
不知道有没有 bug
第二个就是出牌的算法,目前只想到把自己手中的牌计分,分低的优先出牌,比如一些孤张,边张的,还有一些牌效重复的比如 134 679 一般都会舍去 1 和 9,还有一些就是要算打出的牌失张和进张的比例,感觉很复杂,没有一个完整的思路。
求大家指导!