诸暨麻将添加redis
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 
 
 
 

297 wiersze
9.2 KiB

  1. #ifndef GAME_DATA_HEAD_FILE
  2. #define GAME_DATA_HEAD_FILE
  3. //////////////////////////////////////////////////////////////////////////
  4. #pragma once
  5. #include "Stdafx.h"
  6. //////////////////////////////////////////////////////////////////////////
  7. //麻将类型
  8. #define OneStepLaiYou 0x00 //一脚癞油
  9. #define BanLai 0x02 //半癞
  10. #define WuLaiDaoDi 0x01 //无赖到底
  11. #define CXZOneStepLaiYou 0x03 //撮虾子一脚癞油
  12. #define CXZBanLai 0x05 //撮虾子半癞
  13. #define CXZWuLaiDaoDi 0x04 //撮虾子无赖到底
  14. #define XueLiu 0x0A //血流成河
  15. //////////////////////////////////////////////////////////////////////////
  16. //逻辑掩码
  17. #define MASK_COLOR 0xF0 //花色掩码
  18. #define MASK_VALUE 0x0F //数值掩码
  19. //////////////////////////////////////////////////////////////////////////
  20. //动作定义
  21. //动作标志
  22. #define WIK_NULL 0x00000 //没有类型
  23. #define WIK_LEFT 0x00001 //左吃类型,不许用
  24. #define WIK_CENTER 0x00002 //中吃类型,不许用
  25. #define WIK_RIGHT 0x00004 //右吃类型
  26. #define WIK_PENG 0x00008 //碰牌类型
  27. #define WIK_GANG 0x00010 //杠牌类型
  28. #define WIK_DUO_PAO 0x00020 //吃牌类型,一炮多项 血流
  29. #define WIK_CHI_HU 0x00040 //吃胡类型,血流
  30. #define WIK_ZI_MO 0x00080 //自摸
  31. #define WIK_RUAN_ZIMO 0x00100 //软自摸
  32. #define WIK_YING_ZIMO 0x00200 //硬自摸
  33. #define WIK_RUAN_LAIYOU 0x00400 //软癞油
  34. #define WIK_YING_LAIYOU 0x00800 //硬癞油
  35. #define WIK_AN_GANG 0x01000 //暗杠
  36. #define WIK_BU_GANG 0x02000 //补杠
  37. #define WIK_MING_GANG 0x04000 //明杠
  38. #define WIK_AN_PIGANG 0x08000 //皮子暗杠
  39. #define WIK_MING_PIGANG 0x10000 //皮子明杠
  40. #define WIK_CHU_PAI 0x20000 //出牌
  41. #define WIK_HUA_ZHU 0x80000 //花猪
  42. //////////////////////////////////////////////////////////////////////////
  43. //胡牌定义
  44. #define WIK_DUI 0x01 //对牌类型
  45. #define WIK_SAN_ZHAO 0x02 //三招一类型
  46. #define WIK_QI_TA 0x04 //三个连一起的类型
  47. #define WIK_SI_ZHAO 0x08 //补招
  48. #define WIK_SI_TONG 0x10 //四统类型
  49. #define WIK_WU_TONG 0x20 //五统类型
  50. #define WIK_BH_WJCP 0x100 //庄家手牌可以出牌通知掩码
  51. //胡牌
  52. #define CHK_NULL 0x00 //非胡类型
  53. #define CHK_CHI_HU 0x01 //胡类型
  54. #define CHK_PENGPENG 0x02 //碰碰胡
  55. #define CHR_QING_YI_SE 0x04 //清一色
  56. #define CHR_QING_DUI 0x08 //清对
  57. #define CHR_MEN_QIAN_QING 0x10 //门前清
  58. #define CHR_HUA_ZHU 0x02 //花猪
  59. #define CHR_CHA_JIAO 0x01 //查叫
  60. #define DIAN_PAO 0x01 //点炮
  61. #define CHI_HU 0x02 //吃胡
  62. #define ZI_MO 0x03 //自摸
  63. #define BEI_ZIMO 0x04 //被自摸
  64. #define CHA_JIAO 0x05 //查叫
  65. #define BEI_CHAJIAO 0x06 //被查叫
  66. #define HUA_ZHU 0x07 //花猪
  67. #define BEI_HUAZHU 0x08 //被花猪
  68. //#define CHR_QIANG_GANG 0x00000001 //抢杠
  69. //#define CHR_GANG_SHANG_PAO 0x00000002 //杠上炮
  70. //#define CHR_GANG_KAI 0x00000004 //杠上花
  71. //#define CHR_TIAN_HU 0x00000008 //天胡
  72. //#define CHR_DI_HU 0x00000010 //地胡
  73. //#define CHR_DA_DUI_ZI 0x00000020 //大对子
  74. //#define CHR_QING_YI_SE 0x00000040 //清一色
  75. //#define CHR_QI_XIAO_DUI 0x00000080 //暗七对
  76. //#define CHR_DAI_YAO 0x00000100 //带幺
  77. //#define CHR_JIANG_DUI 0x00000200 //将对
  78. //#define CHR_SHU_FAN 0x00000400 //素番
  79. //#define CHR_QING_DUI 0x00000800 //清对
  80. //#define CHR_LONG_QI_DUI 0x00001000 //龙七对
  81. //#define CHR_QING_QI_DUI 0x00002000 //清七对
  82. //#define CHR_QING_YAO_JIU 0x00004000 //清幺九
  83. //#define CHR_QING_LONG_QI_DUI 0x00008000 //清龙七对
  84. //#define CHR_HAI_DI_LAO_YUE 0x00010000 //海底捞月
  85. //#define CHR_HAI_DI_PAO 0x00020000 //海底炮
  86. //#define CHR_DA_DAN_DIAO 0x00040000 //大单吊
  87. //#define CHR_MEN_QIAN_QING 0x00080000 //门前清
  88. //#define CHR_ZHONG_ZHANG 0x00100000 //中张
  89. //#define CHR_RUAN_ZIMO 0x00110000 //软自摸
  90. //#define CHR_YING_ZIMO 0x00120000 //硬自摸
  91. //#define CHR_RUAN_LAIYOU 0x00130000 //软癞油
  92. //#define CHR_YING_LAIYOU 0x00140000 //硬癞油
  93. //////////////////////////////////////////////////////////////////////////
  94. #define ZI_PAI_COUNT 7
  95. #pragma pack(1)
  96. //类型子项
  97. struct tagKindItem
  98. {
  99. INT cbWeaveKind; //组合类型
  100. BYTE cbCenterCard; //中心扑克
  101. BYTE cbCardIndex[3]; //扑克索引
  102. BYTE cbValidIndex[3]; //实际扑克索引
  103. };
  104. //类型子项
  105. struct tagKindItem_hua
  106. {
  107. BYTE cbWeaveKind; //组合类型
  108. BYTE cbCenterCard; //中心扑克索引
  109. BYTE cbCardIndex[5]; //扑克索引
  110. BYTE cbCardCount; //扑克数量
  111. };
  112. //组合子项
  113. struct tagWeaveItem
  114. {
  115. INT cbWeaveKind; //组合类型
  116. BYTE cbCenterCard; //中心扑克
  117. BYTE cbPublicCard; //公开标志
  118. WORD wProvideUser; //供应用户
  119. };
  120. struct tagWeaveItem_Hua
  121. {
  122. INT cbWeaveKind; //组合类型
  123. BYTE cbCenterCard; //中心扑克
  124. BYTE cbPublicCard; //公开标志
  125. WORD wProvideUser; //供应用户
  126. BYTE cbMargicOffset[4]; //组合花牌个数
  127. };
  128. //杠牌结果
  129. struct tagGangCardResult
  130. {
  131. BYTE cbCardCount; //扑克数目
  132. BYTE cbCardData[4]; //扑克数据
  133. };
  134. //杠牌结果
  135. struct tagGangCardResult_Hua
  136. {
  137. BYTE cbCardCount; //扑克数目
  138. BYTE cbCardData[6]; //扑克数据
  139. };
  140. //分析子项
  141. struct tagAnalyseItem
  142. {
  143. BYTE cbCardEye; //牌眼扑克
  144. bool bMagicEye; //牌眼是否是王霸
  145. INT cbWeaveKind[4]; //组合类型
  146. BYTE cbCenterCard[4]; //中心扑克
  147. BYTE cbCardData[4][4]; //实际扑克
  148. };
  149. //分析子项
  150. struct tagAnalyseItem_hua
  151. {
  152. BYTE cbCardEye[2]; //丫口索引
  153. BYTE cbWeaveKind[8]; //组合类型
  154. BYTE cbCenterCard[8]; //中心扑克
  155. WORD cbPoint; //组合牌的最佳点数
  156. BYTE cbGoldCard; //选定的主金
  157. //调试时用的信息
  158. BYTE cbGoldPoint[3]; //保存五种主金计算出来的分数
  159. BYTE cbKindPoint[8]; //每一种胡牌组合中每一个组合项的点数
  160. };
  161. //胡牌结果
  162. struct tagHuCardResult
  163. {
  164. bool IsHu; //是否可以胡牌
  165. BYTE HuScore; //胡牌的分数
  166. WORD bHuPoint; //胡点
  167. BYTE bRealGold; //主金
  168. tagAnalyseItem_hua AnalyseItem; //胡牌时最佳组合
  169. };
  170. #pragma pack()
  171. //////////////////////////////////////////////////////////////////////////
  172. #define MASK_CHI_HU_RIGHT 0x0fffffff
  173. /*
  174. // 权位类。
  175. // 注意,在操作仅位时最好只操作单个权位.例如
  176. // CChiHuRight chr;
  177. // chr |= (chr_zi_mo|chr_peng_peng),这样结果是无定义的。
  178. // 只能单个操作:
  179. // chr |= chr_zi_mo;
  180. // chr |= chr_peng_peng;
  181. */
  182. class CChiHuRight
  183. {
  184. //静态变量
  185. private:
  186. static bool m_bInit;
  187. static DWORD m_dwRightMask[MAX_RIGHT_COUNT];
  188. //权位变量
  189. private:
  190. DWORD m_dwRight[MAX_RIGHT_COUNT];
  191. public:
  192. //构造函数
  193. CChiHuRight();
  194. //运算符重载
  195. public:
  196. //赋值符
  197. CChiHuRight & operator = (DWORD dwRight);
  198. //与等于
  199. CChiHuRight & operator &= (DWORD dwRight);
  200. //或等于
  201. CChiHuRight & operator |= (DWORD dwRight);
  202. //与
  203. CChiHuRight operator & (DWORD dwRight);
  204. CChiHuRight operator & (DWORD dwRight) const;
  205. //或
  206. CChiHuRight operator | (DWORD dwRight);
  207. CChiHuRight operator | (DWORD dwRight) const;
  208. //功能函数
  209. public:
  210. //是否权位为空
  211. bool IsEmpty();
  212. //设置权位为空
  213. void SetEmpty();
  214. //获取权位数值
  215. BYTE GetRightData(DWORD dwRight[], BYTE cbMaxCount);
  216. //设置权位数值
  217. bool SetRightData(const DWORD dwRight[], BYTE cbRightCount);
  218. private:
  219. //检查权位是否正确
  220. bool IsValidRight(DWORD dwRight);
  221. };
  222. //效验类型
  223. enum enEstimatKind
  224. {
  225. EstimatKind_OutCard, //出牌效验
  226. EstimatKind_GangCard, //杠牌效验
  227. };
  228. //杠牌得分
  229. struct tagGangScore
  230. {
  231. BYTE cbGangCount; //杠个数
  232. LONGLONG lScore[MAX_WEAVE][GAME_PLAYER]; //每个杠得分
  233. };
  234. struct tagChihu
  235. {
  236. BYTE action; //点炮,吃胡,自摸,被自摸
  237. BYTE chr; //胡的牌型,清一色,碰碰胡
  238. BYTE Fanshu; //翻数
  239. BYTE cbChihuCard; //胡的牌值
  240. BYTE wProvideUser; //关系
  241. int Score; //胡牌分数
  242. };
  243. struct tagChiCard
  244. {
  245. BYTE action; //吃胡,自摸,一炮多向
  246. BYTE wProvideUser; //关系
  247. BYTE cbChihuCard; //胡的牌值
  248. };
  249. struct tagActionLast //当前时,最后一个动作吃胡,自摸,记录最后动作的人,code,card
  250. {
  251. BYTE action; //吃胡,自摸,一炮多向
  252. BYTE wProvideUser; //关系
  253. BYTE cbChihuCard; //胡的牌值
  254. };
  255. //////////////////////////////////////////////////////////////////////////
  256. //数组说明
  257. typedef CWHArray<tagAnalyseItem, tagAnalyseItem &> CAnalyseItemArray;
  258. //数组说明
  259. typedef CWHArray<tagAnalyseItem_hua, tagAnalyseItem_hua &> CAnalyseItemArray_hua;
  260. #endif