诸暨麻将添加redis
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 
 
 
 

129 lignes
4.6 KiB

  1. #ifndef GAME_LOGIC_HEAD_FILE
  2. #define GAME_LOGIC_HEAD_FILE
  3. #pragma once
  4. #include "Stdafx.h"
  5. #include "data.h"
  6. class CTableFrameSink;
  7. //游戏逻辑类
  8. class CGameLogic
  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. CTableFrameSink* m_pTableFramSink;
  16. //函数定义
  17. public:
  18. //构造函数
  19. CGameLogic(CTableFrameSink* pTableFramSink);
  20. //析构函数
  21. virtual ~CGameLogic();
  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. BYTE GetLaiZiCount(const BYTE cbCardIndex[MAX_INDEX], BYTE m_cbLaiZi);
  38. //辅助函数
  39. public:
  40. //获取麻将花色
  41. BYTE GetCardColor(BYTE cbCardData) { return (cbCardData&MASK_COLOR) >> 4 ;}
  42. //有效判断
  43. bool IsValidCard(BYTE cbCardData);
  44. //扑克数目
  45. BYTE GetCardCount(const BYTE cbCardIndex[MAX_INDEX]);
  46. //组合扑克
  47. BYTE GetWeaveCard(int cbWeaveKind, BYTE cbCenterCard, BYTE cbCardBuffer[4]);
  48. //等级函数
  49. public:
  50. //动作等级
  51. BYTE GetUserActionRank(BYTE cbUserAction);
  52. //胡牌等级
  53. //WORD GetChiHuActionRank(const CChiHuRight & ChiHuRight);
  54. //动作判断
  55. public:
  56. //吃牌判断,一脚耐油不需要
  57. //BYTE EstimateEatCard(const BYTE cbCardIndex[MAX_INDEX], BYTE cbCurrentCard);
  58. //碰牌判断
  59. int EstimatePengCard(const BYTE cbCardIndex[MAX_INDEX], BYTE cbCurrentCard, BYTE LaiZiPiData);
  60. //杠牌判断
  61. int EstimateGangCard(const BYTE cbCardIndex[MAX_INDEX], BYTE cbCurrentCard);
  62. //动作判断
  63. public:
  64. //杠牌分析
  65. 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);
  66. //吃胡分析,改成自摸分析
  67. //int AnalyseChiHuCard(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount, BYTE cbCurrentCard, CChiHuRight &ChiHuRight, BYTE m_cbLaiZi);
  68. //重载一个用来无赖到底的判断
  69. int AnalyseChiHuCard(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount, BYTE cbCurrentCard, CChiHuRight &ChiHuRight, BYTE m_cbLaiZi, BYTE bSubMit);
  70. //听牌分析
  71. bool AnalyseTingCard(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount, BYTE *m_cbTingPaiData, BYTE m_cbLaiZi, BYTE subMit, BYTE LaiZiCount);
  72. //是否听牌
  73. bool IsTingCard(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount, BYTE m_cbLaiZi, BYTE subMit, BYTE LaiZiCount);
  74. //是否花猪,一脚耐油不需要判断花猪牌型
  75. //bool IsHuaZhu( const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount, BYTE cbDingque);
  76. //中张
  77. //bool IsZhongZhang(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount);
  78. //转换函数
  79. public:
  80. //扑克转换
  81. BYTE SwitchToCardData(BYTE cbCardIndex);
  82. //扑克转换
  83. BYTE SwitchToCardIndex(BYTE cbCardData);
  84. //扑克转换
  85. BYTE SwitchToCardData(const BYTE cbCardIndex[MAX_INDEX], BYTE cbCardData[MAX_COUNT]);
  86. //扑克转换
  87. BYTE SwitchToCardIndex(const BYTE cbCardData[], BYTE cbCardCount, BYTE cbCardIndex[MAX_INDEX]);
  88. BYTE GetValue(USHORT uNum, byte PaiZhi);
  89. //获取手牌最后牌值
  90. BYTE GetEndCard(const BYTE cbCardIndex[MAX_INDEX],BYTE mLaiZiData);
  91. bool PeiPai(BYTE cbCardData[MAX_REPERTORY]);
  92. //胡法分析
  93. protected:
  94. //大对子
  95. //bool IsPengPeng( const tagAnalyseItem *pAnalyseItem );
  96. //清一色牌
  97. //bool IsQingYiSe(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], const BYTE cbItemCount,const BYTE cbCurrentCard);
  98. //七小对牌
  99. //bool IsQiXiaoDui(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[],const BYTE cbWeaveCount,const BYTE cbCurrentCard);
  100. //带幺
  101. //bool IsDaiYao( const tagAnalyseItem *pAnalyseItem );
  102. //将对
  103. //bool IsJiangDui( const tagAnalyseItem *pAnalyseItem );
  104. //内部函数
  105. private:
  106. //分析扑克
  107. bool AnalyseCard(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount, CAnalyseItemArray & AnalyseItemArray);
  108. //排序,根据牌值排序
  109. bool SortCardList( BYTE cbCardData[MAX_COUNT], BYTE cbCardCount );
  110. };
  111. //////////////////////////////////////////////////////////////////////////
  112. #endif