先將牌轉化字串,牌和字元的對照如下
//牌和**中字元的對應
//3:3, 4:4, 5:5, 6:6, 7:7, 8:8, 9:9, a:10, b:j, c:q, d:k, e:a, f:2, g:王
看**:
//.h標頭檔案
#ifndef checkpoker_h
#define checkpoker_h
#pragma once
#include
#include
#include
#include
using
namespace
std;
//需要連續多少才合法
const
int neednum[5] = ;
//最多能帶多少牌
const
int mosttake[5] = ;
//牌和**中字元的對應
//3:3, 4:4,5:5,6:6,7:7,8:8,9:9,a:10,b:j, c:q, d:k, e:a, f:2, g:王
//牌的型別
enum pokertype ;
//檢測牌型別函式返回的結果
class checkresult
};class checkpoker ;
#endif
//.cpp原始檔
#include "checkpoker.h"
checkpoker::checkpoker()
checkpoker::~checkpoker()
//從有序的字串中查詢數量為num的字元
void checkpoker::findcharbynumber(char *retstr, std::string &srcstr, int num) else
if (maxnumber == num)
}retstr[retnum] = 0;
}//檢測字串中的字元是否連續
bool checkpoker::checkcharisconnect(const
char *str)
if (str[i - 1] != (str[i] - 1))
}return
true;
}//檢測牌的型別
checkresult checkpoker::checktype(std::string &pokerlist)
//判斷王炸
if (2 == pokernum && strcmp("gg", pokerlist.c_str()) == 0)
//將字串排序
sort(pokerlist.begin(), pokerlist.end());
//依次判斷是否是包含相同的4個,3個,2個, 1個牌
char retstr[15];
for (int i = 4; i > 0; i--)
if (false == checkcharisconnect(retstr))
if (connectnum * mosttake[i] < pokernum - connectnum * i)
/下面判讀細節
if (4 == i) else
if (3 == i) else
if (0 == lastpokernum || lastpokernum == connectnum) else
//有單牌,不合法
continue;
}} else
if (2 == i)
} else
if (1 == i) }}
ret = checkresult(pokertype::illegal);
return ret;
}//判斷牌的大小
bool checkpoker::pokercmp(std::string &a, std::string &b) else
if (pokertype::bomb == aret.ptype && pokertype::bomb == bret.ptype) else
if (pokertype::bomb == aret.ptype || pokertype::bomb == bret.ptype)
if (0 == b.length())
if (alen != blen)
if (aret.ptype == bret.ptype)
return
false;
}
鬥地主演算法1判斷牌型
using unityengine using system.collections.generic 牌型 3 4 5 6 7 8 9 10 11 j 12 q 13 k 14 a 15 2 16 小王 17 大王 public class ddz cardtype 是否是單張 public sta...
鬥地主手牌的統計
手牌統計指統計手裡的牌,單張牌,對子牌,三條,四條牌的乙個整體統計。具體講返回乙個list的字典物件。1.首先對牌的資料進行有效排序 2.遍歷手牌 2.1.1 牌型一致,將牌push進臨時牌組 2.1.2 牌型不一樣,將快取牌組加入牌組字典,重置牌組,將新牌push進臨時牌組 2.2.1 最後一張牌...
鬥地主中跟牌邏輯分析
qlistmethod playbeathand hand hand 壓雙排 else if hand.gethandtype hand pair 如果壓雙牌,盡量從雙牌中挑 player nextplayer m player getnextplayer 從手牌中查詢相同牌型 qlist beat...