#ifndef CMD_ZJH_h__ #define CMD_ZJH_h__ #pragma once //宏定义; #define KIND_ID 6 //游戏ID; #define GAME_PLAYER 5 //游戏人数; #define GAME_NAME TEXT("诈金花") //游戏名字; #define EXPORT_NAME TEXT("ZJH") //导出名称; #define VERSION_SERVER PROCESS_VERSION(6,0,3) //程序版本; #define VERSION_CLIENT PROCESS_VERSION(6,0,3) //程序版本; //扑克; #define MAX_COUNT 3 //扑克数目; #define FULL_COUNT 52 //扑克总数; #define MASK_COLOR 0xF0 //花色掩码; #define MASK_VALUE 0x0F //数值掩码; //牌型; #define CT_ERROR 0 //无效类型; #define CT_SINGLE 1 //单牌类型; #define CT_DOUBLE 2 //对子类型; #define CT_SHUN_ZI 3 //顺子类型; #define CT_JIN_HUA 4 //金花类型; #define CT_SHUN_JIN 5 //顺金类型; #define CT_BAO_ZI 6 //豹子类型; #define CT_SPECIAL 7 //235类型; //游戏状态; #define GS_ZJH_FREE GAME_STATUS_FREE //空闲状态; #define GS_ZJH_SEND_CARD GAME_STATUS_PLAY //发牌阶段; #define GS_ZJH_PLAYING (GAME_STATUS_PLAY+1) //游戏进行; //游戏进行状态; #define ST_GAMING_NULL 0 //旁观; #define ST_GAMING_HIDDEN 1 //暗牌; #define ST_GAMING_LOOK 2 //看牌; #define ST_GAMING_LOSE 3 //比牌输; #define ST_GAMING_GIVEUP 4 //放弃; //操作类型; #define OPERATE_NULL 0x00 //无效; #define OPERATE_GIVEUP 0x01 //放弃; #define OPERATE_LOOK 0x02 //看牌; #define OPERATE_FOLLOW 0x04 //跟注; #define OPERATE_ADD_CHIP 0x08 //加注; #define OPERATE_COMPARE_CARD 0x10 //比牌; //服务器命令码; #define SUB_S_GAME_START 100 //游戏开始; #define SUB_S_START_CHIP 101 //开始下注; #define SUB_S_GIVE_UP 102 //放弃跟注; #define SUB_S_USER_CHIP 103 //加注结果; #define SUB_S_LOOK_CARD 104 //看牌跟注; #define SUB_S_COMPARE_CARD 105 //比牌跟注; #define SUB_S_GAME_END 106 //游戏结束; #define SUB_S_CHEAT_CARD 111 //作弊消息; //客户端命令码; #define SUB_C_SEND_OVER 1 //发牌结束; #define SUB_C_USER_OPERATE 2 //用户操作; #define SUB_C_MASTER_CONTROL 10 //作弊控制; #pragma pack(1) //开房规则枚举; 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轮牌; }; //游戏状态; typedef struct CMD_S_StatusFree { LONG lCellScore; //基础积分; BYTE cbCurRound; //当前轮数; BYTE cbMaxRound; //最大轮数; LONG lCurChipScore; //当前注数; LONG lMaxChipScore; //最大可下注; WORD wOperTimeOut; //操作超时时间; }StatusBase; //发牌状态; struct CMD_S_StatusSendCard { StatusBase stBase; //基础信息; bool bSendOver; //发牌结束; WORD wBankerUser; //庄家用户; BYTE cbGamingStatus[GAME_PLAYER]; //玩家游戏状态; LONG lUserChipScore[GAME_PLAYER]; //玩家下注; }; //游戏状态; struct CMD_S_StatusPlay { StatusBase stBase; //基础信息 WORD wBankerUser; //庄家用户 WORD wCurrentUser; //当前玩家 DWORD dwOperateCode; //操作码 BYTE cbGamingStatus[GAME_PLAYER]; //玩家游戏状态 BYTE cbHandCardData[MAX_COUNT]; //扑克数据 LONG lUserChipScore[GAME_PLAYER]; //玩家下注 }; //游戏开始; struct CMD_S_GameStart { BYTE cbCurRound; //当前轮数; WORD wBankerUser; //庄家用户; LONG lCurChipScore; //当前下注; BYTE cbGamingStatus[GAME_PLAYER]; //玩家游戏状态; LONG lUserChipScore[GAME_PLAYER]; //玩家下注; }; //开始下注; typedef struct CMD_S_StartChip { BYTE cbCurRound; //当前轮数; WORD wCurrentUser; //当前用户; DWORD dwOperateCode; //操作掩码; LONG lCurChipScore; //当前下注; }ChipInfo; //用户下注; struct CMD_S_ChipScore { WORD wChipUser; //加注用户; LONG lChipScore; //下注筹码; LONG lTtlChipScore; //总的下注; DWORD dwOperateCode; //操作类型; ChipInfo stChipInfo; //当前下注信息; }; //用户放弃; struct CMD_S_GiveUp { WORD wGiveUpUser; //放弃玩家; ChipInfo stChipInfo; //当前下注信息; }; //看牌数据包; struct CMD_S_LookCard { WORD wLookUser; //看牌玩家; BYTE cbCardData[MAX_COUNT]; //玩家扑克; ChipInfo stChipInfo; //当前下注信息; }; //比牌数据包; struct CMD_S_CompareCard { bool bWin; //输赢结果; WORD wChairID; //比牌者; WORD wCompareUser; //被比牌者; LONG lChipScore; //下注筹码; LONG lTtlChipScore; //总的下注; ChipInfo stChipInfo; //当前下注信息; }; //游戏结束; struct CMD_S_GameEnd { bool isPrivateEnd; //私人场是否结束; BYTE cbGamingStatus[GAME_PLAYER]; //玩家游戏状态; BYTE cbCardType[GAME_PLAYER]; //玩家牌型; BYTE cbHandCardData[GAME_PLAYER][MAX_COUNT]; //用户扑克; LONG lGameScore[GAME_PLAYER]; //玩家游戏得分; LONG lXiScore[GAME_PLAYER]; //喜钱; }; //用户操作; struct CMD_C_UserOperate { DWORD dwCode; //操作码; LONG lData; //操作参数; }; //机器人扑克; struct CMD_S_CheatCardInfo { BYTE cbGamingStatus[GAME_PLAYER]; //玩家游戏状态; BYTE cbHandCardData[GAME_PLAYER][MAX_COUNT]; //用户扑克; }; // 游戏解散结构; struct CMD_S_Private_End_Info { BYTE aryActiveStatus[GAME_PLAYER]; //手牌状态; SCORE aryWinScore[GAME_PLAYER]; //赢分; SCORE aryXiScore[GAME_PLAYER]; //喜钱; SCORE aryTotalScore[GAME_PLAYER]; //总得分; 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_ZJH_h__