|
- #ifndef GAME_LOGIC_HEAD_FILE
- #define GAME_LOGIC_HEAD_FILE
-
- #pragma once
- #include "Stdafx.h"
- #include "data.h"
-
- class CTableFrameSink;
-
- //游戏逻辑类
- class CGameLogic
- {
- //变量定义
- protected:
- static const BYTE m_cbCardDataArray[MAX_REPERTORY]; //扑克数据
- static const BYTE m_cbCardDataArray_SRLF[MAX_REPERTORY_SRLF]; //扑克数据
- BYTE m_cbMagicIndex; //钻牌索引
-
- CTableFrameSink* m_pTableFramSink;
-
- //函数定义
- public:
- //构造函数
- CGameLogic(CTableFrameSink* pTableFramSink);
- //析构函数
- virtual ~CGameLogic();
-
- //控制函数
- 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
|