全程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次胡牌判定的计算。如果各位对此有相应的想法和建议希望大家可以一起讨论。
谢谢。