#ifndef GAME_LOGIC_OTHER_HEAD_FILE #define GAME_LOGIC_OTHER_HEAD_FILE #pragma once #include "Stdafx.h" #include "data.h" class CTableFrameSinkOther; //游戏逻辑类 class CGameLogicOther { //变量定义 protected: static const BYTE m_cbCardDataArray[MAX_REPERTORY]; //扑克数据 static const BYTE m_cbCardDataArray_SRLF[MAX_REPERTORY_SRLF]; //扑克数据 BYTE m_cbMagicIndex; //钻牌索引 CTableFrameSinkOther* m_pTableFramSink; //函数定义 public: //构造函数 CGameLogicOther(CTableFrameSinkOther* pTableFramSink); //析构函数 virtual ~CGameLogicOther(); //控制函数 public: //混乱扑克 BYTE RandCardData(BYTE cbCardData[]); //删除扑克 bool RemoveCard(BYTE cbCardIndex[MAX_INDEX], BYTE cbRemoveCard); //删除扑克 bool RemoveCard(BYTE cbCardIndex[MAX_INDEX], const BYTE cbRemoveCard[], BYTE cbRemoveCount); //删除扑克 bool RemoveCard(BYTE cbCardData[], BYTE cbCardCount, const BYTE cbRemoveCard[], BYTE cbRemoveCount); //设置钻牌 void SetMagicIndex( BYTE cbMagicIndex ) { m_cbMagicIndex = cbMagicIndex; } //钻牌 bool IsMagicCard( BYTE cbCardData ); //辅助函数 public: //获取麻将花色 BYTE GetCardColor(BYTE cbCardData) { return (cbCardData&MASK_COLOR) >> 4 ;} //有效判断 bool IsValidCard(BYTE cbCardData); //扑克数目 BYTE GetCardCount(const BYTE cbCardIndex[MAX_INDEX]); //组合扑克 BYTE GetWeaveCard(int cbWeaveKind, BYTE cbCenterCard, BYTE cbCardBuffer[4]); //等级函数 public: //动作等级 BYTE GetUserActionRank(INT cbUserAction); //胡牌等级 WORD GetChiHuActionRank(const CChiHuRight & ChiHuRight); //动作判断 public: //吃牌判断,一脚耐油不需要 //BYTE EstimateEatCard(const BYTE cbCardIndex[MAX_INDEX], BYTE cbCurrentCard); //碰牌判断 int EstimatePengCard(const BYTE cbCardIndex[MAX_INDEX], BYTE cbCurrentCard); //杠牌判断 int EstimateGangCard(const BYTE cbCardIndex[MAX_INDEX], BYTE cbCurrentCard); //动作判断 public: //杠牌分析 int AnalyseGangCard(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount, tagGangCardResult & GangCardResult, BYTE bProvideCard = 0, bool bCanAnGang = true); //吃胡分析,改成自摸分析 int AnalyseChiHuCard(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount, CChiHuRight &ChiHuRight, BYTE bSubMit); //听牌分析 bool AnalyseTingCard(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount, BYTE *m_cbTingPaiData, BYTE subMit); //是否听牌,true表示已经听牌 bool IsTingCard(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount, BYTE subMit); //是否花猪,一脚耐油不需要判断花猪牌型 bool IsHuaZhu( const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount); //中张 //bool IsZhongZhang(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount); //转换函数 public: //扑克转换 BYTE SwitchToCardData(BYTE cbCardIndex); //扑克转换 BYTE SwitchToCardIndex(BYTE cbCardData); //扑克转换 BYTE SwitchToCardData(const BYTE cbCardIndex[MAX_INDEX], BYTE cbCardData[MAX_COUNT]); //扑克转换 BYTE SwitchToCardIndex(const BYTE cbCardData[], BYTE cbCardCount, BYTE cbCardIndex[MAX_INDEX]); //获取默认换三张牌值 bool ExchangeCardIndex(const BYTE cbCardIndex[MAX_INDEX], BYTE cbCardData[EXCHANGE]); //获取牌个数 WORD GetValue(BYTE uNum,BYTE fanshu, BYTE PaiZhi); //解码加密的牌 BYTE DeCodeCard(const WORD cbCardData); //解码翻数 BYTE DeCodeFanshu(const WORD cbCardData); //获取手牌最后牌值 BYTE GetEndCard(BYTE cbCardIndex[MAX_INDEX]); bool PeiPai(BYTE cbCardData[MAX_REPERTORY]); //胡法分析 //大对子 bool IsPengPeng(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], const BYTE cbItemCount); //清一色牌 bool IsQingYiSe(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], const BYTE cbItemCount,const BYTE cbCurrentCard); //七小对牌 //bool IsQiXiaoDui(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[],const BYTE cbWeaveCount,const BYTE cbCurrentCard); //带幺 //bool IsDaiYao( const tagAnalyseItem *pAnalyseItem ); //将对 //bool IsJiangDui( const tagAnalyseItem *pAnalyseItem ); //内部函数 private: //分析扑克 bool AnalyseCard(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount, CAnalyseItemArray & AnalyseItemArray); //排序,根据牌值排序 bool SortCardList( BYTE cbCardData[MAX_COUNT], BYTE cbCardCount ); }; ////////////////////////////////////////////////////////////////////////// #endif