284 lines
7.6 KiB
C
284 lines
7.6 KiB
C
#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 |