#ifndef GAME_LOGIC_CXZ_HEAD_FILE #define GAME_LOGIC_CXZ_HEAD_FILE #pragma once #include "Stdafx.h" #include "data.h" class TableFrameSinkCxz; //游戏逻辑类 class CGameLogicCxz { //变量定义 protected: static const BYTE m_cbCardDataArray[MAX_REPERTORY]; //扑克数据 static const BYTE m_cbCardDataArray_SRLF[MAX_REPERTORY_SRLF]; //扑克数据 BYTE m_cbMagicIndex; //钻牌索引 TableFrameSinkCxz* m_pTableFramSink; //函数定义 public: //构造函数 CGameLogicCxz(TableFrameSinkCxz* pTableFramSink); //析构函数 virtual ~CGameLogicCxz(); //控制函数 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 ); //获取手上癞子数量 BYTE GetLaiZiCount(const BYTE cbCardIndex[MAX_INDEX], BYTE m_cbLaiZi); //辅助函数 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(BYTE 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, BYTE LaiZiPiData); //杠牌判断 int EstimateGangCard(const BYTE cbCardIndex[MAX_INDEX], BYTE cbCurrentCard); //动作判断 public: //杠牌分析 int AnalyseGangCard(const BYTE cbCardIndex[MAX_INDEX], const BYTE m_cbLaiZiData, const BYTE m_cbLaiZiPiData, 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, BYTE cbCurrentCard, CChiHuRight &ChiHuRight, BYTE m_cbLaiZi); //重载一个用来无赖到底的判断 int AnalyseChiHuCard(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount, BYTE cbCurrentCard, CChiHuRight &ChiHuRight, BYTE m_cbLaiZi, BYTE bSubMit); //听牌分析 bool AnalyseTingCard(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount, BYTE *m_cbTingPaiData, BYTE m_cbLaiZi, BYTE subMit, BYTE LaiZiCount); //是否听牌 bool IsTingCard(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount, BYTE m_cbLaiZi, BYTE subMit, BYTE LaiZiCount); //是否花猪,一脚耐油不需要判断花猪牌型 //bool IsHuaZhu( const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount, BYTE cbDingque); //中张 //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]); BYTE GetValue(USHORT uNum, byte PaiZhi); //获取手牌最后牌值 BYTE GetEndCard(const BYTE cbCardIndex[MAX_INDEX], BYTE mLaiZiData); bool PeiPai(BYTE cbCardData[MAX_REPERTORY]); //胡法分析 protected: //大对子 //bool IsPengPeng( const tagAnalyseItem *pAnalyseItem ); //清一色牌 //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