#ifndef _CMD_SSS_GAME_HEAD_FILE_ #define _CMD_SSS_GAME_HEAD_FILE_ #include "Types.h" #include "DataStream.h" #pragma pack(1) //游戏属性; #define SSS_KIND_ID 502 //游戏ID; #define SSS_GAME_PLAYER 4 //游戏人数; #define SSS_GAME_NAME ("十三张") //游戏名字; #define SSS_MAX_COUNT 13 //扑克数目; #define SSS_FULL_COUNT 52 //最大牌库数量; #define SSS_HAND_CARD_COUNT 13 //扑克数目; #define SSS_GROUP_COUNT 3 //分组数量; #define SSS_MIN_ITEM_COUNT 3 //最小牌数量; #define SSS_MAX_ITEM_COUNT 5 //最大牌数量; //扑克掩码; #define SSS_MASK_VALUE 0x0F //数值掩码; #define SSS_MASK_COLOR 0xF0 //花色掩码; //玩家相关定义; #define SSS_VIEW_TOP_ID 0 //顶部玩家; #define SSS_VIEW_LEFT_ID 1 //左侧玩家; #define SSS_VIEW_SELF_ID 2 //自己玩家; #define SSS_VIEW_RIGHT_ID 3 //右侧玩家; //游戏状态; #define SSS_GS_WK_FREE GAME_STATUS_FREE //等待开始; #define SSS_GS_WK_SEND_CARD GAME_STATUS_PLAY //发牌; #define SSS_GS_WK_ROB_BANKER (GAME_STATUS_PLAY + 1) //抢庄; #define SSS_GS_WK_USER_CHIP (GAME_STATUS_PLAY + 2) //下注; #define SSS_GS_WK_OPEN_CARD (GAME_STATUS_PLAY + 3) //开牌; #define SSS_GS_WK_COMPARE_CARD (GAME_STATUS_PLAY + 4) //比牌; //开房规则枚举; enum tagSSSGameRuleEnum { eSSSGameRuleCardAA = 1, //房卡AA; eSSSGameRuleSend7Cards = 1 << 1, //发7张牌; eSSSGameRuleRobBanker = 1 << 2, //抢庄; eSSSGameRuleTurnBanker = 1 << 3, //轮流坐庄; eSSSGameRuleFixBanker = 1 << 4, //霸王庄; eSSSGameRuleClassic = 1 << 5 //经典玩法; }; ////////////////////////////////////////////////////////////////////////// //手牌状态; enum tagSSSHandCardStatusEnum { SSS_HAND_STATUS_NULL, //旁观; SSS_HAND_STATUS_GIVEUP, //放弃; SSS_HAND_STATUS_DISORDER, //散牌; SSS_HAND_STATUS_SORTED, //排序牌; }; //服务器命令结构; #define SSS_SUB_S_GAME_START 101 //游戏开始; #define SSS_SUB_S_START_ROB 102 //开始抢庄; #define SSS_SUB_S_USER_ROB 103 //玩家抢庄; #define SSS_SUB_S_START_CHIP 104 //开始下注; #define SSS_SUB_S_USER_CHIP 105 //玩家下注; #define SSS_SUB_S_SEND_LEFT_CARD 106 //发送剩下的牌; #define SSS_SUB_S_START_OPEN 107 //开始开牌; #define SSS_SUB_S_OPEN_CARD 108 //玩家摊牌; #define SSS_SUB_S_CLASSIC_CMP_CARD 109 //经典玩法比牌; #define SSS_SUB_S_BANKER_CMP_CARD 110 //带庄家玩法比牌; #define SSS_SUB_S_GAME_END 111 //游戏结束; //游戏状态; typedef struct SSS_CMD_S_StatusFree { uint16 wRobBankerTime; //抢庄时间; uint16 wUserChipTime; //下注时间; uint16 wBuildCardTime; //配牌时间; uint8 cbHandStatus[SSS_GAME_PLAYER]; //手牌状态; }tagBaseStatus; //抢庄状态; struct SSS_CMD_S_StatusRob { tagBaseStatus BaseStatus; uint8 cbRobStatus[SSS_GAME_PLAYER]; //抢庄状态 0:没操作,1:不抢,2:抢; uint8 cbCardCount; //扑克数量; uint8 cbHandCardData[SSS_HAND_CARD_COUNT]; //手牌数据; }; //下注状态; struct SSS_CMD_S_StatusChip { tagBaseStatus BaseStatus; uint16 wBankerUser; //庄家用户; uint8 cbChipStatus[SSS_GAME_PLAYER]; //下注状态; int lUserChipScore[SSS_GAME_PLAYER]; //下注分数; uint8 cbCardCount; //扑克数量; uint8 cbHandCardData[SSS_HAND_CARD_COUNT]; //手牌数据; }; //发牌状态; struct SSS_CMD_S_StatusSendCard { tagBaseStatus BaseStatus; uint16 wBankerUser; //庄家用户; bool bSendOver; //发牌结束; uint16 wSpecialType; //特殊牌型; uint8 cbCardCount; //扑克数量; uint8 cbHandCardData[SSS_HAND_CARD_COUNT]; //扑克牌数据; }; //开牌状态; struct SSS_CMD_S_StatusOpen { tagBaseStatus BaseStatus; uint16 wBankerUser; //庄家用户; uint16 wSpecialType; //特殊牌型; int lUserChipScore[SSS_GAME_PLAYER]; //下注分数; uint8 cbHandCardData[SSS_HAND_CARD_COUNT]; //扑克牌数据; }; //庄家玩家比牌; struct SSS_CMD_S_BankerCompareCard { uint8 cbHandStatus[SSS_GAME_PLAYER]; //手牌状态; uint8 cbFrontCard[SSS_GAME_PLAYER][3]; //玩家前墩; uint8 cbMidCard[SSS_GAME_PLAYER][5]; //玩家中墩; uint8 cbBackCard[SSS_GAME_PLAYER][5]; //玩家后墩; uint16 wHandCardType[SSS_GAME_PLAYER][3]; //每一道牌类型; uint8 cbBankerCmpResult[SSS_GAME_PLAYER][3]; //庄家其他玩家比牌每一道结果; uint8 cbOtherCmResult[SSS_GAME_PLAYER][3]; //其他玩家与庄家比牌每一道结果; }; //带庄家玩法比牌状态; struct SSS_CMD_S_StatusBankerCompare { uint16 wRobBankerTime; //抢庄时间; uint16 wUserChipTime; //下注时间; uint16 wBuildCardTime; //配牌时间; bool bCompareOver; //比牌结束; uint16 wBankerUser; //庄家用户; int lUserChipScore[SSS_GAME_PLAYER]; //下注分数; SSS_CMD_S_BankerCompareCard CompareStatus; //比牌状态; }; //玩家比牌; struct SSS_CMD_S_ClassicCompareCard { uint8 cbHandStatus[SSS_GAME_PLAYER]; //手牌状态; uint16 wSpecialType[SSS_GAME_PLAYER]; //特殊牌型; int nSpecialCompareResult[SSS_GAME_PLAYER]; //特殊牌型比较结果; uint8 cbFrontCard[SSS_GAME_PLAYER][SSS_MIN_ITEM_COUNT]; //玩家前墩; uint8 cbMidCard[SSS_GAME_PLAYER][SSS_MAX_ITEM_COUNT]; //玩家中墩; uint8 cbBackCard[SSS_GAME_PLAYER][SSS_MAX_ITEM_COUNT]; //玩家后墩; uint16 wHandCardType[SSS_GAME_PLAYER][SSS_GROUP_COUNT]; //每一道牌类型; int nCompareResult[SSS_GAME_PLAYER][SSS_GROUP_COUNT]; //每一道比较结果; bool bDaoshui[SSS_GAME_PLAYER]; //倒水; int aryShootDaoShu[SSS_GAME_PLAYER][SSS_GAME_PLAYER]; //用来计算一家和另一家打枪要加的水数; uint8 aryShootState[6][2]; //0为赢的玩家,1为输的玩家,值为255为无效玩家; uint8 cbShootCount; //几家打枪; int cbThreeKillResult[SSS_GAME_PLAYER]; //全垒打加减分; uint16 wAllUser; //全垒打用户; }; //比牌状态; struct SSS_CMD_S_StatusClassicCompare { uint16 wRobBankerTime; //抢庄时间; uint16 wUserChipTime; //下注时间; uint16 wBuildCardTime; //配牌时间; bool bCompareOver; //比牌结束; SSS_CMD_S_ClassicCompareCard CompareStatus; //比牌状态; }; ////////////////////////////////////////////////////////////////////////// //游戏开始; struct SSS_CMD_S_GameStart { uint16 wBankerChairID; //庄家ID; uint16 wSpecialType; //特殊牌型; uint8 cbBossCount; //王数量; uint8 cbCardCount; //扑克数量; uint8 cbHandCardData[SSS_HAND_CARD_COUNT]; //扑克数据; uint8 cbHandStatus[SSS_GAME_PLAYER]; //手牌状态; }; //玩家抢庄; struct SSS_CMD_S_UserRob { uint16 wRobUser; //抢庄玩家; bool bRobResult; //是否抢庄; }; //开始下注; struct SSS_CMD_S_StartChip { uint16 wBankerUser; //庄家用户; }; //玩家下注; struct SSS_CMD_S_UserChip { uint16 wChipUser; //下注玩家; int lChipScore; //下注分数; }; //玩家剩余的牌; struct SSS_CMD_S_SendLeftCard { uint8 cbLeftCardCount; //剩余的扑克数量; uint8 cbLeftCardData[SSS_HAND_CARD_COUNT]; //剩余的扑克数据; uint8 cbHandCardData[SSS_HAND_CARD_COUNT]; //扑克数据; }; //玩家摊牌; struct SSS_CMD_S_OpenCard { uint16 wChairID; //摊牌玩家; }; //游戏结束; struct SSS_CMD_S_GameEnd { bool isPrivateEnd; //私人场是否结束; uint8 cbHandStatus[SSS_GAME_PLAYER]; //手牌状态; SCORE lGameScore[SSS_GAME_PLAYER]; //游戏积分; }; ////////////////////////////////////////////////////////////////////////// //客户端命令结构; #define SSS_SUB_C_GETBANK 301 //抢庄命令; #define SSS_SUB_C_SEND_OVER 302 //发牌结束; #define SSS_SUB_C_OPEN_CARD 303 //玩家摊牌; #define SSS_SUB_C_COMPARE_OVER 304 //比牌完成; #define SSS_SUB_C_ROB_BANKER 305 //玩家抢庄; #define SSS_SUB_C_CHIP_SCORE 306 //玩家下注; //用户叫庄; struct SSS_CMD_C_RobBanker { bool bRob; //是否抢庄; }; //用户加注; struct SSS_CMD_C_ChipScore { int lScore; //下注数目; }; //分段信息; struct SSS_CMD_C_OpenCard { uint8 cbFrontCard[SSS_MIN_ITEM_COUNT]; //前墩扑克; uint8 cbMidCard[SSS_MAX_ITEM_COUNT]; //中墩扑克; uint8 cbBackCard[SSS_MAX_ITEM_COUNT]; //后墩扑克; uint16 wSpecialType; //是否是特殊牌; }; ////////////////////////////////////////////////////////////////////////// // 游戏解散结构; struct SSS_CMD_S_Private_End_Info { uint8 aryActiveStatus[SSS_GAME_PLAYER]; //手牌状态; SCORE lUserScore[SSS_GAME_PLAYER]; //玩家分数; uint8 aryWinTimes[SSS_GAME_PLAYER]; //赢次数; uint8 aryLoseTimes[SSS_GAME_PLAYER]; //输次数; uint8 aryShootTimes[SSS_GAME_PLAYER]; //打枪次数; uint8 aryKillAllTimes[SSS_GAME_PLAYER]; //全垒打次数; void StreamValue(DataStream& kData, bool bSend) { if (bSend) { kData.pushValue(this, sizeof(SSS_CMD_S_Private_End_Info)); } else { kData.popValue(this, sizeof(SSS_CMD_S_Private_End_Info)); } } }; ////////////////////////////////////////////////////////////////////////////////// #pragma pack() #endif