#ifndef CMD_NiuNiu_h__ #define CMD_NiuNiu_h__ //公共宏定义; #define KIND_ID 2 //游戏ID; #define GAME_PLAYER 5 //游戏人数; #define GAME_NAME TEXT("房卡牛牛") //游戏名字; #define EXPORT_NAME TEXT("NiuNiu") //导出名称; #define VERSION_SERVER PROCESS_VERSION(6,0,3) //程序版本; #define VERSION_CLIENT PROCESS_VERSION(6,0,3) //程序版本; //数量定义; #define MAX_COUNT 5 //手牌数量; #define FULL_COUNT 52 //牌库数量; //扑克掩码; #define MASK_VALUE 0x0F //数值掩码; #define MASK_COLOR 0xF0 //花色掩码; //牌型定义; #define NIU_TYPE_0 0 //无牛; #define NIU_TYPE_1 1 //牛一; #define NIU_TYPE_2 2 //牛二; #define NIU_TYPE_3 3 //牛三; #define NIU_TYPE_4 4 //牛四; #define NIU_TYPE_5 5 //牛五; #define NIU_TYPE_6 6 //牛六; #define NIU_TYPE_7 7 //牛七; #define NIU_TYPE_8 8 //牛八; #define NIU_TYPE_9 9 //牛九; #define NIU_TYPE_10 10 //牛牛; #define NIU_TYPE_WHN 11 //五花牛; #define NIU_TYPE_SHN 12 //四炸; #define NIU_TYPE_WXN 13 //五小牛; #define MAX_NIU_TYPE 13 //最大牛类型; //规则定义; #define RULE_HUA_NIU 0x01 //有花牛; #define RULE_SAN_ZHANG 0x02 //三张牛; #define RULE_FREE_CHIP 0x04 //自由下注; #define RULE_NIU_FAN 0x08 //有牛番; #define BANKER_OWNER 1 //房主坐庄; #define BANKER_TURNS 2 //轮流坐庄; #define BANKER_ROB 3 //经典抢庄; #define BANKER_ROB4 4 //翻4张抢庄; enum eNNRuleEnum { eNNRuleEnum_CardAA = 1, //房卡AA; eNNRuleEnum_BANKER_OWNER = 1 << 1, //房主坐庄;; eNNRuleEnum_BANKER_TURNS = 1 << 2, //轮流坐庄; eNNRuleEnum_BANKER_ROB = 1 << 3, //经典抢庄;; eNNRuleEnum_BANKER_ROB4 = 1 << 4, //翻4张抢庄; eNNRuleEnum_NO_SPECIAL_NIU = 1 << 5, //无特殊牛; eNNRuleEnum_BAYONET = 1 << 6, //拼刺刀; eNNRuleEnum_WHN = 1 << 7, //五花牛; eNNRuleEnum_BOMB = 1 << 8, //炸弹; eNNRuleEnum_WXN = 1 << 9, //五小牛; }; #pragma pack(1) //规则配置参数; typedef struct tagGameRuleCfg { WORD wGameRule = 0; //游戏规则; WORD wBankerRule = 0; //坐庄规则; BYTE cbMinFreeChip = 0; //最小下注; BYTE cbMaxFreeChip = 0; //最大下注; } tagOpenRuleCfg; //状态命令; #define GS_NN_FREE GAME_STATUS_FREE //空闲状态; #define GS_NN_SEND_CARD GAME_STATUS_PLAY //发牌状态; #define GS_NN_ROB_BANKER (GAME_STATUS_PLAY+1) //抢庄状态; #define GS_NN_USER_CHIP (GAME_STATUS_PLAY+2) //下注状态; #define GS_NN_OPEN_CARD (GAME_STATUS_PLAY+3) //开牌状态; #define GS_NN_SHOW_CARD (GAME_STATUS_PLAY+4) //亮牌状态; ////////////////////////////////////////////////////////////////////////////////////// //控制类型; typedef enum{ CONTINUE_WIN, CONTINUE_LOST, CONTINUE_CANCEL }CONTROL_TYPE; //控制结果 控制成功 、控制失败 、控制取消成功 、控制取消无效; typedef enum{ CONTROL_SUCCEED, CONTROL_FAIL, CONTROL_CANCEL_SUCCEED, CONTROL_CANCEL_INVALID }CONTROL_RESULT; //用户行为; typedef enum{ USER_SITDOWN, USER_STANDUP, USER_OFFLINE, USER_RECONNECT }USERACTION; //控制信息; typedef struct { CONTROL_TYPE control_type; //控制类型; BYTE cbControlCount; //控制局数; bool bCancelControl; //取消标识; }USERCONTROL; //房间用户信息; typedef struct { WORD wChairID; //椅子ID; WORD wTableID; //桌子ID; DWORD dwGameID; //GAMEID; bool bAndroid; //机器人标识; TCHAR szNickName[LEN_NICKNAME]; //用户昵称; BYTE cbUserStatus; //用户状态; BYTE cbGameStatus; //游戏状态; }ROOMUSERINFO; //房间用户控制; typedef struct { ROOMUSERINFO roomUserInfo; //房间用户信息; USERCONTROL userControl; //用户控制; }ROOMUSERCONTROL; ////////////////////////////////////////////////////////////////////////////////////// //空闲状态; struct CMD_S_StatusFree { LONG lCellScore; //基础积分; LONG lMinFreeChip; //最小可下注; LONG lMaxFreeChip; //最大可下注; BYTE cbHandCardCount; //手牌数量; bool bActiveStatus[GAME_PLAYER]; //玩家状态; }; //发牌状态; struct CMD_S_StatusSend { CMD_S_StatusFree stStatusFree; //公共数据; WORD wBankerUser; //庄家用户; BYTE cbSendStatus; //发牌状态; BYTE cbHandCardData[MAX_COUNT]; //手牌数据; }; //抢庄状态; struct CMD_S_StatusRob { CMD_S_StatusFree stStatusFree; //公共数据; BYTE cbRobStatus[GAME_PLAYER]; //抢庄状态 0:没操作,1:不抢,2:抢; BYTE cbHandCardData[GAME_PLAYER][MAX_COUNT];//手牌数据; }; //下注状态; struct CMD_S_StatusChip { CMD_S_StatusFree stStatusFree; //公共数据; WORD wBankerUser; //庄家用户; BYTE cbChipStatus[GAME_PLAYER]; //下注状态; LONG lUserChipScore[GAME_PLAYER];//下注分数; BYTE cbHandCardData[MAX_COUNT]; //手牌数据; }; //等待开牌状态; struct CMD_S_StatusOpen { CMD_S_StatusFree stStatusFree; //公共数据; WORD wBankerUser; //庄家用户; LONG lUserChipScore[GAME_PLAYER];//下注分数; BYTE cbOpenStatus[GAME_PLAYER]; //开牌状态; BYTE cbHandCardType; //牌型; BYTE cbHandCardData[MAX_COUNT]; //手牌数据; }; //显示所有人牌状态; struct CMD_S_StatusAllOpen { CMD_S_StatusFree stStatusFree; //公共数据; WORD wBankerUser; //庄家用户; BYTE cbOpenStatus[GAME_PLAYER]; //开牌状态; LONG lUserChipScore[GAME_PLAYER];//下注分数; BYTE cbHandCardType[GAME_PLAYER];//牌型; BYTE cbHandCardData[GAME_PLAYER][MAX_COUNT];//手牌数据; }; ////////////////////////////////////////////////////////////////////////// //服务器命令; #define SUB_S_GAME_START 100 //游戏开始; #define SUB_S_START_ROB 101 //开始抢庄; #define SUB_S_USER_ROB 102 //玩家抢庄; #define SUB_S_START_CHIP 103 //开始下注; #define SUB_S_USER_CHIP 104 //玩家下注; #define SUB_S_START_OPEN 105 //开始开牌; #define SUB_S_OPEN_CARD 106 //玩家开牌; #define SUB_S_GAME_END 107 //游戏结束; #define SUB_S_ALL_OPEN_CARD 108 //玩家开牌; //游戏开始; struct CMD_S_GameStart { WORD wBankerUser; //庄家用户; bool bActiveStatus[GAME_PLAYER]; //玩家状态; BYTE cbHandCardCount; //手牌数量; BYTE cbHandCardData[MAX_COUNT]; //手牌数据; }; //玩家抢庄; struct CMD_S_UserRob { WORD wRobUser; //抢庄玩家; bool bRobResult; //是否抢庄; }; //开始下注; struct CMD_S_StartChip { WORD wBankerUser; //庄家用户; }; //玩家下注; struct CMD_S_UserChip { WORD wChipUser; //下注玩家; LONG lChipScore; //下注分数; }; //玩家开牌; struct CMD_S_OpenCard { WORD wOpenUser; //开牌玩家; BYTE cbCardType; //手牌类型; BYTE cbCardData[MAX_COUNT]; //开牌数据; }; //所有人开牌; struct CMD_S_AllOpenCard { bool bActiveStatus[GAME_PLAYER]; //玩家状态; BYTE cbCardType[GAME_PLAYER]; //手牌类型; BYTE cbHandCardData[GAME_PLAYER][MAX_COUNT];//手牌数据; }; //游戏结束; struct CMD_S_GameEnd { BYTE cbCardType[GAME_PLAYER]; //手牌类型; BYTE cbHandCardData[GAME_PLAYER][MAX_COUNT];//手牌数据; LONG lAllScore[GAME_PLAYER]; //游戏得分; LONG lGameScore[GAME_PLAYER]; //游戏得分; LONG lRevenue[GAME_PLAYER]; //税收; }; ////////////////////////////////////////////////////////////////////////// //客户端命令; #define SUB_C_SEND_OVER 1 //发牌完成; #define SUB_C_ROB_BANKER 2 //玩家抢庄; #define SUB_C_CHIP_SCORE 3 //玩家下注; #define SUB_C_OPEN_CARD 4 //玩家开牌; //用户叫庄; struct CMD_C_RobBanker { bool bRob; //是否抢庄; }; //用户加注; struct CMD_C_ChipScore { LONG lScore; //下注数目; }; enum EN_NN_RESULT_TYPE { NN_RT_ALL_WIN = 0, // 通杀; NN_RT_ALL_LOSE, // 通赔; NN_RT_NIUNIU, // 牛牛; NN_RT_WIN, // 赢; }; // 游戏解散结构; struct CMD_S_Private_End_Info { WORD wMainChairID; // 房主; BYTE cbFinishCout; // 完成局数; bool aryActiveStatus[GAME_PLAYER]; // 手牌状态; SCORE lAllScore[GAME_PLAYER]; // 总成绩; BYTE aryResultTypeCount[GAME_PLAYER][4]; //牌型数量; 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 // CMD_NiuNiu_h__