诸暨麻将添加redis
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 
 

148 行
5.8 KiB

  1. #ifndef GAME_LOGIC_ZHIPAI_HEAD_FILE
  2. #define GAME_LOGIC_ZHIPAI_HEAD_FILE
  3. #pragma once
  4. #include "Stdafx.h"
  5. #include "data.h"
  6. class TableFrameSinkZhiPai;
  7. //游戏逻辑类
  8. class CGameLogicZhiPai
  9. {
  10. //变量定义
  11. protected:
  12. //////////////////////////////////////////////////////////////////////////
  13. /*
  14. *长沙麻将已定义的成员变量
  15. */
  16. static const BYTE m_cbCardDataArray_HUA[MAX_REPERTORY_HUA]; //花牌
  17. static const BYTE m_cbCardDataArray_HUA_One[MAX_REPERTORY_HUA_ONE]; //花牌
  18. static const BYTE m_cbCardDataArray_HUA_Two[MAX_REPERTORY_HUA_TWO]; //花牌
  19. TableFrameSinkZhiPai* m_pTableFramSink;
  20. BYTE m_cbMagicIndex; //钻牌索引
  21. //////////////////////////////////////////////////////////////////////////
  22. //////////////////////////////////////////////////////////////////////////
  23. /*
  24. *长沙麻将已定义的函数
  25. */
  26. //函数定义
  27. public:
  28. //构造函数
  29. CGameLogicZhiPai(TableFrameSinkZhiPai* pTableFramSink);
  30. //析构函数
  31. virtual ~CGameLogicZhiPai();
  32. //控制函数
  33. public:
  34. //混乱麻将
  35. BYTE RandCardData(BYTE cbCardData[], BYTE bGameType);
  36. //删除麻将
  37. bool RemoveCard(BYTE cbCardIndex[MAX_INDEX_HUA], BYTE cbRemoveCard);
  38. //删除麻将
  39. bool RemoveCard(BYTE cbCardIndex[MAX_INDEX_HUA], const BYTE cbRemoveCard[], BYTE cbRemoveCount);
  40. //删除麻将
  41. bool RemoveCard(BYTE cbCardData[], BYTE cbCardCount, const BYTE cbRemoveCard[], BYTE cbRemoveCount);
  42. //辅助函数
  43. public:
  44. //获取麻将花色
  45. BYTE GetCardColor(BYTE cbCardData) { return (cbCardData&MASK_COLOR) >> 4; }
  46. //有效判断
  47. bool IsValidCard(BYTE cbCardData);
  48. //麻将数目
  49. BYTE GetCardCount(const BYTE cbCardIndex[MAX_INDEX_HUA]);
  50. //组合麻将
  51. BYTE GetWeaveCard(int cbWeaveKind, BYTE cbCenterCard, BYTE cbCardBuffer[4]);
  52. //等级函数
  53. public:
  54. //动作等级
  55. BYTE GetUserActionRank(int cbUserAction);
  56. //动作判断
  57. public:
  58. //吃牌判断
  59. //int EstimateEatCard(const BYTE cbCardIndex[MAX_INDEX_HUA], BYTE cbCurrentCard);
  60. //对牌判断
  61. int EstimatePengCard(const BYTE cbCardIndex[MAX_INDEX_HUA], BYTE cbCurrentCard);
  62. //招牌判断,bFlag = false表示正常杠,true表示已经杠了的人
  63. int EstimateGangCard(const BYTE cbCardIndex[MAX_INDEX_HUA], BYTE cbCurrentCard, const tagWeaveItem_Hua WeaveItem[], BYTE cbWeaveCount);
  64. //杠牌补张分析,默认false表示正常判断,true表示游戏开始的请统
  65. int AnalyseGangCard(const BYTE cbCardIndex[MAX_INDEX_HUA], const BYTE HuaCardInex[5], const tagWeaveItem_Hua WeaveItem[], BYTE cbWeaveCount,
  66. tagGangCardResult_Hua & GangCardResult, bool bFlag = false);
  67. //是否听牌
  68. //bool IsTingCard(const BYTE cbCardIndex[MAX_INDEX_HUA], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount, BYTE subMit);
  69. //是否胡牌
  70. //bool IsHuCard(const BYTE cbCardIndex[MAX_INDEX_HUA], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount, BYTE cbCurrentCard);
  71. //听牌分析
  72. //bool AnalyseTingCard(const BYTE cbCardIndex[MAX_INDEX_HUA], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount,
  73. // BYTE *cbTingPaiData, BYTE subMit);
  74. //胡牌分析
  75. //分析胡牌
  76. int AnalyseHuCard(const BYTE cbCardIndex[MAX_INDEX_HUA], const BYTE HuaCardInex[5], BYTE cbCurrentCard, const tagWeaveItem_Hua WeaveItem[MAX_WEAVE_HUA], BYTE cbItemCount, const BYTE WeavHuaIndex[5], BYTE TongCount, tagHuCardResult & ChiHuResult);
  77. //转换函数
  78. public:
  79. //扑克转换
  80. BYTE SwitchToCardData(BYTE cbCardIndex);
  81. //扑克转换
  82. BYTE SwitchToCardIndex(BYTE cbCardData);
  83. //扑克转换
  84. BYTE SwitchToCardData(BYTE cbCardIndex[MAX_INDEX_HUA], BYTE cbCardData[MAX_COUNT_HUA], BYTE cbHuaCardIndex[]);
  85. //扑克转换
  86. BYTE SwitchToCardIndex(const BYTE cbCardData[], BYTE cbCardCount, BYTE cbCardIndex[MAX_INDEX_HUA]);
  87. //把组合牌里面的统转化成手牌
  88. bool HeBingCardIndex(BYTE cbCardIndexTemp[MAX_INDEX_HUA], const BYTE cbCardIndex_Tong[MAX_INDEX_HUA], BYTE cbTempHuaCardIndex[5], const BYTE HuaCardInex_Tong[5]);
  89. //根据扑克牌数据,得到花牌保存到索引数组中
  90. // 扑克牌数据 牌数 花牌索引数组
  91. BYTE GetHuaCard(BYTE cbCardData[], BYTE bCardCount, BYTE cbHuaCardIndex[]);
  92. //获取牌个数
  93. WORD GetValue(BYTE uNum, BYTE fanshu, WORD PaiZhi);
  94. //解码加密的牌
  95. BYTE DeCodeCard(const WORD cbCardData);
  96. //解码翻数
  97. BYTE DeCodeFanshu(const WORD cbCardData);
  98. //获取手牌最后牌值
  99. BYTE GetEndCard(BYTE cbCardIndex[MAX_INDEX_HUA]);
  100. //胡法分析
  101. protected:
  102. //不符合硬胡规则
  103. //七小对
  104. //bool IsQiXiaoDui(const BYTE cbCardIndex[MAX_INDEX_HUA], const tagWeaveItem WeaveItem[], const BYTE cbWeaveCount);
  105. ////将将胡
  106. //bool IsJiangJiang(const BYTE cbCardIndex[MAX_INDEX_HUA], const tagWeaveItem WeaveItem[], const BYTE cbWeaveCount);
  107. ////要符合硬胡规则
  108. ////清一色
  109. //bool IsQingYiSe(const BYTE cbCardIndex[MAX_INDEX_HUA], const tagWeaveItem WeaveItem[], const BYTE cbItemCount);
  110. ////碰碰胡
  111. //bool IsPengPeng(const BYTE cbCardIndex[MAX_INDEX_HUA], const tagWeaveItem WeaveItem[], const BYTE cbItemCount);
  112. ////全求人
  113. //bool IsQuanQiuRen(const BYTE cbCardIndex[MAX_INDEX_HUA], const tagWeaveItem WeaveItem[], const BYTE cbItemCount);
  114. ////七小对类型
  115. //int TypeQiXiaoDui(const BYTE cbCardIndex[MAX_INDEX_HUA]);
  116. //内部函数
  117. public:
  118. bool PeiPai(BYTE cbCardData[], BYTE nCount);
  119. //分析扑克
  120. bool AnalyseCard(const BYTE cbCardIndex[MAX_INDEX_HUA], const tagWeaveItem_Hua WeaveItem[], BYTE cbWeaveCount, CAnalyseItemArray_hua & AnalyseItemArray);
  121. //算最大胡子
  122. BYTE AnalyseCardHuNum(const BYTE cbCardIndex[MAX_INDEX_HUA], BYTE cbCurrentCard, BYTE cbHandGoldCard[3], BYTE LaiZi[3], BYTE cbTempHuaCardIndex[5], BYTE cbTempWeaveHuaIndex[5], const tagWeaveItem_Hua WeaveItem[], BYTE cbItemCount, BYTE TongCount, CAnalyseItemArray_hua & AnalyseItemArray, tagAnalyseItem_hua & BestAnalyseItem);
  123. //
  124. BYTE GetWeaveIndex(BYTE cbWeaveKind, BYTE cbCenterCardIndex, BYTE cbCardIndex[]);
  125. bool IsYaKou(const BYTE cbCardIndex[], BYTE &FirstIndex, BYTE &SecondeIndex);
  126. BYTE Abs(BYTE cbFirst, BYTE cbSecond);
  127. };
  128. //////////////////////////////////////////////////////////////////////////
  129. #endif