#ifndef GAME_LOGIC_HEAD_FILE #define GAME_LOGIC_HEAD_FILE #pragma once #include "Stdafx.h" ////////////////////////////////////////////////////////////////////////////////// //排序类型 #define ST_ORDER 1 //大小排序 #define ST_COUNT 2 //数目排序 #define ST_CUSTOM 3 //自定排序 ////////////////////////////////////////////////////////////////////////////////// //分析结构 struct tagAnalyseResult { BYTE cbBlockCount[4]; //扑克数目 BYTE cbCardData[4][MAX_COUNT]; //扑克数据 }; //出牌结果 struct tagOutCardResult { BYTE cbCardCount; //扑克数目 BYTE cbResultCard[MAX_COUNT]; //结果扑克 }; //分布信息 struct tagDistributing { BYTE cbCardCount; //扑克数目 BYTE cbDistributing[18][6]; //分布信息 }; //搜索结果 struct tagSearchCardResult { BYTE cbSearchCount; //结果数目 BYTE cbCardCount[MAX_COUNT]; //扑克数目 BYTE cbResultCard[MAX_COUNT][MAX_COUNT]; //结果扑克 }; ////////////////////////////////////////////////////////////////////////////////// //游戏逻辑类 class CGameLogic { //变量定义 protected: static const BYTE m_cbCardData16[FULL_COUNT]; //扑克数据 static const BYTE m_cbCardData15[FULL_COUNT_15]; //扑克数据 DWORD m_dwGameRule; //牌型规则; //函数定义 public: //构造函数 CGameLogic(); //析构函数 virtual ~CGameLogic(); void SetCardRule(DWORD dwGameRule) { m_dwGameRule = dwGameRule; } bool IsHasGameRule(ePDKRuleEnum eType) { return (m_dwGameRule & eType) > 0; } //类型函数 public: //获取类型 BYTE GetCardType(const BYTE cbCardData[], BYTE cbCardCount, bool isLastCard); //获取数值 BYTE GetCardValue(BYTE cbCardData) { return cbCardData&MASK_VALUE; } //获取花色 BYTE GetCardColor(BYTE cbCardData) { return cbCardData&MASK_COLOR; } //控制函数 public: //混乱扑克 VOID RandCard16List(BYTE cbCardBuffer[], BYTE cbBufferCount); //混乱扑克 void RandCard15List(BYTE cbCardBuffer[], BYTE cbBufferCount); //排列扑克 VOID SortCardList(BYTE cbCardData[], BYTE cbCardCount, BYTE cbSortType); //排列扑克 VOID SortOutCardList(BYTE cbCardData[], BYTE cbCardCount, bool isLastCard); //排列扑克 BYTE SortOutCardList(BYTE cbCardData[], BYTE cbCardCount, BYTE cbCardType, BYTE cbBlockCount); //删除扑克 bool RemoveCardList(const BYTE cbRemoveCard[], BYTE cbRemoveCount, BYTE cbCardData[], BYTE cbCardCount); //删除扑克 bool RemoveCard(const BYTE cbRemoveCard[], BYTE cbRemoveCount, BYTE cbCardData[], BYTE cbCardCount); //删除扑克 bool RemoveCardEx(const BYTE cbRemoveCard[], BYTE cbRemoveCount, BYTE cbCardData[], BYTE cbCardCount); //逻辑函数 public: //有效判断 bool IsValidCard(BYTE cbCardData); //逻辑数值 BYTE GetCardLogicValue(BYTE cbCardData); //获取最大牌; BYTE GetMaxLogicValue(const BYTE cbHandCardData[], BYTE cbHandCardCount); //对比扑克 bool CompareCard(const BYTE cbFirstCard[], const BYTE cbNextCard[], BYTE cbFirstCount, BYTE cbNextCount, bool isLastCard); //出牌搜索 BYTE SearchOutCard( const BYTE cbHandCardData[], BYTE cbHandCardCount, const BYTE cbTurnCardData[], BYTE cbTurnCardCount, tagSearchCardResult *pSearchCardResult ); //同牌搜索 BYTE SearchSameCard( const BYTE cbHandCardData[], BYTE cbHandCardCount, BYTE cbReferCard, BYTE cbSameCardCount, tagSearchCardResult *pSearchCardResult ); //搜索比出牌; bool SearchMustOutCard(const BYTE cbHandCardData[], BYTE cbHandCardCount, BYTE cbMustOutCard); //搜索单顺; BYTE SearchSingleLine(const BYTE cbHandCardData[], BYTE cbHandCardCount, BYTE cbReferCard, BYTE cbLineCount, tagSearchCardResult *pSearchCardResult); //搜索双顺; BYTE SearchDoubleLine(const BYTE cbHandCardData[], BYTE cbHandCardCount, BYTE cbReferCard, BYTE cbLineCount, tagSearchCardResult *pSearchCardResult); //搜索三带二; BYTE SearchThreeTakeTwo(const BYTE cbHandCardData[], BYTE cbHandCardCount, BYTE cbReferCard, tagSearchCardResult *pSearchCardResult); //搜索四带三; BYTE SearchFourTakeThree(const BYTE cbHandCardData[], BYTE cbHandCardCount, BYTE cbReferCard, tagSearchCardResult *pSearchCardResult); //搜索飞机; BYTE SearchThreeLineTakeTwo(const BYTE cbHandCardData[], BYTE cbHandCardCount, BYTE cbReferCard, BYTE cbBlockCount, tagSearchCardResult *pSearchCardResult); //内部函数 public: //构造扑克 BYTE MakeCardData(BYTE cbValueIndex, BYTE cbColorIndex); //分析扑克 VOID AnalysebCardData(const BYTE cbCardData[], BYTE cbCardCount, tagAnalyseResult & AnalyseResult); //分析分布 VOID AnalysebDistributing(const BYTE cbCardData[], BYTE cbCardCount, tagDistributing & Distributing); ////得到飞机的块大小; //BYTE GetThreeLineBlockCount(const BYTE cbCardData[], BYTE cbCardCount, bool isLastCard); }; ////////////////////////////////////////////////////////////////////////////////// #endif