麻将 听牌胡牌算法如何写

麻将 听牌胡牌算法怎么写
最普通的就行

就是14张牌       由刻子(AAA)或顺子(ABC)组成4对   在加一对的牌

主要是听牌不太会写           胡牌的代码有的话就更好了


------解决方案--------------------
AI
------解决方案--------------------
各地麻将规则不同地 就最简单的办法递归吧
------解决方案--------------------
/***************************************************************
* 文件名:hu.cpp *
* *
* 功 能:演示一个简洁明了的递归函数——判断[麻将]的和牌。 *
* *
* 说 明:1. 此函数不判断七对和十三幺,读者不难自行判断; *
*     同时由于麻将的规则各不相同,也请读者自己添加和修改。*
* *
*     2. 其他与麻将类似的游戏,如[字牌](又称跑胡子、 *
*     二七十)等牌类游戏,也可采用类似的判断函数。 *
* *
* 环 境: VC 6.0, 但符合ANSI C标准,随便移植 ^_^ *
* *
* 作 者:shyworm(怕怕虫) *
* E_Mail: shyworm@sina.com *
***************************************************************/
#include <stdio.h>

int Hu(int PAI[38]);
int Remain(int PAI[38]);

int main()
{
// 把一副牌放在下面的数组里,可以任意填入数字来测试函数正确与否。
// 为了方便,PAI[0],PAI[10],PAI[20],PAI[30]都弃之不用,并且必须
// 置为0,千万注意!
int PAI[38] = { 0,
1,1,1,0,1,1,1,0,0, // PAI[ 1- 9] 壹万~玖万的个数
0,
0,0,0,0,0,3,0,0,0, // PAI[11-19] 壹铜~玖铜的个数
0,
0,0,0,0,0,0,0,0,0, // PAI[21-29] 壹条~玖条的个数
0,
0,1,1,1,0,0,0 // PAI[31-37] 东南西北中发白的个数
};

// 请务必先排除“七对” 和“十三幺”,由于简单,所以不提供了
// if( QIDUI(PAI) )...
// if( SHISANYAO(PAI) )...

if( Hu(PAI) )
printf( "哈!我和啦!\n ");
else
printf( "哎,和不成!\n ");

return 1;
}

// 判断和牌的递归函数,不考虑“七对” 和“十三幺”。因为如果
// 把“七对” 和“十三幺”的判断放在递归函数里,将得不偿失。
int Hu(int PAI[38])
{
static int JIANG = 0; // 将牌标志,即牌型“三三三三二”中的“二”

if( !Remain(PAI) ) return 1; // 递归退出条件:如果没有剩牌,则和牌返回。

for(int i=1;!PAI[i]&&i <38;i++); // 找到有牌的地方,i就是当前牌, PAI[i]是个数