C 德州撲克的核心規則演算法

2022-10-04 01:57:07 字數 3838 閱讀 8344

自己編寫,適用於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開啟控制台...