诸暨麻将添加redis
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

129 lines
4.5 KiB

  1. #ifndef GAME_LOGIC_OTHER_HEAD_FILE
  2. #define GAME_LOGIC_OTHER_HEAD_FILE
  3. #pragma once
  4. #include "Stdafx.h"
  5. #include "data.h"
  6. class CTableFrameSinkOther;
  7. //游戏逻辑类
  8. class CGameLogicOther
  9. {
  10. //变量定义
  11. protected:
  12. static const BYTE m_cbCardDataArray[MAX_REPERTORY]; //扑克数据
  13. static const BYTE m_cbCardDataArray_SRLF[MAX_REPERTORY_SRLF]; //扑克数据
  14. BYTE m_cbMagicIndex; //钻牌索引
  15. CTableFrameSinkOther* m_pTableFramSink;
  16. //函数定义
  17. public:
  18. //构造函数
  19. CGameLogicOther(CTableFrameSinkOther* pTableFramSink);
  20. //析构函数
  21. virtual ~CGameLogicOther();
  22. //控制函数
  23. public:
  24. //混乱扑克
  25. BYTE RandCardData(BYTE cbCardData[]);
  26. //删除扑克
  27. bool RemoveCard(BYTE cbCardIndex[MAX_INDEX], BYTE cbRemoveCard);
  28. //删除扑克
  29. bool RemoveCard(BYTE cbCardIndex[MAX_INDEX], const BYTE cbRemoveCard[], BYTE cbRemoveCount);
  30. //删除扑克
  31. bool RemoveCard(BYTE cbCardData[], BYTE cbCardCount, const BYTE cbRemoveCard[], BYTE cbRemoveCount);
  32. //设置钻牌
  33. void SetMagicIndex( BYTE cbMagicIndex ) { m_cbMagicIndex = cbMagicIndex; }
  34. //钻牌
  35. bool IsMagicCard( BYTE cbCardData );
  36. //辅助函数
  37. public:
  38. //获取麻将花色
  39. BYTE GetCardColor(BYTE cbCardData) { return (cbCardData&MASK_COLOR) >> 4 ;}
  40. //有效判断
  41. bool IsValidCard(BYTE cbCardData);
  42. //扑克数目
  43. BYTE GetCardCount(const BYTE cbCardIndex[MAX_INDEX]);
  44. //组合扑克
  45. BYTE GetWeaveCard(int cbWeaveKind, BYTE cbCenterCard, BYTE cbCardBuffer[4]);
  46. //等级函数
  47. public:
  48. //动作等级
  49. BYTE GetUserActionRank(INT cbUserAction);
  50. //胡牌等级
  51. WORD GetChiHuActionRank(const CChiHuRight & ChiHuRight);
  52. //动作判断
  53. public:
  54. //吃牌判断,一脚耐油不需要
  55. //BYTE EstimateEatCard(const BYTE cbCardIndex[MAX_INDEX], BYTE cbCurrentCard);
  56. //碰牌判断
  57. int EstimatePengCard(const BYTE cbCardIndex[MAX_INDEX], BYTE cbCurrentCard);
  58. //杠牌判断
  59. int EstimateGangCard(const BYTE cbCardIndex[MAX_INDEX], BYTE cbCurrentCard);
  60. //动作判断
  61. public:
  62. //杠牌分析
  63. int AnalyseGangCard(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount, tagGangCardResult & GangCardResult, BYTE bProvideCard = 0, bool bCanAnGang = true);
  64. //吃胡分析,改成自摸分析
  65. int AnalyseChiHuCard(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount, CChiHuRight &ChiHuRight, BYTE bSubMit);
  66. //听牌分析
  67. bool AnalyseTingCard(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount, BYTE *m_cbTingPaiData, BYTE subMit);
  68. //是否听牌,true表示已经听牌
  69. bool IsTingCard(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount, BYTE subMit);
  70. //是否花猪,一脚耐油不需要判断花猪牌型
  71. bool IsHuaZhu( const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount);
  72. //中张
  73. //bool IsZhongZhang(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount);
  74. //转换函数
  75. public:
  76. //扑克转换
  77. BYTE SwitchToCardData(BYTE cbCardIndex);
  78. //扑克转换
  79. BYTE SwitchToCardIndex(BYTE cbCardData);
  80. //扑克转换
  81. BYTE SwitchToCardData(const BYTE cbCardIndex[MAX_INDEX], BYTE cbCardData[MAX_COUNT]);
  82. //扑克转换
  83. BYTE SwitchToCardIndex(const BYTE cbCardData[], BYTE cbCardCount, BYTE cbCardIndex[MAX_INDEX]);
  84. //获取默认换三张牌值
  85. bool ExchangeCardIndex(const BYTE cbCardIndex[MAX_INDEX], BYTE cbCardData[EXCHANGE]);
  86. //获取牌个数
  87. WORD GetValue(BYTE uNum,BYTE fanshu, BYTE PaiZhi);
  88. //解码加密的牌
  89. BYTE DeCodeCard(const WORD cbCardData);
  90. //解码翻数
  91. BYTE DeCodeFanshu(const WORD cbCardData);
  92. //获取手牌最后牌值
  93. BYTE GetEndCard(BYTE cbCardIndex[MAX_INDEX]);
  94. bool PeiPai(BYTE cbCardData[MAX_REPERTORY]);
  95. //胡法分析
  96. //大对子
  97. bool IsPengPeng(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], const BYTE cbItemCount);
  98. //清一色牌
  99. bool IsQingYiSe(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], const BYTE cbItemCount,const BYTE cbCurrentCard);
  100. //七小对牌
  101. //bool IsQiXiaoDui(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[],const BYTE cbWeaveCount,const BYTE cbCurrentCard);
  102. //带幺
  103. //bool IsDaiYao( const tagAnalyseItem *pAnalyseItem );
  104. //将对
  105. //bool IsJiangDui( const tagAnalyseItem *pAnalyseItem );
  106. //内部函数
  107. private:
  108. //分析扑克
  109. bool AnalyseCard(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount, CAnalyseItemArray & AnalyseItemArray);
  110. //排序,根据牌值排序
  111. bool SortCardList( BYTE cbCardData[MAX_COUNT], BYTE cbCardCount );
  112. };
  113. //////////////////////////////////////////////////////////////////////////
  114. #endif