#ifndef _CMD_NiuNiu_GAME_HEAD_FILE_ #define _CMD_NiuNiu_GAME_HEAD_FILE_ #include "Types.h" #include "DataStream.h" #pragma pack(1) //游戏属性; #define NN_KIND_ID 2 //游戏ID; #define NN_GAME_PLAYER 5 //游戏人数; #define NN_GAME_NAME ("牛牛") //游戏名字; #define NN_MAX_COUNT 5 //扑克数目; #define NN_FULL_COUNT 52 //最大牌库数量; #define NN_CTYPE_COUNT 12 //牌型数量; //扑克掩码; #define NN_MASK_VALUE 0x0F //数值掩码; #define NN_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 NN_MAX_NIU_TYPE 13 //最大牛类型; //玩家相关定义; #define NN_VIEW_L1_ID 0 //左1玩家; #define NN_VIEW_L2_ID 1 //左2玩家; #define NN_VIEW_SELF_ID 2 //自己玩家; #define NN_VIEW_R3_ID 3 //右2玩家; #define NN_VIEW_R4_ID 4 //右1玩家; //开房规则; #define NN_RULE_HUA_NIU 0x01 //有花牛; #define NN_RULE_SAN_ZHANG 0x02 //三张牛; #define NN_RULE_FREE_CHIP 0x04 //自由下注; #define NN_RULE_NIU_FAN 0x08 //有牛番; #define NN_BANKER_OWNER 1 //房主坐庄; #define NN_BANKER_TURNS 2 //轮流坐庄; #define NN_BANKER_ROB 3 //经典抢庄; #define NN_BANKER_ROB4 4 //翻4张抢庄; //游戏状态; #define NN_GS_TK_FREE GAME_STATUS_FREE //等待开始; #define NN_GS_TK_SEND_CARD GAME_STATUS_PLAY //发牌状态; #define NN_GS_TK_ROB_BANKER (GAME_STATUS_PLAY + 1) //抢庄状态; #define NN_GS_TK_USER_CHIP (GAME_STATUS_PLAY + 2) //下注状态; #define NN_GS_TK_OPEN_CARD (GAME_STATUS_PLAY + 3) //开牌状态; #define NN_GS_TK_SHOW_CARD (GAME_STATUS_PLAY + 4) //游戏结束; #define NN_OPEN_CARD_TIME 20 //开牌时间; //规则配置参数; struct tagNinNiuRuleCfg { uint16 wGameRule = 0; //游戏规则; uint16 wBankerRule = 0; //坐庄规则; uint8 cbMinFreeChip = 0; //最小下注; uint8 cbMaxFreeChip = 0; //最大下注; }; //空闲状态; struct NN_CMD_S_StatusFree { SCORE lCellScore; //基础积分; SCORE lMinFreeChip; //最小可下注; SCORE lMaxFreeChip; //最大可下注; uint8 cbHandCardCount; //手牌数量; bool bActiveStatus[NN_GAME_PLAYER]; //玩家状态; }; //发牌状态; struct NN_CMD_S_StatusSend { NN_CMD_S_StatusFree stStatusFree; //公共数据; uint16 wBankerUser; //庄家用户; uint8 cbSendStatus; //发牌状态; uint8 cbHandCardData[NN_MAX_COUNT]; //手牌数据; }; //抢庄状态; struct NN_CMD_S_StatusRob { NN_CMD_S_StatusFree stStatusFree; //公共数据; uint8 cbRobStatus[NN_GAME_PLAYER]; //抢庄状态 0:没操作,1:不抢,2:抢; uint8 cbHandCardData[NN_GAME_PLAYER][NN_MAX_COUNT];//手牌数据; }; //下注状态; struct NN_CMD_S_StatusChip { NN_CMD_S_StatusFree stStatusFree; //公共数据; uint16 wBankerUser; //庄家用户; uint8 cbChipStatus[NN_GAME_PLAYER]; //下注状态; SCORE lUserChipScore[NN_GAME_PLAYER]; //下注分数; uint8 cbHandCardData[NN_MAX_COUNT]; //手牌数据; }; //等待开牌状态; struct NN_CMD_S_StatusOpen { NN_CMD_S_StatusFree stStatusFree; //公共数据; uint16 wBankerUser; //庄家用户; SCORE lUserChipScore[NN_GAME_PLAYER]; //下注分数; uint8 cbOpenStatus[NN_GAME_PLAYER]; //开牌状态; uint8 cbHandCardType; //牌型; uint8 cbHandCardData[NN_MAX_COUNT]; //手牌数据; }; //所有人都开牌; struct NN_CMD_S_StatusAllOpen { NN_CMD_S_StatusFree stStatusFree; //公共数据; uint16 wBankerUser; //庄家用户; uint8 cbOpenStatus[NN_GAME_PLAYER]; //开牌状态; SCORE lUserChipScore[NN_GAME_PLAYER]; //下注分数; uint8 cbHandCardType[NN_GAME_PLAYER]; //牌型; uint8 cbHandCardData[NN_GAME_PLAYER][NN_MAX_COUNT];//手牌数据; }; ////////////////////////////////////////////////////////////////////////// //服务器命令; #define NN_SUB_S_GAME_START 100 //游戏开始; #define NN_SUB_S_START_ROB 101 //开始抢庄; #define NN_SUB_S_USER_ROB 102 //玩家抢庄; #define NN_SUB_S_START_CHIP 103 //开始下注; #define NN_SUB_S_USER_CHIP 104 //玩家下注; #define NN_SUB_S_START_OPEN 105 //开始开牌; #define NN_SUB_S_OPEN_CARD 106 //玩家开牌; #define NN_SUB_S_GAME_END 107 //游戏结束; #define NN_SUB_S_ALL_OPEN_CARD 108 //玩家开牌; //游戏开始; struct NN_CMD_S_GameStart { uint16 wBankerUser; //庄家用户; bool bActiveStatus[NN_GAME_PLAYER]; //玩家状态; uint8 cbHandCardCount; //手牌数量; uint8 cbHandCardData[NN_MAX_COUNT]; //手牌数据; }; //玩家抢庄; struct NN_CMD_S_UserRob { uint16 wRobUser; //抢庄玩家; bool bRobResult; //是否抢庄; }; //开始下注; struct NN_CMD_S_StartChip { uint16 wBankerUser; //庄家用户; }; //玩家下注; struct NN_CMD_S_UserChip { uint16 wChipUser; //下注玩家; SCORE lChipScore; //下注分数; }; //玩家开牌; struct NN_CMD_S_OpenCard { uint16 wOpenUser; //开牌玩家; uint8 cbCardType; //手牌类型; uint8 cbCardData[NN_MAX_COUNT]; //开牌数据; }; //所有人开牌; struct NN_CMD_S_AllOpenCard { bool bActiveStatus[NN_GAME_PLAYER]; //玩家状态; uint8 cbCardType[NN_GAME_PLAYER]; //手牌类型; uint8 cbHandCardData[NN_GAME_PLAYER][NN_MAX_COUNT];//手牌数据; }; //游戏结束; struct NN_CMD_S_GameEnd { uint8 cbCardType[NN_GAME_PLAYER]; //手牌类型; uint8 cbHandCardData[NN_GAME_PLAYER][NN_MAX_COUNT]; //手牌数据; SCORE lAllScore[NN_GAME_PLAYER]; //; SCORE lGameScore[NN_GAME_PLAYER]; //游戏得分; SCORE lRevenue[NN_GAME_PLAYER]; //税收; }; //总结算数据; struct NN_CMD_S_FinishData { bool bActiveStatus[NN_GAME_PLAYER]; //手牌状态; uint8 cbCardTypeCount[NN_GAME_PLAYER][12]; //牌型数量; SCORE lTotalScore[NN_GAME_PLAYER]; //总得分; }; ////////////////////////////////////////////////////////////////////////// //客户端命令; #define NN_SUB_C_SEND_OVER 1 //发牌完成; #define NN_SUB_C_ROB_BANKER 2 //玩家抢庄; #define NN_SUB_C_CHIP_SCORE 3 //玩家下注; #define NN_SUB_C_OPEN_CARD 4 //玩家开牌; //用户叫庄; struct NN_CMD_C_RobBanker { bool bRob; //是否抢庄; }; //用户加注; struct NN_CMD_C_ChipScore { SCORE lScore; //下注数目; }; ////////////////////////////////////////////////////////////////////////////////// enum EN_NN_RESULT_TYPE { NN_RT_ALL_WIN = 0, // 通杀; NN_RT_ALL_LOSE, // 通赔; NN_RT_NIUNIU, // 牛牛; NN_RT_WIN, // 赢; }; // 游戏解散结构; struct NN_CMD_S_Private_End_Info { WORD wMainChairID; // 房主; BYTE cbFinishCout; // 完成局数; bool aryActiveStatus[NN_GAME_PLAYER]; // 手牌状态; SCORE lAllScore[NN_GAME_PLAYER]; // 总成绩; BYTE aryResultTypeCount[NN_GAME_PLAYER][4]; // 牌型数量; void StreamValue(DataStream& kData, bool bSend) { if (bSend) { kData.pushValue(this, sizeof(NN_CMD_S_Private_End_Info)); } else { kData.popValue(this, sizeof(NN_CMD_S_Private_End_Info)); } } }; enum eNNRuleEnum { eNNRuleEnum_NULL = 0, //NULL; 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() #endif