C++德州扑克的核心规则算法
自己编写,适用于windows,linux平台。
#include"public.h" intTexasCombine5(unsignedchar*pCard, unsignedchar*pCardColor,unsignedchar**pCardResult,unsignedchar**pColorResult) { intcount=0; //这里为了速度,没用求组合的公式 if(pCard[6]==0)//6张牌 { count=6; *pCardResult=(unsignedchar*)MyAlloc(30); *pColorResult=(unsignedchar*)MyAlloc(30); *(*pCardResult+0)=pCard[0]; *(*pColorResult+0)=pCardColor[0]; *(*pCardResult+1)=pCard[1]; *(*pColorResult+1)=pCardColor[1]; *(*pCardResult+2)=pCard[2]; *(*pColorResult+2)=pCardColor[2]; *(*pCardResult+3)=pCard[3]; *(*pColorResult+3)=pCardColor[3]; *(*pCardResult+4)=pCard[4]; *(*pColorResult+4)=pCardColor[4]; *(*pCardResult+5)=pCard[0]; *(*pColorResult+5)=pCardColor[0]; *(*pCardResult+6)=pCard[1]; *(*pColorResult+6)=pCardColor[1]; *(*pCardResult+7)=pCard[2]; *(*pColorResult+7)=pCardColor[2]; *(*pCardResult+8)=pCard[3]; *(*pColorResult+8)=pCardColor[3]; *(*pCardResult+9)=pCard[5]; *(*pColorResult+9)=pCardColor[5]; *(*pCardResult+10)=pCard[0]; *(*pColorResult+10)=pCardColor[0]; *(*pCardResult+11)=pCard[1]; *(*pColorResult+11)=pCardColor[1]; *(*pCardResult+12)=pCard[2]; *(*pColorResult+12)=pCardColor[2]; *(*pCardResult+13)=pCard[4]; *(*pColorResult+13)=pCardColor[4]; *(*pCardResult+14)=pCard[5]; *(*pColorResult+14)=pCardColor[5]; *(*pCardResult+15)=pCard[0]; *(*pColorResult+15)=pCardColor[0]; *(*pCardResult+16)=pCard[1]; *(*pColorResult+16)=pCardColor[1]; *(*pCardResult+17)=pCard[3]; *(*pColorResult+17)=pCardColor[3]; *(*pCardResult+18)=pCard[4]; *(*pColorResult+18)=pCardColor[4]; *(*pCardResult+19)=pCard[5]; *(*pColorResult+19)=pCardColor[5]; *(*pCardResult+20)=pCard[0]; *(*pColorResult+20)=pCardColor[0]; *(*pCardResult+21)=pCard[2]; *(*pColorResult+21)=pCardColor[2]; *(*pCardResult+22)=pCard[3]; *(*pColorResult+22)=pCardColor[3]; *(*pCardResult+23)=pCard[4]; *(*pColorResult+23)=pCardColor[4]; *(*pCardResult+24)=pCard[5]; *(*pColorResult+24)=pCardColor[5]; *(*pCardResult+25)=pCard[1]; *(*pColorResult+25)=pCardColor[1]; *(*pCardResult+26)=pCard[2]; *(*pColorResult+26)=pCardColor[2]; *(*pCardResult+27)=pCard[3]; *(*pColorResult+27)=pCardColor[3]; *(*pCardResult+28)=pCard[4]; *(*pColorResult+28)=pCardColor[4]; *(*pCardResult+29)=pCard[5]; *(*pColorResult+29)=pCardColor[5]; } else { count=21; *pCardResult=(unsignedchar*)MyAlloc(105); *pColorResult=(unsignedchar*)MyAlloc(105); //0 *(*pCardResult+0)=pCard[0]; *(*pColorResult+0)=pCardColor[0]; *(*pCardResult+1)=pCard[1]; *(*pColorResult+1)=pCardColor[1]; *(*pCardResult+2)=pCard[2]; *(*pColorResult+2)=pCardColor[2]; *(*pCardResult+3)=pCard[3]; *(*pColorResult+3)=pCardColor[3]; *(*pCardResult+4)=pCard[4]; *(*pColorResult+4)=pCardColor[4]; //1 *(*pCardResult+5)=pCard[0]; *(*pColorResult+5)=pCardColor[0]; *(*pCardResult+6)=pCard[1]; *(*pColorResult+6)=pCardColor[1]; *(*pCardResult+7)=pCard[2]; *(*pColorResult+7)=pCardColor[2]; *(*pCardResult+8)=pCard[3]; *(*pColorResult+8)=pCardColor[3]; *(*pCardResult+9)=pCard[5]; *(*pColorResult+9)=pCardColor[5]; //2 *(*pCardResult+10)=pCard[0]; *(*pColorResult+10)=pCardColor[0]; *(*pCardResult+11)=pCard[1]; *(*pColorResult+11)=pCardColor[1]; *(*pCardResult+12)=pCard[2]; *(*pColorResult+12)=pCardColor[2]; *(*pCardResult+13)=pCard[3]; *(*pColorResult+13)=pCardColor[3]; *(*pCardResult+14)=pCard[6]; *(*pColorResult+14)=pCardColor[6]; //3 *(*pCardResult+15)=pCard[0]; *(*pColorResult+15)=pCardColor[0]; *(*pCardResult+16)=pCard[1]; *(*pColorResult+16)=pCardColor[1]; *(*pCardResult+17)=pCard[2]; *(*pColorResult+17)=pCardColor[2]; *(*pCardResult+18)=pCard[4]; *(*pColorResult+18)=pCardColor[4]; *(*pCardResult+19)=pCard[5]; *(*pColorResult+19)=pCardColor[5]; //4 *(*pCardResult+20)=pCard[0]; *(*pColorResult+20)=pCardColor[0]; *(*pCardResult+21)=pCard[1]; *(*pColorResult+21)=pCardColor[1]; *(*pCardResult+22)=pCard[2]; *(*pColorResult+22)=pCardColor[2]; *(*pCardResult+23)=pCard[4]; *(*pColorResult+23)=pCardColor[4]; *(*pCardResult+24)=pCard[6]; *(*pColorResult+24)=pCardColor[6]; //5 *(*pCardResult+25)=pCard[0]; *(*pColorResult+25)=pCardColor[0]; *(*pCardResult+26)=pCard[1]; *(*pColorResult+26)=pCardColor[1]; *(*pCardResult+27)=pCard[2]; *(*pColorResult+27)=pCardColor[2]; *(*pCardResult+28)=pCard[5]; *(*pColorResult+28)=pCardColor[5]; *(*pCardResult+29)=pCard[6]; *(*pColorResult+29)=pCardColor[6]; //6 *(*pCardResult+30)=pCard[0]; *(*pColorResult+30)=pCardColor[0]; *(*pCardResult+31)=pCard[1]; *(*pColorResult+31)=pCardColor[1]; *(*pCardResult+32)=pCard[3]; *(*pColorResult+32)=pCardColor[3]; *(*pCardResult+33)=pCard[4]; *(*pColorResult+33)=pCardColor[4]; *(*pCardResult+34)=pCard[5]; *(*pColorResult+34)=pCardColor[5]; //7 *(*pCardResult+35)=pCard[0]; *(*pColorResult+35)=pCardColor[0]; *(*pCardResult+36)=pCard[1]; *(*pColorResult+36)=pCardColor[1]; *(*pCardResult+37)=pCard[3]; *(*pColorResult+37)=pCardColor[3]; *(*pCardResult+38)=pCard[4]; *(*pColorResult+38)=pCardColor[4]; *(*pCardResult+39)=pCard[6]; *(*pColorResult+39)=pCardColor[6]; //8 *(*pCardResult+40)=pCard[0]; *(*pColorResult+40)=pCardColor[0]; *(*pCardResult+41)=pCard[1]; *(*pColorResult+41)=pCardColor[1]; *(*pCardResult+42)=pCard[3]; *(*pColorResult+42)=pCardColor[3]; *(*pCardResult+43)=pCard[5]; *(*pColorResult+43)=pCardColor[5]; *(*pCardResult+44)=pCard[6]; *(*pColorResult+44)=pCardColor[6]; //9 *(*pCardResult+45)=pCard[0]; *(*pColorResult+45)=pCardColor[0]; *(*pCardResult+46)=pCard[1]; *(*pColorResult+46)=pCardColor[1]; *(*pCardResult+47)=pCard[4]; *(*pColorResult+47)=pCardColor[4]; *(*pCardResult+48)=pCard[5]; *(*pColorResult+48)=pCardColor[5]; *(*pCardResult+49)=pCard[6]; *(*pColorResult+49)=pCardColor[6]; //10 *(*pCardResult+50)=pCard[0]; *(*pColorResult+50)=pCardColor[0]; *(*pCardResult+51)=pCard[2]; *(*pColorResult+51)=pCardColor[2]; *(*pCardResult+52)=pCard[3]; *(*pColorResult+52)=pCardColor[3]; *(*pCardResult+53)=pCard[4]; *(*pColorResult+53)=pCardColor[4]; *(*pCardResult+54)=pCard[5]; *(*pColorResult+54)=pCardColor[5]; //11 *(*pCardResult+55)=pCard[0]; *(*pColorResult+55)=pCardColor[0]; *(*pCardResult+56)=pCard[2]; *(*pColorResult+56)=pCardColor[2]; *(*pCardResult+57)=pCard[3]; *(*pColorResult+57)=pCardColor[3]; *(*pCardResult+58)=pCard[4]; *(*pColorResult+58)=pCardColor[4]; *(*pCardResult+59)=pCard[6]; *(*pColorResult+59)=pCardColor[6]; //12 *(*pCardResult+60)=pCard[0]; *(*pColorResult+60)=pCardColor[0]; *(*pCardResult+61)=pCard[2]; *(*pColorResult+61)=pCardColor[2]; *(*pCardResult+62)=pCard[3]; *(*pColorResult+62)=pCardColor[3]; *(*pCardResult+63)=pCard[5]; *(*pColorResult+63)=pCardColor[5]; *(*pCardResult+64)=pCard[6]; *(*pColorResult+64)=pCardColor[6]; //13 *(*pCardResult+65)=pCard[0]; *(*pColorResult+65)=pCardColor[0]; *(*pCardResult+66)=pCard[2]; *(*pColorResult+66)=pCardColor[2]; *(*pCardResult+67)=pCard[4]; *(*pColorResult+67)=pCardColor[4]; *(*pCardResult+68)=pCard[5]; *(*pColorResult+68)=pCardColor[5]; *(*pCardResult+69)=pCard[6]; *(*pColorResult+69)=pCardColor[6]; //14 *(*pCardResult+70)=pCard[0]; *(*pColorResult+70)=pCardColor[0]; *(*pCardResult+71)=pCard[3]; *(*pColorResult+71)=pCardColor[3]; *(*pCardResult+72)=pCard[4]; *(*pColorResult+72)=pCardColor[4]; *(*pCardResult+73)=pCard[5]; *(*pColorResult+73)=pCardColor[5]; *(*pCardResult+74)=pCard[6]; *(*pColorResult+74)=pCardColor[6]; //15 *(*pCardResult+75)=pCard[1]; *(*pColorResult+75)=pCardColor[1]; *(*pCardResult+76)=pCard[2]; *(*pColorResult+76)=pCardColor[2]; *(*pCardResult+77)=pCard[3]; *(*pColorResult+77)=pCardColor[3]; *(*pCardResult+78)=pCard[4]; *(*pColorResult+78)=pCardColor[4]; *(*pCardResult+79)=pCard[5]; *(*pColorResult+79)=pCardColor[5]; //16 *(*pCardResult+80)=pCard[1]; *(*pColorResult+80)=pCardColor[1]; *(*pCardResult+81)=pCard[2]; *(*pColorResult+81)=pCardColor[2]; *(*pCardResult+82)=pCard[3]; *(*pColorResult+82)=pCardColor[3]; *(*pCardResult+83)=pCard[4]; *(*pColorResult+83)=pCardColor[4]; *(*pCardResult+84)=pCard[6]; *(*pColorResult+84)=pCardColor[6]; //17 *(*pCardResult+85)=pCard[1]; *(*pColorResult+85)=pCardColor[1]; *(*pCardResult+86)=pCard[2]; *(*pColorResult+86)=pCardColor[2]; *(*pCardResult+87)=pCard[3]; *(*pColorResult+87)=pCardColor[3]; *(*pCardResult+88)=pCard[5]; *(*pColorResult+88)=pCardColor[5]; *(*pCardResult+89)=pCard[6]; *(*pColorResult+89)=pCardColor[6]; //18 *(*pCardResult+90)=pCard[1]; *(*pColorResult+90)=pCardColor[1]; *(*pCardResult+91)=pCard[2]; *(*pColorResult+91)=pCardColor[2]; *(*pCardResult+92)=pCard[4]; *(*pColorResult+92)=pCardColor[4]; *(*pCardResult+93)=pCard[5]; *(*pColorResult+93)=pCardColor[5]; *(*pCardResult+94)=pCard[6]; *(*pColorResult+94)=pCardColor[6]; //19 *(*pCardResult+95)=pCard[1]; *(*pColorResult+95)=pCardColor[1]; *(*pCardResult+96)=pCard[3]; *(*pColorResult+96)=pCardColor[3]; *(*pCardResult+97)=pCard[4]; *(*pColorResult+97)=pCardColor[4]; *(*pCardResult+98)=pCard[5]; *(*pColorResult+98)=pCardColor[5]; *(*pCardResult+99)=pCard[6]; *(*pColorResult+99)=pCardColor[6]; //20 *(*pCardResult+100)=pCard[2]; *(*pColorResult+100)=pCardColor[2]; *(*pCardResult+101)=pCard[3]; *(*pColorResult+101)=pCardColor[3]; *(*pCardResult+102)=pCard[4]; *(*pColorResult+102)=pCardColor[4]; *(*pCardResult+103)=pCard[5]; *(*pColorResult+103)=pCardColor[5]; *(*pCardResult+104)=pCard[6]; *(*pColorResult+104)=pCardColor[6]; } returncount; } voidCardSort(unsignedchar*p,unsignedchar*p2,intpCount) { inti,j; unsignedcharc; for(i=0;i<pCount-1;++i) { for(j=i+1;j<pCount;++j) { if(p[i]<p[j]) { c=p[i]; p[i]=p[j]; p[j]=c; c=p2[i]; p2[i]=p2[j]; p2[j]=c; } } } } //结果值: //detail: //对于高牌,从左起第4位,分别返回五张牌从大到小的牌点值,如:0x000DA932表示A,J,10,4,3 //注:对于牌张不足5张的高牌,从左起第4位,分别返回从大到小的牌点值,无牌的位置填0,如:0x000DA000表示A,J //对于1对,在左起第4位返回牌点值,如:0x000D9870.表示A一对,8,7,6 //对于2对,在左起第4,5位返回牌点值,如:0x000D9C00.表示A一对,10一对,Q //对于3条,在左起第4位返回牌点值,如:0x0002D900,表示三条3,A,10 //对于顺子,在左起第4位返回顺子的最大牌点值,如:0x000C0000,表示K,Q,J,10,9,8 //对于同花,从左起第4位,分别返回五张牌从大到小的牌点值,如:0x000DA932表示A,J,10,4,3 //对于葫芦,从左起第4,5位返回牌点值,如:0x000DA000表示A,A,A,J,J //对于金刚,在左起第4位返回牌点值,如:0x000DA000.表示A金刚,J //对于同花顺,在左起第4位返回牌点值,如:0x00080000,表示98765的同花顺 voidTexasCalcLevel(unsignedchar*card,unsignedchar*cardColor,LPCARD_LEVELpResult) { if(card[2]==0)//两张牌 { if(card[0]==card[1])//一对 { pResult->detail=card[0]<<16; pResult->level=TEXAS_CARD_LEVEL_PAIR; } else//高牌 { pResult->detail=(card[0]<<16)+(card[1]<<12); pResult->level=TEXAS_CARD_LEVEL_HIGH; } } elseif(card[3]==0)//三张牌 { //可能是高牌,一对,三条 if(card[0]==card[1]&&card[1]==card[2])//三条 { pResult->detail=card[0]<<16; pResult->level=TEXAS_CARD_LEVEL_ARTICLE_3; } elseif(card[0]==card[1]||card[0]==card[2])//一对 { pResult->detail=(card[0]<<16)+(card[2]<<12); pResult->level=TEXAS_CARD_LEVEL_PAIR; } elseif(card[1]==card[2])//一对 { pResult->detail=(card[1]<<16)+(card[2]<<12); pResult->level=TEXAS_CARD_LEVEL_PAIR; } else//高牌 { pResult->detail=(card[0]<<16)+(card[1]<<12)+(card[2]<<8); pResult->level=TEXAS_CARD_LEVEL_HIGH; } } elseif(card[4]==0)//四张牌 { //可能是金刚,高牌,一对,两对,三条 if(card[0]==card[1]&&card[1]==card[2]&&card[2]==card[3])//金刚 { pResult->detail=card[0]<<16; pResult->level=TEXAS_CARD_LEVEL_ARTICLE_4; } else { if(card[2]==card[3]&&card[1]==card[2])//三条 { pResult->detail=(card[1]<<16)+(card[3]<<12); pResult->level=TEXAS_CARD_LEVEL_ARTICLE_3; } elseif(card[0]==card[1]&&card[1]==card[2])//三条 { pResult->detail=(card[0]<<16)+(card[3]<<12); pResult->level=TEXAS_CARD_LEVEL_ARTICLE_3; } elseif(card[0]==card[1]&&card[2]==card[3])//两对 { pResult->detail=(card[0]<<16)+(card[2]<<12); pResult->level=TEXAS_CARD_LEVEL_TWO_PAIR; } elseif(card[0]==card[1]||card[1]==card[2])//一对 { pResult->detail=(card[1]<<16)+(card[1]<<12)+(card[3]<<8); pResult->level=TEXAS_CARD_LEVEL_PAIR; } elseif(card[2]==card[3])//一对 { pResult->detail=(card[2]<<16)+(card[0]<<12)+(card[3]<<8); pResult->level=TEXAS_CARD_LEVEL_PAIR; } else//高牌 { pResult->detail=(card[0]<<16)+(card[1]<<12)+(card[2]<<8)+(card[3]<<4); pResult->level=TEXAS_CARD_LEVEL_HIGH; } } } else//五张牌 { if(card[0]==card[1]&&card[1]==card[2]&&card[2]==card[3])//金刚 { pResult->detail=(card[1]<<16)+(card[4]<<12); pResult->level=TEXAS_CARD_LEVEL_ARTICLE_4; } elseif(card[4]==card[1]&&card[1]==card[2]&&card[2]==card[3])//金刚 { pResult->detail=(card[1]<<16)+(card[0]<<12); pResult->level=TEXAS_CARD_LEVEL_ARTICLE_4; } elseif(card[0]==card[1]&&card[1]==card[2]&&card[3]==card[4])//葫芦 { pResult->detail=(card[0]<<16)+(card[3]<<12); pResult->level=TEXAS_CARD_LEVEL_FULL_HOUSE; } elseif(card[0]==card[1]&&card[2]==card[3]&&card[3]==card[4])//葫芦 { pResult->detail=(card[2]<<16)+(card[0]<<12); pResult->level=TEXAS_CARD_LEVEL_FULL_HOUSE; } elseif((card[0]-card[1]==1||card[0]-card[4]==12) &&card[1]-card[2]==1 &&card[2]-card[3]==1 &&card[3]-card[4]==1 )//同花顺或者顺子 { if(cardColor[0]==cardColor[1] &&cardColor[0]==cardColor[2] &&cardColor[0]==cardColor[3] &&cardColor[0]==cardColor[4] )//同花顺 { if(card[0]==0x0D)//12345小于23456,所以12345中最大的是5 { pResult->detail=card[1]<<16; pResult->level=TEXAS_CARD_LEVEL_STRAIGHT_FLUSH; } else { pResult->detail=card[0]<<16; pResult->level=TEXAS_CARD_LEVEL_STRAIGHT_FLUSH; } } else//顺子 { pResult->level=TEXAS_CARD_LEVEL_STRAIGHT; if(card[0]==0x0D)//12345小于23456,所以12345中最大的是5 { pResult->detail=card[1]<<16; } else { pResult->detail=card[0]<<16; } } } elseif(cardColor[0]==cardColor[1] &&cardColor[0]==cardColor[2] &&cardColor[0]==cardColor[3] &&cardColor[0]==cardColor[4] )//同花或者同花顺 { pResult->detail=0; if(card[0]-card[1]==1 &&card[1]-card[2]==1 &&card[2]-card[3]==1 &&card[3]-card[4]==1 )//同花顺 { if(card[0]==0x0D)//12345小于23456,所以12345中最大的是5 { pResult->detail=card[1]<<16; pResult->level=TEXAS_CARD_LEVEL_STRAIGHT_FLUSH; } else { pResult->detail=card[0]<<16; pResult->level=TEXAS_CARD_LEVEL_STRAIGHT_FLUSH; } } else//同花 { pResult->detail=((card[0]<<16)+(card[1]<<12)+(card[2]<<8)+(card[3]<<4)+card[4]); pResult->level=TEXAS_CARD_LEVEL_FLUSH; } } else//三条,两队,一对,高牌 { if(card[0]==card[1]&&card[1]==card[2])//三条 { pResult->detail=(card[2]<<16)+(card[3]<<12)+(card[4]<<8); pResult->level=TEXAS_CARD_LEVEL_ARTICLE_3; } elseif(card[1]==card[2]&&card[2]==card[3])//三条 { pResult->detail=(card[2]<<16)+(card[0]<<12)+(card[4]<<8); pResult->level=TEXAS_CARD_LEVEL_ARTICLE_3; } elseif(card[2]==card[3]&&card[3]==card[4])//三条 { pResult->detail=(card[2]<<16)+(card[0]<<12)+(card[1]<<8); pResult->level=TEXAS_CARD_LEVEL_ARTICLE_3; } elseif(card[0]==card[1]&&card[2]==card[3])//两对 { pResult->detail=(card[0]<<16)+(card[2]<<12)+(card[4]<<8); pResult->level=TEXAS_CARD_LEVEL_TWO_PAIR; } elseif(card[0]==card[1]&&card[3]==card[4])//两对 { pResult->detail=(card[0]<<16)+(card[3]<<12)+(card[2]<<8); pResult->level=TEXAS_CARD_LEVEL_TWO_PAIR; } elseif(card[1]==card[2]&&card[3]==card[4])//两对 { pResult->detail=(card[1]<<16)+(card[3]<<12)+(card[0]<<8); pResult->level=TEXAS_CARD_LEVEL_TWO_PAIR; } elseif(card[0]==card[1])//一对 { pResult->detail=(card[0]<<16)+(card[2]<<12)+(card[3]<<8)+(card[4]<<4); pResult->level=TEXAS_CARD_LEVEL_PAIR; } elseif(card[1]==card[2])//一对 { pResult->detail=(card[1]<<16)+(card[0]<<12)+(card[3]<<8)+(card[4]<<4); pResult->level=TEXAS_CARD_LEVEL_PAIR; } elseif(card[2]==card[3])//一对 { pResult->detail=(card[2]<<16)+(card[0]<<12)+(card[1]<<8)+(card[4]<<4); pResult->level=TEXAS_CARD_LEVEL_PAIR; } elseif(card[3]==card[4])//一对 { pResult->detail=(card[3]<<16)+(card[0]<<12)+(card[1]<<8)+(card[2]<<4); pResult->level=TEXAS_CARD_LEVEL_PAIR; } else//高牌 { pResult->detail=(card[0]<<16)+(card[1]<<12)+(card[2]<<8)+(card[3]<<4)+card[4]; pResult->level=TEXAS_CARD_LEVEL_HIGH; } } } } //参数值:0表示为空牌,c1,c2是玩家手上的牌,其它是公共牌,公共牌允许为空牌,但所有空牌必须放在最后 //返回值:如果牌张数小于2,则返回0,否则返回1 intTexasCalcLevelEx(unsignedcharc1,unsignedcharc2, unsignedcharc3,unsignedcharc4,unsignedcharc5,unsignedcharc6,unsignedcharc7 ,LPCARD_LEVELpResult) { unsignedcharcard[7]; unsignedcharcardColor[7]; if(c1==0||c2==0)//c1,c2原则上不能为空牌 { return0; } //得到全部的牌点 card[0]=c1&0x0F; card[1]=c2&0x0F; card[2]=c3&0x0F; card[3]=c4&0x0F; card[4]=c5&0x0F; card[5]=c6&0x0F; card[6]=c7&0x0F; //得到全部的牌颜色 cardColor[0]=c1>>4; cardColor[1]=c2>>4; cardColor[2]=c3>>4; cardColor[3]=c4>>4; cardColor[4]=c5>>4; cardColor[5]=c6>>4; cardColor[6]=c7>>4; CardSort(card,cardColor,7); if(card[5])//六张牌或者七张牌 { unsignedchar*allCardCombResult; unsignedchar*allCardCombResultColor; //先获取全部的5张牌组合 intcardCombCount=TexasCombine5(card,cardColor,&allCardCombResult,&allCardCombResultColor); inti; CARD_LEVELcardLevel; pResult->detail=pResult->level=0; //逐个组合计算等级,并取最大值 for(i=0;i<cardCombCount;++i) { TexasCalcLevel(allCardCombResult+i*5,allCardCombResultColor+i*5,&cardLevel); ////打印中间结果 //charbuff[32]; //allCardCombResult[i*5]+=allCardCombResultColor[i*5]<<4; //allCardCombResult[i*5+1]+=allCardCombResultColor[i*5+1]<<4; //allCardCombResult[i*5+2]+=allCardCombResultColor[i*5+2]<<4; //allCardCombResult[i*5+3]+=allCardCombResultColor[i*5+3]<<4; //allCardCombResult[i*5+4]+=allCardCombResultColor[i*5+4]<<4; //GLog("%s%s,%s,%s,%s,%s\r\n",TexasGetCardLevelDesc(&cardLevel,buff) //,CardGetName(allCardCombResult[i*5]) //,CardGetName(allCardCombResult[i*5+1]) //,CardGetName(allCardCombResult[i*5+2]) //,CardGetName(allCardCombResult[i*5+3]) //,CardGetName(allCardCombResult[i*5+4]) //); if(cardLevel.level>pResult->level||cardLevel.level==pResult->level&&cardLevel.detail>=pResult->detail) { pResult->level=cardLevel.level; pResult->detail=cardLevel.detail; } } MyFree(allCardCombResult); MyFree(allCardCombResultColor); } else { TexasCalcLevel(card,cardColor,pResult); } return1; } //获取牌级描述,pBuffer必须先分配好足够空间,至少24字节 char*TexasGetCardLevelDesc(LPCARD_LEVELpCardLevel,char*pBuffer) { switch(pCardLevel->level) { caseTEXAS_CARD_LEVEL_HIGH: sprintf(pBuffer,"高牌:%s,%s,%s,%s,%s" ,CardGetCardPointName((pCardLevel->detail>>16)&0xF) ,CardGetCardPointName((pCardLevel->detail>>12)&0xF) ,CardGetCardPointName((pCardLevel->detail>>8)&0xF) ,CardGetCardPointName((pCardLevel->detail>>4)&0xF) ,CardGetCardPointName((pCardLevel->detail>>0)&0xF) ); break; caseTEXAS_CARD_LEVEL_PAIR: sprintf(pBuffer,"一对:%s,(%s,%s,%s)" ,CardGetCardPointName((pCardLevel->detail>>16)&0xF) ,CardGetCardPointName((pCardLevel->detail>>12)&0xF) ,CardGetCardPointName((pCardLevel->detail>>8)&0xF) ,CardGetCardPointName((pCardLevel->detail>>4)&0xF) ); break; caseTEXAS_CARD_LEVEL_TWO_PAIR: sprintf(pBuffer,"两对:%s,%s,(%s)" ,CardGetCardPointName((pCardLevel->detail>>16)&0xF) ,CardGetCardPointName((pCardLevel->detail>>12)&0xF) ,CardGetCardPointName((pCardLevel->detail>>8)&0xF) ); break; caseTEXAS_CARD_LEVEL_ARTICLE_3: sprintf(pBuffer,"三条:%s,(%s,%s)" ,CardGetCardPointName((pCardLevel->detail>>16)&0xF) ,CardGetCardPointName((pCardLevel->detail>>12)&0xF) ,CardGetCardPointName((pCardLevel->detail>>8)&0xF) ); break; caseTEXAS_CARD_LEVEL_STRAIGHT: sprintf(pBuffer,"顺子:%s" ,CardGetCardPointName((pCardLevel->detail>>16)&0xF) ); break; caseTEXAS_CARD_LEVEL_FLUSH: sprintf(pBuffer,"同花:%s,%s,%s,%s,%s" ,CardGetCardPointName((pCardLevel->detail>>16)&0xF) ,CardGetCardPointName((pCardLevel->detail>>12)&0xF) ,CardGetCardPointName((pCardLevel->detail>>8)&0xF) ,CardGetCardPointName((pCardLevel->detail>>4)&0xF) ,CardGetCardPointName((pCardLevel->detail>>0)&0xF) ); break; caseTEXAS_CARD_LEVEL_FULL_HOUSE: sprintf(pBuffer,"葫芦:%s,%s" ,CardGetCardPointName((pCardLevel->detail>>16)&0xF) ,CardGetCardPointName((pCardLevel->detail>>12)&0xF) ); break; caseTEXAS_CARD_LEVEL_ARTICLE_4: sprintf(pBuffer,"金刚:%s,(%s)" ,CardGetCardPointName((pCardLevel->detail>>16)&0xF) ,CardGetCardPointName((pCardLevel->detail>>12)&0xF) ); break; caseTEXAS_CARD_LEVEL_STRAIGHT_FLUSH: sprintf(pBuffer,"同花顺:%s" ,CardGetCardPointName((pCardLevel->detail>>16)&0xF) ); break; default: strcpy(pBuffer,"未知"); break; } GLog("TexasGetCardLevelDesc--%s\r\n",pBuffer); returnpBuffer; }