诸暨麻将添加redis
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 
 
 
 

214 líneas
7.9 KiB

  1. #ifndef GAME_LOGIC_HEAD_TDH_FILE
  2. #define GAME_LOGIC_HEAD_TDH_FILE
  3. #pragma once
  4. #include "Stdafx.h"
  5. #include "data.h"
  6. class CTableFrameSink_tdh;
  7. //游戏逻辑类
  8. class CGameLogic_tdh
  9. {
  10. enum CardColor
  11. {
  12. Color_Wan = 0,
  13. Color_Tiao,
  14. Color_Bing,
  15. Color_Feng,
  16. };
  17. enum MagicType{
  18. MagicType_TwoMagic=0,
  19. MagicType_OneMagic,
  20. MagicType_NoMagic
  21. };
  22. //变量定义
  23. public:
  24. BYTE m_cbMagicIndexFirst; // 都叫财神
  25. BYTE m_cbMagicIndexSecond; // 都叫财神
  26. protected:
  27. static const BYTE m_cbCardDataArray_ZJ[MAX_REPERTORY_ZJ]; //
  28. static const BYTE m_cbCardDataArray_ZJ_Two[MAX_REPERTORY_ZJ_Two];
  29. //BYTE m_cbMagicIndexFirst; // 都叫财神
  30. //BYTE m_cbMagicIndexSecond; // 都叫财神
  31. MagicType m_BaoMj_MagicType;// 0 1 2 无财神 1财神 2财神
  32. CTableFrameSink_tdh* m_pTableFramSink;
  33. //函数定义
  34. public:
  35. //构造函数
  36. CGameLogic_tdh(CTableFrameSink_tdh* pTableFramSink);
  37. //析构函数
  38. virtual ~CGameLogic_tdh();
  39. //控制函数
  40. public:
  41. //混乱扑克
  42. BYTE RandCardData(BYTE cbCardData[]);
  43. BYTE RandCardData_Two(BYTE cbCardData[]);
  44. //删除扑克
  45. bool RemoveCard(BYTE cbCardIndex[MAX_INDEX], BYTE cbRemoveCard);
  46. //删除扑克
  47. bool RemoveCard(BYTE cbCardIndex[MAX_INDEX], const BYTE cbRemoveCard[], BYTE cbRemoveCount);
  48. //删除扑克
  49. bool RemoveCard(BYTE cbCardData[], BYTE cbCardCount, const BYTE cbRemoveCard[], BYTE cbRemoveCount);
  50. //设置钻牌
  51. void SetMagicIndex(BYTE CaiFirstIndex, BYTE CaiSecondIndex);
  52. //钻牌
  53. bool IsMagicCard( BYTE cbCardData );
  54. //辅助函数
  55. public:
  56. //获取麻将花色
  57. BYTE GetCardColor(BYTE cbCardData) { return (cbCardData&MASK_COLOR) >> 4 ;}
  58. //有效判断
  59. bool IsValidCard(BYTE cbCardData);
  60. //扑克数目
  61. BYTE GetCardCount(const BYTE cbCardIndex[MAX_INDEX]);
  62. //组合扑克
  63. BYTE GetWeaveCard(int cbWeaveKind, BYTE cbCenterCard,const BYTE cbMargicOffset[4], BYTE cbCardBuffer[4]);
  64. //获取财神牌个数
  65. BYTE GetMaigcCardCount(const BYTE cbCardIndex[MAX_INDEX]);
  66. //等级函数
  67. BYTE GetCardValue(BYTE cbCardDat){
  68. ASSERT(IsValidCard(cbCardDat));
  69. return (cbCardDat&MASK_VALUE);
  70. }
  71. public:
  72. //动作等级
  73. BYTE GetUserActionRank(int cbUserAction);
  74. //胡牌等级
  75. //WORD GetChiHuActionRank(const CChiHuRight & ChiHuRight);
  76. //动作判断
  77. public:
  78. //吃牌判断,一脚耐油不需要
  79. int EstimateEatCard(const BYTE cbCardIndex[MAX_INDEX], BYTE cbCurrentCard);
  80. //碰牌判断
  81. int EstimatePengCard(const BYTE cbCardIndex[MAX_INDEX], BYTE cbCurrentCard);
  82. //杠牌判断
  83. int EstimateGangCard(const BYTE cbCardIndex[MAX_INDEX], BYTE cbCurrentCard);
  84. //动作判断
  85. public:
  86. //杠牌分析
  87. int AnalyseGangCard(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount, tagGangCardResult & GangCardResult);
  88. //胡牌分析,bFlag默认false表示正常胡牌,true标示杠上花
  89. int AnalyseChiHuCard(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount, BYTE cbCurrentCard, CChiHuRight &ChiHuRight, BYTE& nHuTai, bool bFlag = false,bool bQiangGangFlag=false);
  90. //
  91. bool AnalyseCardNew(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount);
  92. //
  93. //bool isHaveMaigc(const BYTE cardMagicIndex[4]);
  94. //
  95. bool HaveMagic(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount);
  96. //
  97. bool IsPengPengHu(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount);
  98. //
  99. bool IsQuanShun(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount);
  100. //
  101. bool IsCardsIsHunYiSe(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount, BOOL HaveFengKe);
  102. //
  103. bool TestHu(const BYTE cbCardIndex[MAX_INDEX], int nCurrentMagicCount ,const tagWeaveItem WeaveItem[], BYTE cbWeaveCount);
  104. //
  105. bool GetOneColorCards(const BYTE cbCardIndex[MAX_INDEX], BYTE nColor, BYTE cbCardData[MAX_COUNT], int&CardCount);
  106. //
  107. bool OneCardsCanHu(const BYTE cbCardData[MAX_COUNT], int nCardCount, int nMagicCount,bool isQuanShun=false);
  108. //
  109. int PrintCards(const BYTE cbCardData[MAX_COUNT], int nCout);
  110. //
  111. int DeleteCardDataFromCardDatas(const BYTE vDeletIndex[MAX_COUNT], int DeleteCount, const BYTE cbCardData[MAX_COUNT], BYTE nCount, BYTE cbOutCardDatas[MAX_COUNT]);
  112. //
  113. // int AnalyseCardTaiNum(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount);
  114. //听牌分析
  115. bool AnalyseTingCard(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount, BYTE *m_cbTingPaiData, const BYTE FanHui[MAX_INDEX],
  116. BYTE wChairID, BYTE wBaoUserID=0,BYTE BaoTai=0);
  117. //是否听牌
  118. //bool IsTingCard(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount, const BYTE FanHui[MAX_INDEX]);
  119. //转换函数
  120. public:
  121. //扑克转换
  122. BYTE SwitchToCardData(BYTE cbCardIndex);
  123. //扑克转换
  124. BYTE SwitchToCardIndex(BYTE cbCardData);
  125. //扑克转换
  126. BYTE SwitchToCardData(const BYTE cbCardIndex[MAX_INDEX], BYTE cbCardData[MAX_COUNT]);
  127. //扑克转换
  128. BYTE SwitchToCardIndex(const BYTE cbCardData[], BYTE cbCardCount, BYTE cbCardIndex[MAX_INDEX]);
  129. //获取手牌癞子个数,同时去掉癞子牌
  130. BYTE DeleteMagicCards(BYTE cbCardIndex[MAX_INDEX]);
  131. BYTE DeleteMagicCards(BYTE cbCardIndex[MAX_INDEX],int nDeleteCount);
  132. //获取条万筒风
  133. BYTE GetOneColorCards(const BYTE cbCardIndex[MAX_INDEX], const BYTE nColor, BYTE cbCardData[MAX_COUNT]);
  134. //获取牌值需要财神牌几个 bFlag默认true为扑
  135. int GetOneColorNeedMagicCards(const BYTE cbCardData[MAX_COUNT], int DataCount, int nNeedNum,bool isShun=FALSE);
  136. //财神牌可变牌扫描
  137. void IsCanChangCardAndCount(const BYTE cbCardIndex[MAX_INDEX], BYTE Fanhui[MAX_INDEX]);
  138. //获取牌个数
  139. WORD GetValue(BYTE uNum, BYTE fanshu, WORD PaiZhi);
  140. //解码加密的牌
  141. BYTE DeCodeCard(const WORD cbCardData);
  142. //解码翻数
  143. BYTE DeCodeFanshu(const WORD cbCardData);
  144. //获取手牌最后牌值
  145. BYTE GetEndCard(BYTE cbCardIndex[MAX_INDEX]);
  146. bool PeiPai(BYTE cbCardData[MAX_REPERTORY_ZJ]);
  147. //胡法分析
  148. protected:
  149. //碰碰胡
  150. bool IsPengPeng(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], const BYTE cbItemCount);
  151. //清一色牌
  152. bool IsQingYiSe(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], const BYTE cbItemCount);
  153. //门前清
  154. bool IsMenQianQing(const tagWeaveItem WeaveItem[], const BYTE cbWeaveCount);
  155. //计算手牌是否包含东风刻字
  156. bool HaveFengKe(BYTE cbCardIndex[MAX_INDEX], tagWeaveItem WeaveItem[], BYTE &cbItemCount,int nCardIndex);
  157. //内部函数
  158. private:
  159. //分析扑克
  160. bool AnalyseCard(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount, CAnalyseItemArray & AnalyseItemArray);
  161. public:
  162. //排序,根据牌值排序
  163. bool SortCardList( BYTE cbCardData[MAX_COUNT], BYTE cbCardCount );
  164. bool test2Combine(const BYTE cbCard1, const BYTE cbCard2);
  165. bool test3Combine(const BYTE cbCard1, const BYTE cbCard2, const BYTE cbCard3);
  166. bool test3combineToShun(const BYTE cbCard1, const BYTE cbCard2, const BYTE cbCard3);
  167. //一局中只有8个财神牌(其中一个无效),将这7个财神牌给玩家手牌去匹配能否成整扑,然后剩下多少,将剩下的数和可用财神数比较
  168. public:
  169. int mNeedMinMagicNum;
  170. BYTE m_cbHuCard;
  171. public:
  172. CChiHuRight mChiHuRight;
  173. DWORD mTaiRight;//计算台数的权值
  174. int mJiangInColor;
  175. int mSunTaiJiangInColor;
  176. //接下来尝试修改 在判断胡牌时 记录一下财神变成了什么。
  177. BYTE mMagicData[1024];
  178. BYTE mMagicDataCount;
  179. void ShowMagicData();
  180. void ShowMagicReplaceData();
  181. BYTE mMagicReplaceCard[MAX_INDEX];
  182. //删除数组中的牌
  183. void DeleteCards(const BYTE* pSrc, int nCount, const BYTE* pDeleteCards, int nDelCount, BYTE Cards[14]);
  184. BYTE mMagicNeedCardArray[4];
  185. bool mIsBaoMjType; //0翻财神 1 包麻将
  186. void SetGameLogicMjType(bool mjType){
  187. mIsBaoMjType = mjType;
  188. }
  189. BOOL IsCanHuAllCards(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount);
  190. BOOL IsSiCaiHu(const BYTE cbCardIndex[MAX_INDEX], const tagWeaveItem WeaveItem[], BYTE cbWeaveCount);
  191. };
  192. //////////////////////////////////////////////////////////////////////////
  193. #endif