302 lines
7.9 KiB
C
302 lines
7.9 KiB
C
#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__
|