胡牌判断函数
2008-04-09 04:03:49来源:互联网 阅读 ()
胡牌判断函数
[code]//----------------unt_mainwin.cpp---------------------------------------------------------
/*-----------------------------------------------------------------------------------------
*该函数判断手牌有没有胡牌,手牌的数量一定为[2,5,8,11,14]
*当手牌数量为14时,判断是否有特殊牌型的胡牌[十三么,七对,全不靠]
*当不存在以上牌型时,用递归算法判断是否存在一般的胡牌牌型
*
*作者声明:本代码为学习时编写的代码,大家可以随意转贴及编译修改
*但不得用于商业用途和赌博
*/
//-----------------------------------------------------------------------------------------------
int TWanJia::IsWin()
{
int i,dblpos,dblcount;
if(this->PaiCount==13) //先处理特殊牌型,七对、十三么及全不靠
{
if((this->PaiInHand[0]==this->PaiInHand[1])&(this->PaiInHand[2]==this->PaiInHand[3])
&(this->PaiInHand[4]==this->PaiInHand[5])&(this->PaiInHand[6]==this->PaiInHand[7])
&(this->PaiInHand[8]==this->PaiInHand[9])&(this->PaiInHand[10]==this->PaiInHand[11])
&(this->PaiInHand[12]==this->PaiInHand[13]))
return SevenDbl; //七对胡了
dblcount=0;
for(i=0;i<13;i ) //以下判断手牌中对子的数量及位置
{
if(this->PaiInHand[i]==this->PaiInHand[i 1])
{
dblcount ;
}
if(dblcount>1) break; //如果手牌中含有两个对子(或一个刻子)以上,只能胡基本牌型
}
if(dblcount==1) //有一个对子的十三张手牌,可能为十三么
{
/***********************************************
十三么牌型必须是么九牌和字牌组成的十四张牌,按牌的数值定义
手牌数组PaiInHand中,只要没有1~7,10~16,19~25这些值,
则可以断定,该数组为十三么
*/
int IsThirteen=1;
for(i=0;i<14;i )
{
if(this->PaiInHand[i]>0&&this->PaiInHand[i]<8)
{
IsThirteen=0;
break;
}
else if(this->PaiInHand[i]>9&&this->PaiInHand[i]<17)
{
IsThirteen=0;
break;
}
else if(this->PaiInHand[i]>18&&this->PaiInHand[i]<26)
{
IsThirteen=0;
break;
}
}
if(IsThirteen) return ThirteenSmall;
} //end of 十三么
if(dblcount==0)//没有对子,可能是全不靠
{
/*-------------------------------------------
十三不靠牌型为万筒条三个花色的147,258,369加上字牌的七张牌共16张
的任意十四张组成的胡牌,147,258,369的花色可以为任意花色,但不能有两副
出现相同的序数,如一万,四万,一条,四条是不能组成胡牌的。
判定的算法是:
先确定所以序数牌(不是字牌)的个数;
如果序数牌个数大于9,则返回错误;
如果有吃牌的序列(存在两张牌可以吃掉另外一张牌),返回错误;
对于所有的序数牌,自第一个开始,分别与其后的所有牌值mod9得
到的值比较,如果存在相等,返回错误。
如果上面判断都通过,则为十三不靠
*/
int NoWordPos=14;
for(i=13;i>=0;i--)
{
if(this->PaiInHand[i]<=26)
{
NoWordPos=i;
break;
}
}
if(NoWordPos<=8) //如果非字牌有9个以上,肯定不能胡全不靠
{
int IsThirteenSingle=1;
for(i=0;i
if((this->PaiInHand[i 1]<=(this->PaiInHand[i] 2))&(this->PaiInHand[i]%9==this->PaiInHand[i 1]%9))
{
IsThirteenSingle=0;
break;
}
}
if(IsThirteenSingle)
{
for(i=0;i
for(int j=0;j<=NoWordPos;j )
{
if(this->PaiInHand[i]==this->PaiInHand[j]%9)
{
IsThirteenSingle=0;
break;
}
}
}
}
if(IsThirteenSingle) return ThirteenSingle;
}
} //end of 不靠
}
int TempPai[33];
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:为好的UI选择合适的工具
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash