|
- #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
|