自己編寫,適用於windows,linux平台。
#include "public.h"
int texascombine5(unsigned char* pcard,
unsigned char* pcardcolor, unsigned char** pcardresult, unsigned char** pcolorresult)
else
return count;}
void cardsort(unsigned char* p, unsigned char* p2, int pcount)}}}
//結果值:
//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的同花順
void texascalclevel(unsigned char *card, unsigned char *cardcolor, lpcard_level presult)
else//高牌
} else if (card[3] == 0)//三張牌
else if (card[0] == card[1] || card[0] == card[2])//一對
else if (card[1] == card[2])//一對
else//高牌
} else if (card[4] == 0)//四張牌
else
else if (card[0] == card[1] && card[1] == card[2])//三條
else if (card[0] == card[1] && card[2] == card[3])//兩對
else if (card[0] == card[1] || card[1] == card[2])//一對
else if (card[2] == card[3])//一對
else//高牌
}} else //五張牌
else if (card[4] == card[1] && card[1] == card[2] && card[2] == card[3])//金剛
else if (card[0] == card[1] && card[1] == card[2] && card[3] == card[4])//葫蘆
else if (card[0] == card[1] && card[2] == card[3] && card[3] == card[4])//葫蘆
else if ((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
)//同花順或者順子
else
}else//順子
else}}
else if (cardcolor[0] == cardcolor[1]
&& cardcolor[0] == cardcolor[2]
&& cardcolor[0] == cardcolor[3]
&& cardcolor[0] == cardcolor[4]
)//同花或者同花順
else
}else//同花
}else //三條,兩隊,一對,高牌
else if (card[1] == card[2] && card[2] == card[3])//三條
else if (card[2] == card[3] && card[3] == card[4])//三條
else if (card[0] == card[1] && card[2] == card[3])//兩對
else if (card[0] == card[1] && card[3] == card[4])//兩對
else if (card[1] == card[2] && card[3] == card[4])//兩對
else if (card[0] == card[1])//一對
else if (card[1] == card[2])//一對
else if (card[2] == card[3])//一對
else if (card[3] == card[4])//一對
else//高牌}}}
//引數值:0表示為空牌,c1,c2是玩家手上的牌,其它是公共牌,公共牌允許為空牌,但所有空牌必須放在最後
//返回值:如果牌張數小於2,則返回0,否則返回1
int texascalclevelex(unsigned char c1, unsigned char c2,
unsigned char c3, unsigned char c4, unsigned char c5, unsigned char c6, unsigned char c7
, lpcard_level presult)
//得到全部的牌點
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]) //六張牌或者七張牌
}myfree(allcardcombresult);
myfree(allcardcombresultcolor);
} else
return 1;}
//獲取牌級描述,pbuffer必須先分配好足夠空間,至少24位元組
char* texasgetcardleveldesc(lpcard_level pcardlevel, char* pbuffer)
glog("texasgetcardleveldesc--%s\r\n", pbuffer);
return pbuffer;
}本文標題: c++德州撲克的核心規則演算法
本文位址:
德州撲克和短牌的演算法分析
最近由於公司的業務的擴充套件 增加短牌玩法,這個短牌演算法我在github上找很長時間都沒有找到開源了。最後我只能自己寫短牌的演算法,說的挺哄人的其實我也是有參考德州撲克的演算法的。紅桃a是放在int型別中 int是32位元組記憶體存放 高16存放牌的大小 顏色 牌的值 低8位存放牌對映數的大小 0...
新的娛樂專案 德州撲克
喜歡了十多年的遊戲 星際爭霸 隨著比賽的銳減,真得已經沒落了,以前還能找到幾個老友打上兩把,現在真的是沒人玩了,所以一直想找一款好玩 競技性強 並且耐玩的遊戲來替代星際。很早就聽說不少的體育明星 電子競技 如羅納爾多 納達爾 星際界的boxer grrrr lx pj等 在退役之後都轉戰德州撲克,曾...
計算6 德州撲克各個牌型的概率
為了回答該知乎問題 而寫就的程式。6 德州撲克的規則,就是在傳統52張牌德州撲克的基礎上,去掉了2到5,只留下6到a共計36張牌 另外最小的順子就成了a6789。此外,牌型大小變成了 同花 葫蘆 三條 順子。其他規則都不變。新的概率表 根據本程式跑出的結果 變為 chrome瀏覽器按f12開啟控制台...