Files
wnmj-normal/Classes/Games/ZJH/ZJH_CMD.h
2026-03-03 13:56:44 +08:00

228 lines
6.4 KiB
C

#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