#ifndef GAME_LOGIC_ZHIPAI_HEAD_FILE #define GAME_LOGIC_ZHIPAI_HEAD_FILE #pragma once #include "Stdafx.h" #include "data.h" class TableFrameSinkZhiPai; //游戏逻辑类 class CGameLogicZhiPai { //变量定义 protected: ////////////////////////////////////////////////////////////////////////// /* *长沙麻将已定义的成员变量 */ static const BYTE m_cbCardDataArray_HUA[MAX_REPERTORY_HUA]; //花牌 static const BYTE m_cbCardDataArray_HUA_One[MAX_REPERTORY_HUA_ONE]; //花牌 static const BYTE m_cbCardDataArray_HUA_Two[MAX_REPERTORY_HUA_TWO]; //花牌 TableFrameSinkZhiPai* m_pTableFramSink; BYTE m_cbMagicIndex; //钻牌索引 ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// /* *长沙麻将已定义的函数 */ //函数定义 public: //构造函数 CGameLogicZhiPai(TableFrameSinkZhiPai* pTableFramSink); //析构函数 virtual ~CGameLogicZhiPai(); //控制函数 public: //混乱麻将 BYTE RandCardData(BYTE cbCardData[], BYTE bGameType); //删除麻将 bool RemoveCard(BYTE cbCardIndex[MAX_INDEX_HUA], BYTE cbRemoveCard); //删除麻将 bool RemoveCard(BYTE cbCardIndex[MAX_INDEX_HUA], const BYTE cbRemoveCard[], BYTE cbRemoveCount); //删除麻将 bool RemoveCard(BYTE cbCardData[], BYTE cbCardCount, const BYTE cbRemoveCard[], BYTE cbRemoveCount); //辅助函数 public: //获取麻将花色 BYTE GetCardColor(BYTE cbCardData) { return (cbCardData&MASK_COLOR) >> 4; } //有效判断 bool IsValidCard(BYTE cbCardData); //麻将数目 BYTE GetCardCount(const BYTE cbCardIndex[MAX_INDEX_HUA]); //组合麻将 BYTE GetWeaveCard(int cbWeaveKind, BYTE cbCenterCard, BYTE cbCardBuffer[4]); //等级函数 public: //动作等级 BYTE GetUserActionRank(int cbUserAction); //动作判断 public: //吃牌判断 //int EstimateEatCard(const BYTE cbCardIndex[MAX_INDEX_HUA], BYTE cbCurrentCard); //对牌判断 int EstimatePengCard(const BYTE cbCardIndex[MAX_INDEX_HUA], BYTE cbCurrentCard); //招牌判断,bFlag = false表示正常杠,true表示已经杠了的人 int EstimateGangCard(const BYTE cbCardIndex[MAX_INDEX_HUA], BYTE cbCurrentCard, const tagWeaveItem_Hua WeaveItem[], BYTE cbWeaveCount); //杠牌补张分析,默认false表示正常判断,true表示游戏开始的请统 int AnalyseGangCard(const BYTE cbCardIndex[MAX_INDEX_HUA], const BYTE HuaCardInex[5], const tagWeaveItem_Hua WeaveItem[], BYTE cbWeaveCount, tagGangCardResult_Hua & GangCardResult, bool bFlag = false); //是否听牌 //bool IsTingCard(const BYTE cbCardIndex[MAX_INDEX_HUA], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount, BYTE subMit); //是否胡牌 //bool IsHuCard(const BYTE cbCardIndex[MAX_INDEX_HUA], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount, BYTE cbCurrentCard); //听牌分析 //bool AnalyseTingCard(const BYTE cbCardIndex[MAX_INDEX_HUA], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount, // BYTE *cbTingPaiData, BYTE subMit); //胡牌分析 //分析胡牌 int AnalyseHuCard(const BYTE cbCardIndex[MAX_INDEX_HUA], const BYTE HuaCardInex[5], BYTE cbCurrentCard, const tagWeaveItem_Hua WeaveItem[MAX_WEAVE_HUA], BYTE cbItemCount, const BYTE WeavHuaIndex[5], BYTE TongCount, tagHuCardResult & ChiHuResult); //转换函数 public: //扑克转换 BYTE SwitchToCardData(BYTE cbCardIndex); //扑克转换 BYTE SwitchToCardIndex(BYTE cbCardData); //扑克转换 BYTE SwitchToCardData(BYTE cbCardIndex[MAX_INDEX_HUA], BYTE cbCardData[MAX_COUNT_HUA], BYTE cbHuaCardIndex[]); //扑克转换 BYTE SwitchToCardIndex(const BYTE cbCardData[], BYTE cbCardCount, BYTE cbCardIndex[MAX_INDEX_HUA]); //把组合牌里面的统转化成手牌 bool HeBingCardIndex(BYTE cbCardIndexTemp[MAX_INDEX_HUA], const BYTE cbCardIndex_Tong[MAX_INDEX_HUA], BYTE cbTempHuaCardIndex[5], const BYTE HuaCardInex_Tong[5]); //根据扑克牌数据,得到花牌保存到索引数组中 // 扑克牌数据 牌数 花牌索引数组 BYTE GetHuaCard(BYTE cbCardData[], BYTE bCardCount, BYTE cbHuaCardIndex[]); //获取牌个数 WORD GetValue(BYTE uNum, BYTE fanshu, WORD PaiZhi); //解码加密的牌 BYTE DeCodeCard(const WORD cbCardData); //解码翻数 BYTE DeCodeFanshu(const WORD cbCardData); //获取手牌最后牌值 BYTE GetEndCard(BYTE cbCardIndex[MAX_INDEX_HUA]); //胡法分析 protected: //不符合硬胡规则 //七小对 //bool IsQiXiaoDui(const BYTE cbCardIndex[MAX_INDEX_HUA], const tagWeaveItem WeaveItem[], const BYTE cbWeaveCount); ////将将胡 //bool IsJiangJiang(const BYTE cbCardIndex[MAX_INDEX_HUA], const tagWeaveItem WeaveItem[], const BYTE cbWeaveCount); ////要符合硬胡规则 ////清一色 //bool IsQingYiSe(const BYTE cbCardIndex[MAX_INDEX_HUA], const tagWeaveItem WeaveItem[], const BYTE cbItemCount); ////碰碰胡 //bool IsPengPeng(const BYTE cbCardIndex[MAX_INDEX_HUA], const tagWeaveItem WeaveItem[], const BYTE cbItemCount); ////全求人 //bool IsQuanQiuRen(const BYTE cbCardIndex[MAX_INDEX_HUA], const tagWeaveItem WeaveItem[], const BYTE cbItemCount); ////七小对类型 //int TypeQiXiaoDui(const BYTE cbCardIndex[MAX_INDEX_HUA]); //内部函数 public: bool PeiPai(BYTE cbCardData[], BYTE nCount); //分析扑克 bool AnalyseCard(const BYTE cbCardIndex[MAX_INDEX_HUA], const tagWeaveItem_Hua WeaveItem[], BYTE cbWeaveCount, CAnalyseItemArray_hua & AnalyseItemArray); //算最大胡子 BYTE AnalyseCardHuNum(const BYTE cbCardIndex[MAX_INDEX_HUA], BYTE cbCurrentCard, BYTE cbHandGoldCard[3], BYTE LaiZi[3], BYTE cbTempHuaCardIndex[5], BYTE cbTempWeaveHuaIndex[5], const tagWeaveItem_Hua WeaveItem[], BYTE cbItemCount, BYTE TongCount, CAnalyseItemArray_hua & AnalyseItemArray, tagAnalyseItem_hua & BestAnalyseItem); // BYTE GetWeaveIndex(BYTE cbWeaveKind, BYTE cbCenterCardIndex, BYTE cbCardIndex[]); bool IsYaKou(const BYTE cbCardIndex[], BYTE &FirstIndex, BYTE &SecondeIndex); BYTE Abs(BYTE cbFirst, BYTE cbSecond); }; ////////////////////////////////////////////////////////////////////////// #endif