#ifndef _13S_GAME_LOGIC_HEAD_FILE_ #define _13S_GAME_LOGIC_HEAD_FILE_ #pragma once #include "13S_CMD.h" ////////////////////////////////////////////////////////////////////////// //扑克类型; #define SSS_CT_INVALID 0 //错误类型; #define SSS_CT_SINGLE 1 //单牌类型; #define SSS_CT_ONE_DOUBLE 2 //只有一对; #define SSS_CT_FIVE_TWO_DOUBLE 3 //两对牌型; #define SSS_CT_THREE 4 //三张牌型; #define SSS_CT_FIVE_MIXED_FLUSH_NO_A 5 //没A杂顺; #define SSS_CT_FIVE_MIXED_FLUSH_FIRST_A 6 //A在前顺子; #define SSS_CT_FIVE_MIXED_FLUSH_BACK_A 7 //A在后顺子; #define SSS_CT_FIVE_FLUSH 8 //同花五牌; #define SSS_CT_FIVE_THREE_DEOUBLE 9 //葫芦(三条一对); #define SSS_CT_FIVE_FOUR_ONE 10 //铁支(四带一张); #define SSS_CT_FIVE_STRAIGHT_FLUSH_NO_A 11 //没A同花顺; #define SSS_CT_FIVE_STRAIGHT_FLUSH_FIRST_A 12 //A在前同花顺; #define SSS_CT_FIVE_STRAIGHT_FLUSH_BACK_A 13 //A在后同花顺; #define SSS_CT_FIVE_BOMB 44 //五同类型; //特殊牌型; #define SSS_CT_THREE_STRAIGHT 14 //三顺子(三墩都是单顺); #define SSS_CT_THREE_FLUSH 15 //三同花(三墩都是同花); #define SSS_CT_SIXPAIR 16 //六对半(六个对子余一张); #define SSS_CT_FIVEPAIR_THREE 17 //五对冲三(五个对子,其余三张相同); #define SSS_CT_FOUR_THREESAME 18 //四套冲三(四个三张相同余一张); #define SSS_CT_SAME_COLOR 19 //凑一色(都是方块红心或黑桃梅花); #define SSS_CT_ALL_SMALL 20 //全小(2-8); #define SSS_CT_ALL_BIG 21 //全大(8-A); #define SSS_CT_THREE_BOMB 22 //三分天下(三套炸弹); #define SSS_CT_THREE_STRAIGHTFLUSH 23 //三同花顺; #define SSS_CT_TWELVE_KING 24 //十二皇族(全是J、Q、K、A); #define SSS_CT_THIRTEEN 25 //十三水,一条龙( A至K齐全); #define SSS_CT_THIRTEEN_FLUSH 26 //同花十三水,至尊青龙(同花且A至K齐全的牌); //数值掩码; #define SSS_CARD_MASK_COLOR 0xF0 //花色掩码; #define SSS_CARD_MASK_VALUE 0x0F //数值掩码; #define SSS_CARD_DW 16 #define SSS_CARD_XW 15 //扑克数目 #define SSS_CARD_COUNT 54 //扑克数目 //分析结构 struct tag13SAnalyseData { uint8 bOneCount; //单张数目 uint8 bTwoCount; //两张数目 uint8 bThreeCount; //三张数目 uint8 bFourCount; //四张数目 uint8 bFiveCount; //五张数目 uint8 bOneFirst[13]; //单牌位置 uint8 bTwoFirst[13]; //对牌位置 uint8 bThreeFirst[13]; //三条位置 uint8 bFourFirst[13]; //四张位置 uint8 bFiveFirst[13]; //五张位置 bool bStraight; //是否顺子 }; //分析结构 struct tag13SAnalyseResult { uint8 cbFourCount; //四张数目 uint8 cbThreeCount; //三张数目 uint8 cbDoubleCount; //两张数目 uint8 cbSignedCount; //单张数目 uint8 cbFourCardData[13]; //四张扑克 uint8 cbThreeCardData[13]; //三张扑克 uint8 cbDoubleCardData[13]; //两张扑克 uint8 cbSignedCardData[13]; //单张扑克 }; //分析结构 struct tag13SAnalyseType { bool bOnePare; //有一对 bool bTwoPare; //有两对 bool bThreeSame; //有三条 bool bStraight; //有顺子 bool bFlush; //有同花 bool bGourd; //有葫芦 bool bFourSame; //有铁支 bool bStraightFlush; //有同花顺 bool bFiveSame; //有五相 uint8 cbOnePare[100]; //一对的序号 uint8 cbTwoPare[100]; //两对的序号 uint8 cbThreeSame[100]; //三条的序号 uint8 cbStraight[100]; //顺子的序号 uint8 cbFlush[100]; //同花的序号 uint8 cbGourd[100]; //葫芦的序号 uint8 cbFourSame[100]; //铁支的序号 uint8 cbStraightFlush[100]; //同花顺的序号 uint8 cbFiveSame[100]; //五相的序号 bool bbOnePare[20]; //所有一对标志弹起 bool bbTwoPare[20]; //所有二对标志弹起 bool bbThreeSame[20]; //所有三条标志弹起 bool bbStraight[20]; //所有顺子标志弹起 bool bbFlush[20]; //所有同花标志弹起 bool bbGourd[20]; //所有葫芦标志弹起 bool bbFourSame[20]; //所有铁支标志弹起 bool bbStraightFlush[20]; //所有同花顺标志弹起 bool bbFiveSame[20]; //所有五相标志弹起 uint8 btOnePare; //一对的数量 单独 uint8 btThreeSame; //三条数量 单独 uint8 btTwoPare; //两对的数量 uint8 btStraight; //顺子的数量 uint8 btFlush; //同花的数量 uint8 btGourd; //葫芦的数量 uint8 btFourSame; //铁支的数量 uint8 btStraightFlush; //同花顺的数量 uint8 btFiveSame; //五相的数量 }; ////////////////////////////////////////////////////////////////////////// //排列类型 enum en13SSortCardType { enDescend, //降序类型 enAscend, //升序类型 enColor //花色类型 }; //游戏逻辑类 class C13SGameLogic { //变量定义 protected: static const uint8 m_bCardListData[SSS_CARD_COUNT]; //扑克数据; bool m_bClassicRule; //经典规则; //函数定义 public: //构造函数 C13SGameLogic(); //析构函数 virtual ~C13SGameLogic(); uint8 btCardSpecialData[13]; //类型函数 public: //获取类型 uint8 GetCardType(uint8 bCardData[], uint8 bCardCount, uint8 btSpecialCard[]); //获取数值 uint8 GetCardValue(uint8 bCardData) { return bCardData&SSS_CARD_MASK_VALUE; } //十六进制前面四位表示牌的数值 //获取花色 uint8 GetCardColor(uint8 bCardData) { return (bCardData&SSS_CARD_MASK_COLOR) >> 4; } //十六进制后面四位表示牌的花色 //设置是否是经典规则; void setClassicRule(bool bFlag) { m_bClassicRule=bFlag; } //控制函数 public: //排列扑克 void SortCardList(uint8 bCardData[], uint8 bCardCount, en13SSortCardType SortCardType = enDescend); //混乱扑克 void RandCardList(uint8 bCardBuffer[], uint8 bBufferCount); //删除扑克 bool RemoveCard(const uint8 bRemoveCard[], uint8 bRemoveCount, uint8 bCardData[], uint8 bCardCount); //添加扑克 bool AppendCard(const uint8 bAppendCard[], uint8 bAppendCount, uint8 bCardData[], uint8 &bCardCount); //得到牌的数量 uint8 GetCardCount(uint8 bCardData[]); //逻辑函数 public: //逻辑数值 uint8 GetCardLogicValue(uint8 bCardData); //对比扑克 uint8 CompareCard(uint8 bInFirstList[], uint8 bInNextList[], uint8 bFirstCount, uint8 bNextCount, bool bComperWithOther); //获得8种类型 tag13SAnalyseType GetType(uint8 bCardData[], uint8 bCardCount); //内部函数 public: //分析扑克 void AnalyseCard(const uint8 bCardDataList[], const uint8 bCardCount, tag13SAnalyseData& AnalyseData); //分析扑克 void AnalysebCardData(const uint8 cbCardData[], uint8 cbCardCount, tag13SAnalyseResult & AnalyseResult); //最好的一敦 void TheBestCard(tag13SAnalyseType tagCardType, uint8 btHandCardData[], uint8 btHandCardCount, uint8 btFrontCard[], uint8 btMidCard[], uint8 btBackCard[]); //三敦总共的水数 uint8 ThreeDunAllShuiShu(uint8 btFrontCard[],uint8 btMidCard[],uint8 btBackCard[]); //是否比前面的大 bool IsBiggerThanFront(uint8 btFrontFrontCard[],uint8 btFrontMidCard[],uint8 btFrontBackCard[],uint8 btFrontCard[],uint8 btMidCard[],uint8 btBackCard[]); //牌数据是否一样 bool IsSameCardData(uint8 btFirstCard[], uint8 btNextCard[], uint8 btFirstCount, uint8 btNextCount); //是否同花 bool IsFlush(const uint8 cbCardData[], const uint8 cbCardCount, uint8 cbMaxCardData[], uint8 & bMaxCardCount, uint8 bNeedCCount = 5); // 获取牌型图片路径; static std::string getCardTypeImagePath(uint8 cbCardType); // 获取牌型声音路径; static std::string getCardTypeSoundPath(uint8 cbGender, uint8 cbCardType); }; ////////////////////////////////////////////////////////////////////////// #endif