一个快速计算德州扑克牌型的方法.
只有生成图那个地方是关键, 看懂了就全懂了
在车上写的, 只写了 同花和 顺子,葫芦, 似乎没什么问题
牌用16进制表示 , 高4位 是颜色位, 低4位是数值位
/*
黑桃从 0x02开始,
红心从 0x12 开始
16进制的高位 表示颜色 , 低位表示牌值
*/
enum CardColor{
enum_spade = 0x0, // 黑桃
enum_heart = 0x10 , //红心
enum_diamond = 0x20 , //方块
enum_club = 0x30 //梅花
};
struct card_map{
enum {enum_CardWithoutColor = 15, enum_CardWithColor = 4};
card_map(){}
void clear(){
memset(__mapWithColor,0,enum_CardWithColor * enum_CardWithoutColor * sizeof(char));
memset(__mapWithoutColor,0 , enum_CardWithoutColor);
}
static int getCardColor(char card){
return card >> 4 & 0x0f;
}
static int getCardValue(char card){
return card & 0x0f;
}
bool genMap(char * inCards , int iLen){
if(NULL == inCards || iLen == 0)
return false;
clear();
char card = 0;
for(int i = 0 ; i < iLen ; ++i){
card = inCards[i];
// 牌没有 0 ,从0x02开始
if(card == 0)
continue;
int iColorIndex = getCardColor(card);
int iValue = getCardValue(card);
__mapWithoutColor[iValue]++;
__mapWithColor[iColorIndex][0]++;
__mapWithColor[iColorIndex]