Files
wnmj-normal/Servers/游戏组件/跑的快/消息定义/CMD_Game.h
2026-03-03 13:56:44 +08:00

341 lines
9.4 KiB
C
Raw 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_GAME_HEAD_FILE
#define CMD_GAME_HEAD_FILE
#pragma pack(1)
//////////////////////////////////////////////////////////////////////////////////
//服务定义
//游戏属性
#define KIND_ID 210 //游戏 I D
#define GAME_NAME TEXT("跑得快") //游戏名字
//组件属性
#define GAME_PLAYER 3 //游戏人数
#define GAME_PLAYER_2 2 //游戏人数
#define VERSION_SERVER PROCESS_VERSION(6,0,3) //程序版本
#define VERSION_CLIENT PROCESS_VERSION(6,0,3) //程序版本
//////////////////////////////////////////////////////////////////////////////////
//数目定义
#define MAX_COUNT 16 //最大数目
#define FULL_COUNT 48 //全牌数目
#define FULL_COUNT_15 45 //全牌数目
#define MAX_MUSTCARD_COUT 11 //必出牌数目
//逻辑数目
#define NORMAL_COUNT 16 //常规数目
#define DISPATCH_COUNT 51 //派发数目
#define GOOD_CARD_COUTN 22 //好牌数目
//数值掩码
#define MASK_COLOR 0xF0 //花色掩码
#define MASK_VALUE 0x0F //数值掩码
//逻辑类型
#define CT_ERROR 0 //错误类型
#define CT_SINGLE 1 //单牌类型
#define CT_DOUBLE 2 //对牌类型
#define CT_SINGLE_LINE 4 //单连类型
#define CT_DOUBLE_LINE 5 //对连类型
#define CT_THREE_LINE 6 //三连类型(飞机);
#define CT_THREE_TAKE_TWO 7 //三带一对
#define CT_FOUR_TAKE_THREE 8 //四带两单
#define CT_BOMB_CARD 9 //炸弹类型
#define CT_3A_BOMB_CARD 10 //炸弹类型
///////////////////////////////////////////////////////////////////////////////////
//底牌类型
#define BCT_DOUBLE_JOKER 201 //双王
#define BCT_THREE_2 202 //三二
#define BCT_SINGLE_JOKER_DOUBLE_2 203 //单王双2
#define BCT_TONGHUASHUN 204 //同花顺
#define BCT_SINGLE_JOKER 205 //单王
#define BCT_DOUBLE_2 206 //双2
#define BCT_SHUNZI 207 //顺子
#define BCT_ALL_LITTLE 208 //全小
#define BCT_NORMAL 209 //普通牌
//////////////////////////////////////////////////////////////////////////////////
//状态定义
#define GAME_SCENE_FREE GAME_STATUS_FREE //等待开始
#define GAME_SCENE_SEND GAME_STATUS_PLAY //发牌状态
#define GAME_SCENE_CALL GAME_STATUS_PLAY+1 //叫分状态
#define GAME_SCENE_PLAY GAME_STATUS_PLAY+2 //游戏进行
//空闲状态
struct CMD_S_StatusFree
{
//时间信息
BYTE cbTimeOutCard; //出牌时间
BYTE cbTimeCallScore; //叫分时间
BYTE cbTimeStartGame; //开始时间
BYTE cbTimeHeadOutCard; //首出时间
};
//叫分状态
struct CMD_S_StatusSend
{
//时间信息
BYTE cbTimeOutCard; //出牌时间
BYTE cbTimeCallScore; //叫分时间
BYTE cbTimeStartGame; //开始时间
BYTE cbTimeHeadOutCard; //首出时间
DWORD dwGameRule; //游戏规则;
bool bActiveStatus[GAME_PLAYER]; //玩家状态;
//游戏信息
BYTE cbHandCardCount[GAME_PLAYER]; //手牌数量;
BYTE cbHandCardData[NORMAL_COUNT]; //手上扑克
};
//叫分状态
struct CMD_S_StatusCall
{
//时间信息
BYTE cbTimeOutCard; //出牌时间
BYTE cbTimeCallScore; //叫分时间
BYTE cbTimeStartGame; //开始时间
BYTE cbTimeHeadOutCard; //首出时间
DWORD dwGameRule; //游戏规则;
bool bActiveStatus[GAME_PLAYER]; //玩家状态;
//比出牌信息;
WORD wCurrentUser; //比出牌玩家;
BYTE cbMustOutCard; //必出牌信息;
//游戏信息
bool bScoreInfo[GAME_PLAYER]; //叫分信息
bool bScoreActive[GAME_PLAYER]; //叫分操作;
BYTE cbHandCardCount[GAME_PLAYER]; //手牌数量;
BYTE cbHandCardData[NORMAL_COUNT]; //手上扑克
};
//游戏状态
struct CMD_S_StatusPlay
{
//时间信息
BYTE cbTimeOutCard; //出牌时间
BYTE cbTimeCallScore; //叫分时间
BYTE cbTimeStartGame; //开始时间
BYTE cbTimeHeadOutCard; //首出时间
DWORD dwGameRule; //游戏规则;
bool bActiveStatus[GAME_PLAYER]; //玩家状态;
//游戏变量
WORD wBankerUser; //庄家用户
WORD wCurrentUser; //当前玩家
BYTE cbMustOutCard; //必出牌信息;
//出牌信息
WORD wTurnWiner; //胜利玩家
BYTE cbTurnCardCount; //出牌数目
BYTE cbTurnCardData[MAX_COUNT]; //出牌数据
//扑克信息
BYTE cbHandCardData[MAX_COUNT]; //手上扑克
BYTE cbHandCardCount[GAME_PLAYER]; //扑克数目
};
//////////////////////////////////////////////////////////////////////////////////
//命令定义
#define SUB_S_GAME_START 100 //游戏开始
#define SUB_S_CALL_SCORE 101 //用户叫分
#define SUB_S_BANKER_INFO 102 //庄家信息
#define SUB_S_OUT_CARD 103 //用户出牌
#define SUB_S_PASS_CARD 104 //用户放弃
#define SUB_S_GAME_CONCLUDE 105 //游戏结束
#define SUB_S_SET_BASESCORE 106 //设置基数
#define SUB_S_CHEAT_CARD 107 //作弊扑克
#define SUB_S_TRUSTEE 108 //托管
#define SUB_S_START_SCORE 109 //开始叫分
//发送扑克
//struct CMD_S_GameStart
//{
// WORD wStartUser; //开始玩家
// WORD wCurrentUser; //当前玩家
// bool bHasDaDu; //是否打独
// BYTE cbCardCount[GAME_PLAYER]; //扑克牌数量;
// BYTE cbCardData[NORMAL_COUNT]; //扑克列表
//};
struct CMD_S_GameStart
{
DWORD dwGameRule; //游戏规则;
WORD wStartUser; //开始玩家
bool bActiveStatus[GAME_PLAYER]; //玩家状态;
BYTE cbCardCount[GAME_PLAYER]; //扑克牌数量;
BYTE cbCardData[NORMAL_COUNT]; //扑克列表
};
//录像开始;
struct CMD_Record_GameStart
{
DWORD dwGameRule; //游戏规则;
WORD wStartUser; //开始玩家
WORD wCurrentUser; //当前玩家
bool bActiveStatus[GAME_PLAYER]; //玩家状态;
};
//机器人扑克
struct CMD_S_AndroidCard
{
BYTE cbHandCard[GAME_PLAYER][NORMAL_COUNT];//手上扑克
BYTE cbBankerCard[3];
WORD wCurrentUser ; //当前玩家
};
//作弊扑克
struct CMD_S_CheatCard
{
WORD wCardUser[GAME_PLAYER ]; //作弊玩家
BYTE cbUserCount; //作弊数量
BYTE cbCardData[GAME_PLAYER ][MAX_COUNT]; //扑克列表
BYTE cbCardCount[GAME_PLAYER ]; //扑克数量
};
//用户叫分
struct CMD_S_CallScore
{
WORD wCallScoreUser; //叫分玩家
bool bCurrentScore; //当前叫分
};
//通知抢庄;
struct CMD_S_SendCallScore
{
WORD wBankerUser; //庄家玩家
BYTE cbMustOutCard; //必出牌;
};
//庄家信息
struct CMD_S_BankerInfo
{
WORD wBankerUser; //庄家玩家
WORD wCurrentUser; //当前玩家
bool bShowMustOutCard; //是否显示必打牌
BYTE cbMustOutCard; //必出牌;
};
//用户出牌
struct CMD_S_OutCard
{
BYTE cbCardCount; //出牌数目
WORD wCurrentUser; //当前玩家
WORD wOutCardUser; //出牌玩家
bool bLastCard; //最后一手
BYTE cbCardData[MAX_COUNT]; //扑克列表
};
//放弃出牌
struct CMD_S_PassCard
{
BYTE cbTurnOver; //一轮结束
WORD wCurrentUser; //当前玩家
WORD wPassCardUser; //放弃玩家
};
//游戏结束
struct CMD_S_GameConclude
{
//积分变量
LONG lCellScore; //单元积分
bool bActiveStatus[GAME_PLAYER]; //玩家状态;
SCORE lGameScore[GAME_PLAYER]; //游戏积分
SCORE lBombScore[GAME_PLAYER]; //游戏积分
SCORE lAllScore[GAME_PLAYER]; //总成绩;
//春天标志
BYTE bChunTian; //春天标志
BYTE bFanChunTian; //春天标志
//炸弹信息
BYTE cbBombCount; //炸弹个数
BYTE cbEachBombCount[GAME_PLAYER]; //炸弹个数
//游戏信息
BYTE cbBankerScore; //叫分数目
BYTE cbCardCount[GAME_PLAYER]; //扑克数目
BYTE cbHandCardData[FULL_COUNT]; //扑克列表
};
//托管
struct CMD_S_TRUSTEE
{
WORD wTrusteeUser; //托管玩家
bool bTrustee; //托管标志
};
//////////////////////////////////////////////////////////////////////////////////
//命令定义
#define SUB_C_CALL_SCORE 1 //用户叫分
#define SUB_C_OUT_CARD 2 //用户出牌
#define SUB_C_PASS_CARD 3 //用户放弃
#define SUB_C_TRUSTEE 4 //用户托管
//用户叫分
struct CMD_C_CallScore
{
bool bCallScore; //叫分数目
};
//用户出牌
struct CMD_C_OutCard
{
BYTE cbCardCount; //出牌数目
BYTE cbCardData[MAX_COUNT]; //扑克数据
};
//托管
struct CMD_C_TRUSTEE
{
bool bTrustee; //托管标志
};
//////////////////////////////////////////////////////////////////////////////////
enum ePDKRuleEnum
{
ePDKRuleEnum_HandCardCount = 1 << 1, //手牌张数 1是16张0是15张;
ePDKRuleEnum_OutCardRule = 1 << 2, //出牌规则 1是红桃3先出0是首局红桃3出牌下局胜者出牌;
ePDKRuleEnum_MustOutCard = 1 << 3, //有牌必须出;
ePDKRuleEnum_3ABomb = 1 << 4, //3个A是炸弹;
ePDKRuleEnum_FOUR_TAKE_THREE = 1 << 5, //四带三;
ePDKRuleEnum_DADU = 1 << 6, //打独;
ePDKRuleEnum_Bomb_Score = 1 << 7, //炸弹+10;
ePDKRuleEnum_PlayCount = 1 << 8, //游戏人数 1是3人0是2人;
};
// 游戏解散结构
struct CMD_S_Private_End_Info
{
WORD wMainChairID; // 房主
BYTE cbFinishCout; // 完成局数
bool aryActiveStatus[GAME_PLAYER]; // 手牌状态;
SCORE lAllScore[GAME_PLAYER]; // 总成绩
SCORE lDetails[GAME_PLAYER][16]; // 成绩明细(目前开房最大16局)
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