Files
2026-03-03 13:56:44 +08:00

284 lines
7.6 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#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