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