#include "StdAfx.h" #include "GameLogic.h" ////////////////////////////////////////////////////////////////////////// //扑克数据 BYTE CGameLogic::m_cbCardListData[52]= { //0x1C,0x1D,0x3B,0x3C,0x3D,0x09,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x0A,0x0B,0x0C,0x0D, //方块 A - K //0x3A,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B, //梅花 A - K //0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D, //红桃 A - K //0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39 //黑桃 A - K 0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D, //方块 A - K 0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D, //梅花 A - K 0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D, //红桃 A - K 0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D //黑桃 A - K }; ////////////////////////////////////////////////////////////////////////// //构造函数 CGameLogic::CGameLogic() { } //析构函数 CGameLogic::~CGameLogic() { } //获取类型 BYTE CGameLogic::GetCardType(BYTE cbCardData[], BYTE cbCardCount) { ASSERT(cbCardCount==MAX_COUNT); ////炸弹牌型 //BYTE bSameCount = 0; //SortCardList(cbCardData,cbCardCount); //BYTE bSecondValue = GetCardValue(cbCardData[MAX_COUNT/2]); //for(BYTE i=0;i10) { bKingCount++; } else if(GetCardValue(cbCardData[i])==10) { bTenCount++; } } if(bKingCount==MAX_COUNT) return OX_FIVEKING; else if(bKingCount==MAX_COUNT-1 && bTenCount==1) return OX_FOURKING; ////葫芦牌型 //if(bSameCount==3) //{ // if((bSecondValue!=GetCardValue(cbCardData[3]) && GetCardValue(cbCardData[3])==GetCardValue(cbCardData[4])) // ||(bSecondValue!=GetCardValue(cbCardData[1]) && GetCardValue(cbCardData[1])==GetCardValue(cbCardData[0]))) // return OX_THREE_SAME; //} BYTE bTemp[MAX_COUNT]; BYTE bSum=0; for (BYTE i=0;i10)?(bTemp[i]+bTemp[j]-10):(bTemp[i]+bTemp[j]); } } } return OX_VALUE0; } //获取倍数 BYTE CGameLogic::GetTimes(BYTE cbCardData[], BYTE cbCardCount) { if(cbCardCount!=MAX_COUNT)return 0; BYTE bTimes=GetCardType(cbCardData,MAX_COUNT); if(bTimes<7)return 1; else if(bTimes==7)return 2; else if(bTimes==8)return 3; else if(bTimes==9)return 4; else if(bTimes==10)return 5; else if(bTimes==OX_THREE_SAME)return 5; else if(bTimes==OX_FOUR_SAME)return 5; else if(bTimes==OX_FOURKING)return 5; else if(bTimes==OX_FIVEKING)return 5; return 0; } //获取牛牛 bool CGameLogic::GetOxCard(BYTE cbCardData[], BYTE cbCardCount) { ASSERT(cbCardCount==MAX_COUNT); //设置变量 BYTE bTemp[MAX_COUNT],bTempData[MAX_COUNT]; CopyMemory(bTempData,cbCardData,sizeof(bTempData)); BYTE bSum=0; for (BYTE i=0;i0); return (sum%10==0); } //排列扑克 void CGameLogic::SortCardList(BYTE cbCardData[], BYTE cbCardCount) { //转换数值 BYTE cbLogicValue[MAX_COUNT]; for (BYTE i=0;i10)?(10):bCardValue; } //对比扑克 bool CGameLogic::CompareCard(BYTE cbFirstData[], BYTE cbNextData[], BYTE cbCardCount,BOOL FirstOX,BOOL NextOX) { if(FirstOX!=NextOX)return (FirstOX>NextOX); //比较牛大小 if(FirstOX==TRUE) { //获取点数 BYTE cbNextType=GetCardType(cbNextData,cbCardCount); BYTE cbFirstType=GetCardType(cbFirstData,cbCardCount); //点数判断 if (cbFirstType!=cbNextType) return (cbFirstType>cbNextType); switch(cbNextType) { case OX_FOUR_SAME: //炸弹牌型 case OX_THREE_SAME: //葫芦牌型 { //排序大小 BYTE bFirstTemp[MAX_COUNT],bNextTemp[MAX_COUNT]; CopyMemory(bFirstTemp,cbFirstData,cbCardCount); CopyMemory(bNextTemp,cbNextData,cbCardCount); SortCardList(bFirstTemp,cbCardCount); SortCardList(bNextTemp,cbCardCount); return GetCardValue(bFirstTemp[MAX_COUNT/2])>GetCardValue(bNextTemp[MAX_COUNT/2]); break; } } } //排序大小 BYTE bFirstTemp[MAX_COUNT],bNextTemp[MAX_COUNT]; CopyMemory(bFirstTemp,cbFirstData,cbCardCount); CopyMemory(bNextTemp,cbNextData,cbCardCount); SortCardList(bFirstTemp,cbCardCount); SortCardList(bNextTemp,cbCardCount); //比较数值 BYTE cbNextMaxValue=GetCardValue(bNextTemp[0]); BYTE cbFirstMaxValue=GetCardValue(bFirstTemp[0]); if(cbNextMaxValue!=cbFirstMaxValue)return cbFirstMaxValue>cbNextMaxValue; //比较颜色 return GetCardColor(bFirstTemp[0]) > GetCardColor(bNextTemp[0]); return false; } //////////////////////////////////////////////////////////////////////////