诸暨麻将添加redis
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 
 
 
 

237 行
7.3 KiB

  1. #ifndef GAME_DATA_HEAD_FILE
  2. #define GAME_DATA_HEAD_FILE
  3. //////////////////////////////////////////////////////////////////////////
  4. #pragma once
  5. #include "Stdafx.h"
  6. /////////////////////////////////////////////////////////////////////////
  7. //#define FengDingTaiNum 5
  8. //#define MaxTaiNum 7
  9. //////////////////////////////////////////////////////////////////////////
  10. //麻将类型
  11. #define HongZhong 0x14 //红中晃晃
  12. #define FaCai 0x15 //发财晃晃
  13. #define DuoLaiHongZhong 0x16 //红中晃晃多癞子
  14. #define DuoLaiFaCai 0x17 //发财晃晃多癞子
  15. //////////////////////////////////////////////////////////////////////////
  16. //逻辑掩码
  17. #define MASK_COLOR 0xF0 //花色掩码
  18. #define MASK_VALUE 0x0F //数值掩码
  19. //////////////////////////////////////////////////////////////////////////
  20. //动作定义
  21. //动作标志
  22. #define WIK_NULL 0x00000000 //没有类型
  23. #define WIK_SHUANG_CAICHI 0x00000001 //双财吃
  24. #define WIK_SHUANG_PENG 0x00000002 //双财碰
  25. #define WIK_DAN_CHI 0x00000004 //单财吃
  26. #define WIK_DAN_PENG 0x00000008 //单财碰
  27. #define WIK_LEFT 0x00000010 //左吃类型
  28. #define WIK_CENTER 0x00000020 //中吃类型
  29. #define WIK_RIGHT 0x00000040 //右吃类型
  30. #define WIK_PENG 0x00000080 //碰牌类型
  31. #define WIK_DAN_BU_GANG 0x00000100 //补杠,财神补杠
  32. #define WIK_BU_GANG 0x00000200 //补杠,正补
  33. #define WIK_SAN_MING_GANG 0x00000400 //明杠,全财神明杠
  34. #define WIK_SHUANG_MING_GANG 0x00000800 //明杠,双财神明杠
  35. #define WIK_DAN_MING_GANG 0x00001000 //明杠,单财神明杠
  36. #define WIK_MING_GANG 0x00002000 //明杠
  37. #define WIK_QUANG_AN_GANG 0x00004000 //暗杠,全财神暗杠
  38. #define WIK_SAN_AN_GANG 0x00008000 //暗杠,三财神暗杠
  39. #define WIK_SHUANG_AN_GANG 0x00010000 //暗杠,双财神暗杠
  40. #define WIK_DAN_AN_GANG 0x00020000 //暗杠,单财神暗杠
  41. #define WIK_AN_GANG 0x00040000 //暗杠
  42. #define WIK_CHI_HU 0x00080000 //吃胡类型
  43. #define WIK_ZI_MO 0x00100000 //自摸
  44. #define WIK_TIAN_ZI_MO 0x00200000 //天胡
  45. #define WIK_DI_CHIHU 0x00400000 //地胡
  46. #define WIK_ZAHU 0x00800000 //咋胡
  47. #define WIK_CAIDIAO 0x01000000 //财吊
  48. #define WIK_SI_CAIHU 0x02000000 //四财胡
  49. #define WIK_GANG_SHANG_KAI 0x04000000 //杠上开花
  50. #define WIK_Qiang_GANG 0x08000000 //抢杠
  51. #define WIK_CanDingMagic 0x10000000 //定财神 专用,是否可以定财神
  52. #define WIK_GANG_GANG 0x0007C000 //表示暗杠的所有掩码之和
  53. #define WIK_PENG_PENG 0x0000008A //表示碰的所有掩码之和
  54. //////////////////////////////////////////////////////////////////////////
  55. //胡牌定义
  56. //台数-胡法
  57. #define ZJ_TAI_ZFB 0x0001 //中发白
  58. #define ZJ_TAI_HunYiSe 0x0002 //混一色
  59. #define ZJ_TAI_PengPeng 0x0004 //碰碰胡
  60. #define ZJ_TAI_QuanShun 0x0008 //全顺
  61. #define ZJ_TAI_GangKai 0x0010 //杠上开花
  62. #define ZJ_TAI_QiangGang 0x0020 //抢杠胡
  63. #define ZJ_TAI_Gang 0x0040 //这个是干什么的,占时作为中发白刻 //定财神 此值 当作单财胡
  64. #define ZJ_TAI_WuMagic 0x0080 //无财神牌
  65. #define ZJ_TAI_DongFeng 0x0100 //东风刻字
  66. #define ZJ_TAI_QingYiSe 0x0200 //清一色
  67. #define ZJ_TAI_TianHu 0x0400 //天胡
  68. #define ZJ_TAI_DiHu 0x0800 //地胡
  69. #define ZJ_TAI_QuanZi 0x1000 //全字 辣子胡
  70. #define ZJ_TAI_WuMagicFengJiangHunYise 0x2000 //无财神 东 中发白 做将 的混一色
  71. #define ZJ_TAI_ZHAHU 0x4000 //炸胡 包三家 包家有胡不胡。
  72. ///---------------tdh怎加
  73. #define ZJ_TAI_CaiDiao 0x04000 //财吊
  74. #define ZJ_TAI_SiCaiHu 0x08000 //四财胡 推倒胡
  75. // #define ZJ_TAI_KEGANG 0x10000 //刻杠 这2 越界了 胡法之用了16个位
  76. // #define ZJ_TAI_danMagic 0x20000 //单财胡
  77. //////////////////////////////////////////////////////////////////////////
  78. #define ZI_PAI_COUNT 7
  79. #pragma pack(1)
  80. //类型子项
  81. struct tagKindItem
  82. {
  83. INT cbWeaveKind; //组合类型
  84. BYTE cbCenterCard; //中心扑克
  85. BYTE cbCardIndex[3]; //扑克索引
  86. BYTE cbValidIndex[3]; //实际扑克索引
  87. };
  88. //组合子项
  89. struct tagWeaveItem
  90. {
  91. INT cbWeaveKind; //组合类型
  92. BYTE cbCenterCard; //中心扑克
  93. BYTE cbPublicCard; //公开标志
  94. WORD wProvideUser; //供应用户
  95. BYTE cbMargicOffset[4]; //如果有财神参与组合,财神的位置 1-4 ,该位置存储实际是那张财神的index
  96. //BYTE ShenYuCard[3]; //组合的剩余牌值
  97. };
  98. //杠牌结果
  99. struct tagGangCardResult
  100. {
  101. BYTE cbCardCount; //扑克数目
  102. WORD cbCardData[6]; //扑克数据
  103. };
  104. //分析子项
  105. struct tagAnalyseItem
  106. {
  107. BYTE cbCardEye; //牌眼扑克
  108. bool bMagicEye; //牌眼是否是王霸
  109. INT cbWeaveKind[4]; //组合类型
  110. BYTE cbCenterCard[4]; //中心扑克
  111. BYTE cbCardData[4][4]; //实际扑克
  112. };
  113. #pragma pack()
  114. //////////////////////////////////////////////////////////////////////////
  115. #define MASK_CHI_HU_RIGHT 0x0fffffff
  116. /*
  117. // 权位类。
  118. // 注意,在操作仅位时最好只操作单个权位.例如
  119. // CChiHuRight chr;
  120. // chr |= (chr_zi_mo|chr_peng_peng),这样结果是无定义的。
  121. // 只能单个操作:
  122. // chr |= chr_zi_mo;
  123. // chr |= chr_peng_peng;
  124. */
  125. class CChiHuRight
  126. {
  127. //静态变量
  128. private:
  129. static bool m_bInit;
  130. static DWORD m_dwRightMask[MAX_RIGHT_COUNT];
  131. //权位变量
  132. private:
  133. DWORD m_dwRight[MAX_RIGHT_COUNT];
  134. public:
  135. //构造函数
  136. CChiHuRight();
  137. //运算符重载
  138. public:
  139. //赋值符
  140. CChiHuRight & operator = (DWORD dwRight);
  141. //与等于
  142. CChiHuRight & operator &= (DWORD dwRight);
  143. //或等于
  144. CChiHuRight & operator |= (DWORD dwRight);
  145. //与
  146. CChiHuRight operator & (DWORD dwRight);
  147. CChiHuRight operator & (DWORD dwRight) const;
  148. //或
  149. CChiHuRight operator | (DWORD dwRight);
  150. CChiHuRight operator | (DWORD dwRight) const;
  151. //异或
  152. //异或等于
  153. CChiHuRight & operator -= (DWORD dwRight);
  154. //功能函数
  155. public:
  156. //是否权位为空
  157. bool IsEmpty();
  158. //设置权位为空
  159. void SetEmpty();
  160. //获取权位数值
  161. BYTE GetRightData(DWORD dwRight[], BYTE cbMaxCount);
  162. //设置权位数值
  163. bool SetRightData(const DWORD dwRight[], BYTE cbRightCount);
  164. private:
  165. //检查权位是否正确
  166. bool IsValidRight(DWORD dwRight);
  167. };
  168. //效验类型
  169. enum enEstimatKind
  170. {
  171. EstimatKind_OutCard, //出牌效验
  172. EstimatKind_GangCard, //杠牌效验
  173. };
  174. //杠牌得分
  175. struct tagGangScore
  176. {
  177. BYTE cbGangCount; //杠个数
  178. LONGLONG lScore[MAX_WEAVE][GAME_PLAYER]; //每个杠得分
  179. };
  180. struct tagChihu
  181. {
  182. BYTE action; //点炮,吃胡,自摸,被自摸
  183. BYTE chr; //胡的牌型,清一色,碰碰胡
  184. BYTE Fanshu; //翻数
  185. BYTE cbChihuCard; //胡的牌值
  186. BYTE wProvideUser; //关系
  187. int Score; //胡牌分数
  188. };
  189. struct tagChiCard
  190. {
  191. BYTE action; //吃胡,自摸,一炮多向
  192. BYTE wProvideUser; //关系
  193. BYTE cbChihuCard; //胡的牌值
  194. };
  195. struct tagActionLast //当前时,最后一个动作吃胡,自摸,记录最后动作的人,code,card
  196. {
  197. BYTE action; //吃胡,自摸,一炮多向
  198. BYTE wProvideUser; //关系
  199. BYTE cbChihuCard; //胡的牌值
  200. };
  201. //////////////////////////////////////////////////////////////////////////
  202. //数组说明
  203. typedef CWHArray<tagAnalyseItem, tagAnalyseItem &> CAnalyseItemArray;
  204. #endif