#ifndef CMD_GAME_HEAD_FILE #define CMD_GAME_HEAD_FILE #pragma pack(1) ////////////////////////////////////////////////////////////////////////////////// //服务定义 //游戏属性 #define KIND_ID 210 //游戏 I D #define GAME_NAME TEXT("跑得快") //游戏名字 //组件属性 #define GAME_PLAYER 3 //游戏人数 #define GAME_PLAYER_2 2 //游戏人数 #define VERSION_SERVER PROCESS_VERSION(6,0,3) //程序版本 #define VERSION_CLIENT PROCESS_VERSION(6,0,3) //程序版本 ////////////////////////////////////////////////////////////////////////////////// //数目定义 #define MAX_COUNT 16 //最大数目 #define FULL_COUNT 48 //全牌数目 #define FULL_COUNT_15 45 //全牌数目 #define MAX_MUSTCARD_COUT 11 //必出牌数目 //逻辑数目 #define NORMAL_COUNT 16 //常规数目 #define DISPATCH_COUNT 51 //派发数目 #define GOOD_CARD_COUTN 22 //好牌数目 //数值掩码 #define MASK_COLOR 0xF0 //花色掩码 #define MASK_VALUE 0x0F //数值掩码 //逻辑类型 #define CT_ERROR 0 //错误类型 #define CT_SINGLE 1 //单牌类型 #define CT_DOUBLE 2 //对牌类型 #define CT_SINGLE_LINE 4 //单连类型 #define CT_DOUBLE_LINE 5 //对连类型 #define CT_THREE_LINE 6 //三连类型(飞机); #define CT_THREE_TAKE_TWO 7 //三带一对 #define CT_FOUR_TAKE_THREE 8 //四带两单 #define CT_BOMB_CARD 9 //炸弹类型 #define CT_3A_BOMB_CARD 10 //炸弹类型 /////////////////////////////////////////////////////////////////////////////////// //底牌类型 #define BCT_DOUBLE_JOKER 201 //双王 #define BCT_THREE_2 202 //三二 #define BCT_SINGLE_JOKER_DOUBLE_2 203 //单王双2 #define BCT_TONGHUASHUN 204 //同花顺 #define BCT_SINGLE_JOKER 205 //单王 #define BCT_DOUBLE_2 206 //双2 #define BCT_SHUNZI 207 //顺子 #define BCT_ALL_LITTLE 208 //全小 #define BCT_NORMAL 209 //普通牌 ////////////////////////////////////////////////////////////////////////////////// //状态定义 #define GAME_SCENE_FREE GAME_STATUS_FREE //等待开始 #define GAME_SCENE_SEND GAME_STATUS_PLAY //发牌状态 #define GAME_SCENE_CALL GAME_STATUS_PLAY+1 //叫分状态 #define GAME_SCENE_PLAY GAME_STATUS_PLAY+2 //游戏进行 //空闲状态 struct CMD_S_StatusFree { //时间信息 BYTE cbTimeOutCard; //出牌时间 BYTE cbTimeCallScore; //叫分时间 BYTE cbTimeStartGame; //开始时间 BYTE cbTimeHeadOutCard; //首出时间 }; //叫分状态 struct CMD_S_StatusSend { //时间信息 BYTE cbTimeOutCard; //出牌时间 BYTE cbTimeCallScore; //叫分时间 BYTE cbTimeStartGame; //开始时间 BYTE cbTimeHeadOutCard; //首出时间 DWORD dwGameRule; //游戏规则; bool bActiveStatus[GAME_PLAYER]; //玩家状态; //游戏信息 BYTE cbHandCardCount[GAME_PLAYER]; //手牌数量; BYTE cbHandCardData[NORMAL_COUNT]; //手上扑克 }; //叫分状态 struct CMD_S_StatusCall { //时间信息 BYTE cbTimeOutCard; //出牌时间 BYTE cbTimeCallScore; //叫分时间 BYTE cbTimeStartGame; //开始时间 BYTE cbTimeHeadOutCard; //首出时间 DWORD dwGameRule; //游戏规则; bool bActiveStatus[GAME_PLAYER]; //玩家状态; //比出牌信息; WORD wCurrentUser; //比出牌玩家; BYTE cbMustOutCard; //必出牌信息; //游戏信息 bool bScoreInfo[GAME_PLAYER]; //叫分信息 bool bScoreActive[GAME_PLAYER]; //叫分操作; BYTE cbHandCardCount[GAME_PLAYER]; //手牌数量; BYTE cbHandCardData[NORMAL_COUNT]; //手上扑克 }; //游戏状态 struct CMD_S_StatusPlay { //时间信息 BYTE cbTimeOutCard; //出牌时间 BYTE cbTimeCallScore; //叫分时间 BYTE cbTimeStartGame; //开始时间 BYTE cbTimeHeadOutCard; //首出时间 DWORD dwGameRule; //游戏规则; bool bActiveStatus[GAME_PLAYER]; //玩家状态; //游戏变量 WORD wBankerUser; //庄家用户 WORD wCurrentUser; //当前玩家 BYTE cbMustOutCard; //必出牌信息; //出牌信息 WORD wTurnWiner; //胜利玩家 BYTE cbTurnCardCount; //出牌数目 BYTE cbTurnCardData[MAX_COUNT]; //出牌数据 //扑克信息 BYTE cbHandCardData[MAX_COUNT]; //手上扑克 BYTE cbHandCardCount[GAME_PLAYER]; //扑克数目 }; ////////////////////////////////////////////////////////////////////////////////// //命令定义 #define SUB_S_GAME_START 100 //游戏开始 #define SUB_S_CALL_SCORE 101 //用户叫分 #define SUB_S_BANKER_INFO 102 //庄家信息 #define SUB_S_OUT_CARD 103 //用户出牌 #define SUB_S_PASS_CARD 104 //用户放弃 #define SUB_S_GAME_CONCLUDE 105 //游戏结束 #define SUB_S_SET_BASESCORE 106 //设置基数 #define SUB_S_CHEAT_CARD 107 //作弊扑克 #define SUB_S_TRUSTEE 108 //托管 #define SUB_S_START_SCORE 109 //开始叫分 //发送扑克 //struct CMD_S_GameStart //{ // WORD wStartUser; //开始玩家 // WORD wCurrentUser; //当前玩家 // bool bHasDaDu; //是否打独 // BYTE cbCardCount[GAME_PLAYER]; //扑克牌数量; // BYTE cbCardData[NORMAL_COUNT]; //扑克列表 //}; struct CMD_S_GameStart { DWORD dwGameRule; //游戏规则; WORD wStartUser; //开始玩家 bool bActiveStatus[GAME_PLAYER]; //玩家状态; BYTE cbCardCount[GAME_PLAYER]; //扑克牌数量; BYTE cbCardData[NORMAL_COUNT]; //扑克列表 }; //录像开始; struct CMD_Record_GameStart { DWORD dwGameRule; //游戏规则; WORD wStartUser; //开始玩家 WORD wCurrentUser; //当前玩家 bool bActiveStatus[GAME_PLAYER]; //玩家状态; }; //机器人扑克 struct CMD_S_AndroidCard { BYTE cbHandCard[GAME_PLAYER][NORMAL_COUNT];//手上扑克 BYTE cbBankerCard[3]; WORD wCurrentUser ; //当前玩家 }; //作弊扑克 struct CMD_S_CheatCard { WORD wCardUser[GAME_PLAYER ]; //作弊玩家 BYTE cbUserCount; //作弊数量 BYTE cbCardData[GAME_PLAYER ][MAX_COUNT]; //扑克列表 BYTE cbCardCount[GAME_PLAYER ]; //扑克数量 }; //用户叫分 struct CMD_S_CallScore { WORD wCallScoreUser; //叫分玩家 bool bCurrentScore; //当前叫分 }; //通知抢庄; struct CMD_S_SendCallScore { WORD wBankerUser; //庄家玩家 BYTE cbMustOutCard; //必出牌; }; //庄家信息 struct CMD_S_BankerInfo { WORD wBankerUser; //庄家玩家 WORD wCurrentUser; //当前玩家 bool bShowMustOutCard; //是否显示必打牌 BYTE cbMustOutCard; //必出牌; }; //用户出牌 struct CMD_S_OutCard { BYTE cbCardCount; //出牌数目 WORD wCurrentUser; //当前玩家 WORD wOutCardUser; //出牌玩家 bool bLastCard; //最后一手 BYTE cbCardData[MAX_COUNT]; //扑克列表 }; //放弃出牌 struct CMD_S_PassCard { BYTE cbTurnOver; //一轮结束 WORD wCurrentUser; //当前玩家 WORD wPassCardUser; //放弃玩家 }; //游戏结束 struct CMD_S_GameConclude { //积分变量 LONG lCellScore; //单元积分 bool bActiveStatus[GAME_PLAYER]; //玩家状态; SCORE lGameScore[GAME_PLAYER]; //游戏积分 SCORE lBombScore[GAME_PLAYER]; //游戏积分 SCORE lAllScore[GAME_PLAYER]; //总成绩; //春天标志 BYTE bChunTian; //春天标志 BYTE bFanChunTian; //春天标志 //炸弹信息 BYTE cbBombCount; //炸弹个数 BYTE cbEachBombCount[GAME_PLAYER]; //炸弹个数 //游戏信息 BYTE cbBankerScore; //叫分数目 BYTE cbCardCount[GAME_PLAYER]; //扑克数目 BYTE cbHandCardData[FULL_COUNT]; //扑克列表 }; //托管 struct CMD_S_TRUSTEE { WORD wTrusteeUser; //托管玩家 bool bTrustee; //托管标志 }; ////////////////////////////////////////////////////////////////////////////////// //命令定义 #define SUB_C_CALL_SCORE 1 //用户叫分 #define SUB_C_OUT_CARD 2 //用户出牌 #define SUB_C_PASS_CARD 3 //用户放弃 #define SUB_C_TRUSTEE 4 //用户托管 //用户叫分 struct CMD_C_CallScore { bool bCallScore; //叫分数目 }; //用户出牌 struct CMD_C_OutCard { BYTE cbCardCount; //出牌数目 BYTE cbCardData[MAX_COUNT]; //扑克数据 }; //托管 struct CMD_C_TRUSTEE { bool bTrustee; //托管标志 }; ////////////////////////////////////////////////////////////////////////////////// enum ePDKRuleEnum { ePDKRuleEnum_HandCardCount = 1 << 1, //手牌张数 1是16张,0是15张; ePDKRuleEnum_OutCardRule = 1 << 2, //出牌规则 1是红桃3先出,0是首局红桃3出牌,下局胜者出牌; ePDKRuleEnum_MustOutCard = 1 << 3, //有牌必须出; ePDKRuleEnum_3ABomb = 1 << 4, //3个A是炸弹; ePDKRuleEnum_FOUR_TAKE_THREE = 1 << 5, //四带三; ePDKRuleEnum_DADU = 1 << 6, //打独; ePDKRuleEnum_Bomb_Score = 1 << 7, //炸弹+10; ePDKRuleEnum_PlayCount = 1 << 8, //游戏人数 1是3人,0是2人; }; // 游戏解散结构 struct CMD_S_Private_End_Info { WORD wMainChairID; // 房主 BYTE cbFinishCout; // 完成局数 bool aryActiveStatus[GAME_PLAYER]; // 手牌状态; SCORE lAllScore[GAME_PLAYER]; // 总成绩 SCORE lDetails[GAME_PLAYER][16]; // 成绩明细(目前开房最大16局) void StreamValue(DataStream& kData, bool bSend) { if (bSend) { kData.pushValue(this, sizeof(CMD_S_Private_End_Info)); } else { kData.popValue(this, sizeof(CMD_S_Private_End_Info)); } } }; #pragma pack() #endif