#ifndef _CMD_ZJH_GAME_HEAD_FILE_ #define _CMD_ZJH_GAME_HEAD_FILE_ #include "Types.h" #include "DataStream.h" #pragma pack(1) //游戏属性; #define ZJH_KIND_ID 6 //游戏ID; #define ZJH_GAME_PLAYER 5 //游戏人数; #define ZJH_GAME_NAME ("炸金花") //游戏名字; #define ZJH_MAX_COUNT 3 //扑克数目; //扑克掩码; #define ZJH_MASK_VALUE 0x0F //数值掩码; #define ZJH_MASK_COLOR 0xF0 //花色掩码; //玩家相关定义; #define ZJH_VIEW_L1_ID 0 //左1玩家; #define ZJH_VIEW_L2_ID 1 //左2玩家; #define ZJH_VIEW_SELF_ID 2 //自己玩家; #define ZJH_VIEW_R3_ID 3 //右2玩家; #define ZJH_VIEW_R4_ID 4 //右1玩家; //扑克类型; #define ZJH_CT_ERROR 0 //无效类型; #define ZJH_CT_SINGLE 1 //单牌类型; #define ZJH_CT_DOUBLE 2 //对子类型; #define ZJH_CT_SHUN_ZI 3 //顺子类型; #define ZJH_CT_JIN_HUA 4 //金花类型; #define ZJH_CT_SHUN_JIN 5 //顺金类型; #define ZJH_CT_BAO_ZI 6 //豹子类型; #define ZJH_CT_SPECIAL 7 //特殊类型; //开房规则枚举; enum tagZJHGameRuleEnum { eZJHGameRuleCardAA = 1, // 房卡AA eZJHGameRuleCompareRound1 = 1 << 1, // 1轮比牌; eZJHGameRuleCompareRound2 = 1 << 2, // 2轮比牌; eZJHGameRuleCompareRound3 = 1 << 3, // 3轮比牌; eZJHGameRuleOpenCardRound5 = 1 << 4, // 5轮开牌; eZJHGameRuleOpenCardRound10 = 1 << 5, // 10轮开牌; eZJHGameRuleOpenCardRound15 = 1 << 6, // 15轮开牌; eZJHGameRuleLookCardRound0 = 1 << 7, // 不闷牌; eZJHGameRuleLookCardRound2 = 1 << 8, // 闷2轮牌; eZJHGameRuleLookCardRound3 = 1 << 9, // 闷3轮牌; }; //游戏状态; #define ZJH_GS_FREE GAME_STATUS_FREE //等待开始; #define ZJH_GS_SEND_CARD GAME_STATUS_PLAY //发牌阶段; #define ZJH_GS_PLAYING (GAME_STATUS_PLAY + 1) //游戏状态; //游戏进行状态; #define ZJH_ST_GAMING_NULL 0 //旁观; #define ZJH_ST_GAMING_HIDDEN 1 //暗牌; #define ZJH_ST_GAMING_LOOK 2 //看牌; #define ZJH_ST_GAMING_LOSE 3 //比牌输; #define ZJH_ST_GAMING_GIVEUP 4 //放弃; //操作类型; #define ZJH_OPERATE_NULL 0x00 //无效; #define ZJH_OPERATE_GIVEUP 0x01 //放弃; #define ZJH_OPERATE_LOOK 0x02 //看牌; #define ZJH_OPERATE_FOLLOW 0x04 //跟注; #define ZJH_OPERATE_ADD_CHIP 0x08 //加注; #define ZJH_OPERATE_COMPARE_CARD 0x10 //比牌; //服务器命令码; #define ZJH_SUB_S_GAME_START 100 //游戏开始; #define ZJH_SUB_S_START_CHIP 101 //开始下注; #define ZJH_SUB_S_GIVE_UP 102 //放弃跟注; #define ZJH_SUB_S_USER_CHIP 103 //加注结果; #define ZJH_SUB_S_LOOK_CARD 104 //看牌跟注; #define ZJH_SUB_S_COMPARE_CARD 105 //比牌跟注; #define ZJH_SUB_S_GAME_END 106 //游戏结束; #define ZJH_SUB_S_CHEAT_CARD 111 //作弊消息; //客户端命令码; #define ZJH_SUB_C_SEND_OVER 1 //发牌结束; #define ZJH_SUB_C_USER_OPERATE 2 //用户操作; #define ZJH_SUB_C_MASTER_CONTROL 10 //; //游戏状态; typedef struct ZJH_CMD_S_StatusFree { int lCellScore; //基础积分; uint8 cbCurRound; //当前轮数; uint8 cbMaxRound; //最大轮数; int lCurChipScore; //当前注数; int lMaxChipScore; //最大可下注; uint16 wOperTimeOut; //操作超时时间; }ZJHStatusBase; //发牌状态; struct ZJH_CMD_S_StatusSendCard { ZJHStatusBase stBase; //基础信息; bool bSendOver; //发牌结束; uint16 wBankerUser; //庄家用户; uint8 aryGamingStatus[ZJH_GAME_PLAYER]; //玩家游戏状态; int aryUserChipScore[ZJH_GAME_PLAYER]; //玩家下注; }; //游戏状态; struct ZJH_CMD_S_StatusPlay { ZJHStatusBase stBase; //基础信息; uint16 wBankerUser; //庄家用户; uint16 wCurrentUser; //当前玩家; uint32 dwOperateCode; //操作码; uint8 aryGamingStatus[ZJH_GAME_PLAYER]; //玩家游戏状态; uint8 aryHandCardData[ZJH_MAX_COUNT]; //扑克数据; int aryUserChipScore[ZJH_GAME_PLAYER]; //玩家下注; }; //游戏开始; struct ZJH_CMD_S_GameStart { uint8 cbCurRound; //当前轮数; uint16 wBankerUser; //庄家用户; int lCurChipScore; //当前下注; uint8 aryGamingStatus[ZJH_GAME_PLAYER]; //玩家游戏状态; int aryUserChipScore[ZJH_GAME_PLAYER]; //玩家下注; }; //开始下注; typedef struct ZJH_CMD_S_StartChip { uint8 cbCurRound; //当前轮数; uint16 wCurrentUser; //当前用户; uint32 dwOperateCode; //操作掩码; int lCurChipScore; //当前下注; }ZJHChipInfo; //用户下注; struct ZJH_CMD_S_ChipScore { uint16 wChipUser; //加注用户; int lChipScore; //下注筹码; int lTtlChipScore; //总的下注; uint32 dwOperateCode; //操作类型; ZJHChipInfo stChipInfo; //当前下注信息; }; //用户放弃; struct ZJH_CMD_S_GiveUp { uint16 wGiveUpUser; //放弃玩家; ZJHChipInfo stChipInfo; //当前下注信息; }; //看牌数据包; struct ZJH_CMD_S_LookCard { uint16 wLookUser; //看牌玩家; uint8 aryCardData[ZJH_MAX_COUNT]; //玩家扑克; ZJHChipInfo stChipInfo; //当前下注信息; }; //比牌数据包; struct ZJH_CMD_S_CompareCard { bool bWin; //输赢结果; uint16 wChairID; //比牌者; uint16 wCompareUser; //被比牌者; int lChipScore; //下注筹码; int lTtlChipScore; //总的下注; ZJHChipInfo stChipInfo; //当前下注信息; }; //游戏结束; struct ZJH_CMD_S_GameEnd { bool isPrivateEnd; //私人场是否结束; uint8 aryGamingStatus[ZJH_GAME_PLAYER]; //玩家游戏状态; uint8 aryCardType[ZJH_GAME_PLAYER]; //玩家牌型; uint8 aryHandCardData[ZJH_GAME_PLAYER][ZJH_MAX_COUNT]; //用户扑克; int aryGameScore[ZJH_GAME_PLAYER]; //玩家游戏得分; int aryXiScore[ZJH_GAME_PLAYER]; //喜钱; }; //作弊消息; struct ZJH_CMD_S_CheatCardInfo { uint8 aryGamingStatus[ZJH_GAME_PLAYER]; //玩家游戏状态; uint8 aryHandCardData[ZJH_GAME_PLAYER][ZJH_MAX_COUNT]; //用户扑克; }; //用户操作; struct ZJH_CMD_C_UserOperate { uint32 dwCode; //操作码; int lData; //操作参数; }; // 游戏解散结构; struct ZJH_CMD_S_Private_End_Info { uint8 aryActiveStatus[ZJH_GAME_PLAYER]; //手牌状态; SCORE aryWinScore[ZJH_GAME_PLAYER]; //赢分; SCORE aryXiScore[ZJH_GAME_PLAYER]; //喜钱; SCORE aryTotalScore[ZJH_GAME_PLAYER]; //总得分; void StreamValue(DataStream& kData, bool bSend) { if (bSend) { kData.pushValue(this, sizeof(ZJH_CMD_S_Private_End_Info)); } else { kData.popValue(this, sizeof(ZJH_CMD_S_Private_End_Info)); } } }; ////////////////////////////////////////////////////////////////////////////////// #pragma pack() #endif