诸暨麻将添加redis
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

378 line
13 KiB

  1. #ifndef CMD_GAME_Pooker_HEAD_FILE
  2. #define CMD_GAME_Pooker_HEAD_FILE
  3. //////////////////////////////////////////////////////////////////////////
  4. //服务定义
  5. //游戏属性
  6. //////////////////////////////////////////////////////////////////////////
  7. //数目定义
  8. #pragma pack(1)
  9. #define MAX_COUNT_Poker 27 //最大数目
  10. #define FULL_COUNT_Poker 108 //全牌数目
  11. //////////////////////////////////////////////////////////////////////////
  12. //数值掩码
  13. #define MASK_COLOR 0xF0 //花色掩码
  14. #define MASK_VALUE 0x0F //数值掩码
  15. //
  16. //扑克类型
  17. #define CT_ERROR 0 //错误类型
  18. #define CT_SINGLE 1 //单牌类型
  19. #define CT_DOUBLE 2 //对子类型
  20. #define CT_THREE 3 //三条类型
  21. #define CT_DOUBLE_LINK 4 //对连类型//334455
  22. #define CT_THREE_LINK 5 //三连类型//555666777
  23. #define CT_SHUNZI 6 //顺子类型
  24. #define CT_BOMB 7 //炸弹类型
  25. #define CT_BOMB_3W 8 //3王炸弹
  26. #define CT_BOMB_TW 9 //天王炸弹
  27. #define CT_BOMB_LINK 10 //排炸类型 N线M连
  28. #define CT_BOMB_XIAN 11 //N付N线类型
  29. //
  30. ////////////////////////////////////////////////////////////////////////////
  31. ////状态定义
  32. //
  33. ////游戏状态
  34. //#define GS_SK_FREE GS_FREE //等待开始
  35. //#define GS_SK_PLAYING GS_PLAYING //游戏状态
  36. //
  37. ////////////////////////////////////////////////////////////////////////////
  38. ////命令定义
  39. //
  40. //#define SUB_S_GAME_START 100 //游戏函数
  41. //#define SUB_S_OUT_CARD 101 //用户出牌
  42. //#define SUB_S_PASS_CARD 102 //用户放弃
  43. //#define SUB_S_GAME_END 103 //游戏结束
  44. //#define SUB_S_TRUSTEE 104 //用户托管
  45. //#define SUB_S_SWITCH 105 //用户调换
  46. /* 前端->后台*/
  47. #define SUB_C_TRUSTEE_Poker 1 //用户 托管
  48. #define SUB_C_OPERATE_CALLBACK_Poker 150 //用户操作
  49. #define SUB_S_HINT_RESULT_Poker 151 //获取提示
  50. /*后台->前端*/
  51. #define SUB_S_GAME_START_Poker 250 //游戏开始
  52. #define SUB_S_OUT_BROADCAST_Poker 251 //出牌广播
  53. #define SUB_S_OPERATE_Poker 252 //操作通知
  54. #define SUB_S_GAME_END_Poker 253 //游戏结束
  55. #define SUB_S_GAME_JiangJin_Poker 254 //奖金变更
  56. #define SUB_S_TEAMMATE_HANDCARD_Poker 255 //通知队友手牌
  57. #define SUB_S_HINT_RESULT 256 //提示
  58. #define SUB_S_PANGGUAN_Poker 200
  59. #define SUB_S_TRUSTEE_Poker 1 //托管广播
  60. //发牌方式
  61. enum DealCardType{
  62. OneCardDeal = 0,
  63. ThreeCardDeal = 1,
  64. sixCardDeal = 2
  65. };
  66. // 操作掩码 后面用到
  67. enum OPERATE_MASK : WORD
  68. {
  69. OPERATE_MASK_NULL_Poker = 0x0000, //默认
  70. OPERATE_MASK_HINT_Poker = 0x0001, //提示
  71. OPERATE_MASK_NOOUT_Poker = 0x0002, //要不起
  72. OPERATE_MASK_OUT_Poker = 0x0004, //出牌
  73. OPERATE_MASK_PASS_Poker = 0x0008, //不出
  74. };
  75. //2 双癞子 1 单癞子 0 无癞子
  76. enum MagicMode{
  77. NoHaveMagic = 0,
  78. OneMagicMode,
  79. TwoMagicMode
  80. };
  81. //设置
  82. struct CMD_S_GameConfig_Poker
  83. {
  84. WORD wSubGameID; //100 双扣
  85. int wDiScore; //底分1
  86. WORD wFanFei; //房费(0房间创建者,1打牌者平摊)
  87. WORD wIpLimit; //IP限制(0限制,1不限制);
  88. WORD wPlayCountRule; //一次玩的局数(8局?16局?)
  89. WORD RoomId; //房间ID
  90. WORD IsOwner; //是否房主
  91. WORD wHadPlayCount; //当前局数
  92. TCHAR sPrivateTableID[LEN_PRIVATE_TABLE_ID];// 数字ID
  93. BYTE bDuoLai; //2 大小王 1 大王 0 无癞子
  94. WORD HaveBoomScore; //是否有炸弹奖金 1 有 0 没有
  95. BYTE PeoplesNum; //玩家人数
  96. int tmp2; //纸牌 发牌模式 0 1张 1 3张 2 6张
  97. bool ToString(TCHAR* pBuffer, int iLen)
  98. {
  99. if (sizeof(CMD_S_GameConfig_Poker) * 16 > iLen) return false;
  100. return true;
  101. }
  102. };
  103. //开局
  104. struct CMD_S_GameStart_SK
  105. {
  106. WORD wCurrentUser; //当前玩家(应该是第一个出牌的玩家吧)
  107. int lCellScore[4]; //玩家积分
  108. BYTE cbCardData[4][MAX_COUNT_Poker];//扑克列表
  109. BYTE cbPartnerCardData[MAX_COUNT_Poker];//队友扑克
  110. BYTE bTrustee; //是否托管
  111. BYTE cbStartRandCard; //随机扑克
  112. UINT userSortID[4]; //排序后的位置
  113. BYTE cbCurrPlay; //当前局数
  114. bool ToString(TCHAR* pBuffer, int iLen)
  115. {
  116. #ifdef _UNICODE
  117. CString StrCards;
  118. for (int i = 0; i < MAX_COUNT_Poker; i++)
  119. {
  120. CString tmp;
  121. tmp.Format(_T(",%02x"), cbCardData[i]);
  122. StrCards += tmp;
  123. }
  124. _snwprintf(pBuffer, iLen, TEXT("游戏开始->当前局数:%d,随机牌:%d,换桌顺序:%d,%d,%d,%d,玩家总积分:%d,%d,%d,%d 玩家手牌=%s")
  125. , cbCurrPlay, cbStartRandCard, userSortID[0], userSortID[1], userSortID[2], userSortID[3], lCellScore[0], lCellScore[1], lCellScore[2], lCellScore[3], StrCards);
  126. #else
  127. _snwprintf(pBuffer, iLen, TEXT("游戏开始->当前局数:%d,明牌:%d,换桌顺序:%d,%d,%d,%d,玩家总积分:%d,%d,%d,%d")
  128. , cbCurrPlay, cbStartRandCard, userSortID[0], userSortID[1], userSortID[2], userSortID[3], lCellScore[0], lCellScore[1], lCellScore[2], lCellScore[3]);
  129. #endif
  130. //StringCchCat(pBuffer, iLen / sizeof(TCHAR), tempcard);
  131. return true;
  132. }
  133. };
  134. //托管
  135. struct CMD_C_Trustee_SK
  136. {
  137. BYTE cbTrustee; //是否托管
  138. WORD wChairID; //托管用户
  139. };
  140. //客户端 发过来的操作
  141. struct CMD_C_OPERATE_CALLBACK_SK
  142. {
  143. WORD wOperateType; //操作掩码
  144. BYTE cbCardType; //出牌牌型
  145. BYTE cbJokerReplacePoker[4]; //癞子替换牌
  146. BYTE cbCardData[27]; //出牌扑克
  147. BYTE LianxianInfo; //告诉后台连线信息
  148. bool ToString(TCHAR* pBuffer, int iLen)
  149. {
  150. #ifdef _UNICODE
  151. CString CardS;
  152. for (int i = 0; i < MAX_COUNT_Poker;i++)
  153. {
  154. if (cbCardData[i]==0)
  155. {
  156. break;
  157. }
  158. CString tmp;
  159. tmp.Format(L"0x%02x,", cbCardData[i]);
  160. CardS += tmp;
  161. }
  162. _snwprintf(pBuffer, iLen, TEXT("客户端操作: 操作掩码=%d 出牌牌型=%d 癞子替换牌=[%d %d %d %d] 出牌扑克[%s] 特殊牌信息=%d")
  163. , wOperateType, cbCardType, cbJokerReplacePoker[0], cbJokerReplacePoker[1], cbJokerReplacePoker[2], cbJokerReplacePoker[3], CardS,LianxianInfo);
  164. #else
  165. _snwprintf(pBuffer, iLen, TEXT("客户端操作: 操作掩码=%d 出牌牌型=%d 癞子替换牌=[%d %d %d %d] 特殊牌信息=%d")
  166. , wOperateType, cbCardType, cbJokerReplacePoker[0], cbJokerReplacePoker[1], cbJokerReplacePoker[2], cbJokerReplacePoker[3],LianxianInfo);
  167. #endif
  168. //StringCchCat(pBuffer, iLen / sizeof(TCHAR), tempcard);
  169. return true;
  170. }
  171. };
  172. //出牌广播
  173. struct CMD_S_Out_Broadcast_SK
  174. {
  175. WORD wOutCardUser; //出牌用户
  176. WORD cbOperateType; //操作类型
  177. WORD cbCardType; //出牌牌型
  178. BYTE cbJokerReplacePoker[4];//替换癞子的牌
  179. BYTE cbOutCardData[27]; //出牌扑克
  180. BYTE cbIsFreeOut; //是否自由出牌
  181. BYTE cbIsTrusteeOut; //是否托管出牌
  182. BYTE cbLeftCount; //剩余牌数
  183. BYTE cbRanking[4]; //当前名次
  184. BYTE LianXianInfo; //标示 特殊牌 线 和连 等信息
  185. bool ToString(TCHAR* pBuffer, int iLen)
  186. {
  187. #ifdef _UNICODE
  188. _snwprintf(pBuffer, iLen, TEXT("出牌广播: 操作类型=%d 操作掩码=%d 出牌牌型=%d 替换癞子的牌=[%d %d %d %d] 是否自由出牌=%d cbLeftCount=%d 当前名次=[%d %d %d %d] 特殊牌信息 =%d")
  189. , wOutCardUser, cbOperateType, cbCardType, cbJokerReplacePoker[0], cbJokerReplacePoker[1], cbJokerReplacePoker[2], cbJokerReplacePoker[3], cbIsFreeOut, cbLeftCount, cbRanking[0], cbRanking[1], cbRanking[2], cbRanking[3], LianXianInfo);
  190. #else
  191. _snwprintf(pBuffer, iLen, TEXT("出牌广播: 操作类型=%d 操作掩码=%d 出牌牌型=%d 替换癞子的牌=[%d %d %d %d] 是否自由出牌=%d cbLeftCount=%d 当前名次=[%d %d %d %d] 特殊牌信息 =%d")
  192. , wOutCardUser, cbOperateType, cbCardType, cbJokerReplacePoker[0], cbJokerReplacePoker[1], cbJokerReplacePoker[2], cbJokerReplacePoker[3], cbIsFreeOut, cbLeftCount, cbRanking[0], cbRanking[1], cbRanking[2], cbRanking[3], LianXianInfo);
  193. #endif
  194. //StringCchCat(pBuffer, iLen / sizeof(TCHAR), tempcard);
  195. return true;
  196. }
  197. };
  198. struct CMD_S_Operate_SK
  199. {
  200. WORD wOperateUser; //操作用户
  201. WORD wOperateType; //操作掩码
  202. BYTE cbOptTime; //操作时间(秒)
  203. BYTE cbIsFreeOut; //是否自由出牌
  204. BYTE LianXianInfo; //上一个玩家的 特殊信息
  205. bool ToString(TCHAR* pBuffer, int iLen)
  206. {
  207. #ifdef _UNICODE
  208. _snwprintf(pBuffer, iLen, TEXT("操作提示: 用户=%d 操作掩码=%d 操作时间=%d 是否自动出牌=%d")
  209. , wOperateUser, wOperateType, cbOptTime, cbIsFreeOut);
  210. #else
  211. _snwprintf(pBuffer, iLen, TEXT("操作提示: 用户=%d 操作掩码=%d 操作时间=%d 是否自动出牌=%d")
  212. , wOperateUser, wOperateType, cbOptTime, cbIsFreeOut);
  213. #endif
  214. //StringCchCat(pBuffer, iLen / sizeof(TCHAR), tempcard);
  215. return true;
  216. }
  217. };
  218. struct CMD_S_StatusPlay_SK
  219. {
  220. CMD_S_GameConfig_Poker gameConfig; //游戏配置
  221. INT lUserTmpScore[4]; //临时积分。本轮玩家的积分
  222. BYTE leftTime; //未开始设置 255
  223. WORD wchairId; //解散申请人
  224. BYTE options[4]; //解散状态
  225. //游戏变量
  226. WORD wBankerUser; //本局游戏庄家
  227. WORD wCurrentUser; //当前用户
  228. BYTE cbCurrPlayCount; //当前局数
  229. BYTE cbTotaPlayCount; //总局数
  230. BYTE leftOptTime; //剩余操作时间---
  231. BYTE cbOutCardData[4][27]; //玩家出牌
  232. WORD cbcardType; //操作类型 我的出牌类型
  233. BYTE cbCardCount[4]; //扑克数目
  234. BYTE cbCardData[4][27]; //玩家手牌
  235. WORD cbOtherOperateType[4]; //别人的操作类型(不出,要不起)
  236. BYTE cbDiscardType; //应该是上一家出牌类型
  237. BYTE cbReplaceCard[4 * 4]; //癞子替换牌值
  238. BYTE cbRankIndex[4]; //名次排行,游戏中谁先打完排名
  239. BYTE cbTeamCardData[27]; //展示队友牌,重连时自己已打完
  240. BYTE cbTrusteeStatus[4]; //托管状态
  241. BYTE LeftMinPokerVal; //开局的那张名牌
  242. BYTE LianXianInfo; //标示 特殊牌 线 和连 等信息
  243. short UserGongXianScore[4]; //玩家贡献分
  244. };
  245. struct CMD_S_GameEnd_SK
  246. {
  247. BYTE cbEndType; //结束类型 操作类型(1常规结束 2解散 )1
  248. BYTE cbCardCount[4]; //玩家手牌数目
  249. BYTE cbCardData[4][27]; //玩家手牌值
  250. BYTE cbRank[4]; //名次排行
  251. BYTE cbWinorLose[4]; //玩家单局输赢情况(0,输,1赢)
  252. BYTE cbWinorLoseCount[4]; //输赢次数
  253. short nWanJiaScore[4]; //本局积分
  254. short GongxianScore[4]; //贡献分(炸弹分)
  255. short AwardScore[4]; //奖金分(双扣分)
  256. INT cbWanJiaTotalScore[4]; //总积分
  257. BYTE bFinish; //是否结束本轮
  258. BYTE playGameNum; //当前局数
  259. INT lGameScoreDetail[16 * 4]; //流水详情
  260. };
  261. typedef struct _HitStruct_
  262. {
  263. BYTE cbHintLogicCardData[MAX_COUNT_Poker];
  264. BYTE cbCardCount;
  265. WORD cbCardType;
  266. _HitStruct_(){
  267. ZeroMemory(cbHintLogicCardData, MAX_COUNT_Poker);
  268. cbCardType = CT_ERROR;
  269. cbCardCount = 0;
  270. };
  271. }HitStruct;
  272. // 出牌信息
  273. typedef struct _OutCard_
  274. {
  275. WORD wOutCardUser; //出牌用户
  276. BYTE cbOutCardData[MAX_COUNT_Poker]; //出牌扑克
  277. BYTE cbOutCardCount; //出牌数目
  278. BYTE cbOutCardType; //出牌类型
  279. BYTE cbOutCardValue; //牌眼(用于比较大小)
  280. }OutCard;
  281. struct CMD_S_Hint_Result_Poker
  282. {
  283. BYTE cbHintCardData[27]; //提示扑克(长度应该是27吧)
  284. WORD cbCardType; //出牌牌型
  285. };
  286. struct CMD_S_JiangJin
  287. {
  288. BYTE wOperateUser; //出牌大牌的用户
  289. BYTE cbCardData[27]; //出牌数据
  290. BYTE cbCardType; //出牌类型
  291. short Scores[4]; //各个玩家的奖金变更
  292. short TureScores[4]; //变更后的真实贡献分数
  293. bool ToString(TCHAR* pBuffer, int iLen)
  294. {
  295. #ifdef _UNICODE
  296. CString CardS;
  297. for (int i = 0; i < MAX_COUNT_Poker; i++)
  298. {
  299. if (cbCardData[i] == 0)
  300. {
  301. break;
  302. }
  303. CString tmp;
  304. tmp.Format(L"0x%02x,", cbCardData[i]);
  305. CardS += tmp;
  306. }
  307. _snwprintf(pBuffer, iLen, TEXT("奖金提示: 用户=%d 出牌数据=[%s ]出牌类型=%d 奖金变更[%d %d %d %d ] 变更后的[%d %d %d %d]")
  308. , wOperateUser, CardS, cbCardType, Scores[0], Scores[1], Scores[2], Scores[3], TureScores[0], TureScores[1], TureScores[2], TureScores[3]);
  309. #else
  310. _snwprintf(pBuffer, iLen, TEXT("奖金提示: 用户=%d 出牌数据=[%s ]出牌类型=%d 奖金变更[%d %d %d %d ] 变更后的[%d %d %d %d]")
  311. , wOperateUser, CardS, cbCardType, Scores[0], Scores[1], Scores[2], Scores[3], TureScores[0], TureScores[1], TureScores[2], TureScores[3]);
  312. #endif
  313. //StringCchCat(pBuffer, iLen / sizeof(TCHAR), tempcard);
  314. return true;
  315. }
  316. };
  317. struct CMD_S_PangGuan_Poler
  318. {
  319. CMD_S_GameConfig_Poker gameConfig;
  320. INT lUserTmpScore[4]; //玩家积分
  321. BYTE GameStatus; //当前状态
  322. WORD wBankerUser; //本局游戏庄家
  323. WORD wCurrentUser; //当前用户
  324. BYTE cbCurrPlayCount; //当前局数
  325. BYTE cbTotaPlayCount; //总局数
  326. BYTE leftOptTime;//剩余操作时间
  327. WORD cbOtherOperate[4]; //他人操作
  328. BYTE cbOutCardData[4][27]; //玩家出牌
  329. WORD cbCardType; //出牌类型
  330. WORD cbOtherOperateType[4];//别人的操作类型(不出,要不起)
  331. BYTE cbDiscardType;//应该是上一家出牌类型
  332. BYTE cbReplaceCard[4 * 4];//癞子替换牌值
  333. BYTE cbRankIndex[4];//名次排行,游戏中谁先打完排名
  334. BYTE cbCardCount[4]; //扑克数目
  335. BYTE cbCardData[4][27]; //玩家手牌
  336. BYTE cbTrusteeStatus[4]; //托管状态 0正常 1托管
  337. BYTE LeftMinPokerVal; //开局的那张名牌
  338. short UserGongXianScore[4]; //玩家贡献分
  339. };
  340. //用户托管
  341. struct CMD_S_Trustee_Poler
  342. {
  343. BYTE cbTrustee; //是否托管
  344. WORD wChairID; //托管用户
  345. };
  346. //队友手牌
  347. struct CMD_S_TEAMMATE_HANDCARD
  348. {
  349. WORD wTeammateChairID; //队友座位
  350. BYTE cbCardData[27]; //队友手牌
  351. };
  352. #pragma pack()
  353. #endif