swift麻将app的swift算法实现

291 阅读2分钟

全程swift编辑。简单讲述相关代码的思想。欢迎大家一起讨论。 下列先讲述胡牌的实现。

麻将牌类型为:(只涉及万条筒)

万:[1~9] 条:[11~19] 筒:[21~29]

1.判定胡牌的算法--isHuJudge。

1.1 因为胡牌时候按照牌的类型分为3组Array,

并且根据.count判定是否是3n+2、3n、3n的模式。(n可以为0)

在这里可以进行判定如果不符合直接return false。

1.2 构建一个判定3n的函数judge3n()。里面包括顺子判定和刻子判定(3个相同牌

1.2.1 顺子判定:如果发现即remove相关card并将剩下的Array继续判定直到没有顺子存在。

1.2.2刻子判定:同上。

1.2.3经过测试发现算法必须采用(先顺子判定-后刻子判定)和(先刻子判定后顺子判定)方法,直到出现Array.count == 0.即return true。否则false。

**1.3 **构建一个判定3n+2的函数judge3n2()。

1.3.1 找出所有对子,并加入到一个Double_Array中。

1.3.2依次剔除所有的对子数同时对剩余的Array进行judge3n()。直到返回了true。

1.4通过对万条筒Array进行判定后。均返回了true说明此时已经胡牌。

2.听牌算法。

2.1对整副手牌中的card[i]依次剔除,并依次加入needcard(从1~29,当然不包括10、20)然后进行胡牌判定。

2.2将返回true时,保存i得到postArray //意为打第几张可以听牌。(顺序)

将相应的needcard加入到needcardArray //意为可以胡的牌是什么(实际的值)

总结:对于听牌这里,需要的计算量还是挺大的,最大至少可执行14*27次胡牌判定的计算。如果各位对此有相应的想法和建议希望大家可以一起讨论。

谢谢。