想做一个模拟立直麻将的程序,但是仔细思考了一下,由于麻将和牌牌型太多了,光是判断和牌牌型和计算役种番数的算法就相当困难,如果直接动态计算手牌和牌牌型的话,每次都根据不同情况要跑一遍算法,耗时太大,如果使用二分查表的算法的话也没有表可以查,因此我想,可不可以简化一下麻将,并使其不失麻将二则,根据牌山牌河出牌的乐趣和随机性造成的多样情况呢?
中,发,白三元牌是我首先想到的,毕竟和出大三元是令人快乐的,因此,我把全部的麻将牌都换成中发白,并把牌总数控制为3214,84张,也就是每种牌28张。
接下来考虑役种,可和牌型为2,4,8;7,7,0;14,0 ,0三种,考虑各种情况,共6+3+3,十二种情形,这样让查表变得非常容易,而且雀士手中13张牌,在开局根据古典概型比较容易遇到三种牌相差不多情形,需要根据牌山所剩牌,自己的牌河,甚至对手的牌河来考虑切牌 并且在做2,4,8时会遇到一个简单的3,3 ,8的二则情形,这样就基本实现了麻将的简单规则,虽然十分简陋。
最后是电脑的ai,电脑需要通过和牌概率(即牌效),和牌番数大小来综合考虑出牌,即使经过简化,也是需要一个复杂且高效的算法来完成的。
好的,先想到这里,想要做出这个还需要一点知识和技术,在这里先挖一个坑。
关于如何实现一个至简的麻将模拟程序的思考
![](https://img-home.csdnimg.cn/images/20240711042549.png)