德州扑克中比较重要的一个算法就是计算牌面的得分,不仅仅关乎概率计算的结果,同时也需要很高的性能。蒙特卡洛算法计算的次数越多结果越准确,因此算法的性能至关重要。下面是一个高性能的牌面java计算算法。
参数介绍:
1)cards 需要计算分值的牌
2) nCards 需要计算牌的张数public static int evaluate(long cards, int nCards) {
int retval = 0, four_mask, three_mask, two_mask;
//本函数支持1-7张牌的计算
//按照牌色分开
int sc = (int) ((cards >> (CLUB_OFFSET)) & 0x1fffL);
int sd = (int) ((cards >> (DIAMOND_OFFSET)) & 0x1fffL);
int sh = (int) ((cards >> (HEART_OFFSET)) & 0x1fffL);
int ss = (int) ((cards >> (SPADE_OFFSET)) & 0x1fffL);
int ranks = sc | sd | sh | ss;
int n_ranks = nBitsTable[ranks];
int n_dups = ((int) (nCards - n_ranks));
//检查顺子、同花、同花顺并返回最佳牌面得分
if (n_ranks >= 5) {
if (nBitsTable[ss] >= 5) {
if (straightTa