Files
wnmj/Classes/Games/DDZ/DDZ_CMD.h
2026-02-13 14:34:15 +08:00

327 lines
11 KiB
C

#ifndef CMD_DDZ_GAME_HEAD_FILE
#define CMD_DDZ_GAME_HEAD_FILE
#include "Types.h"
#include "DataStream.h"
#pragma pack(1)
//////////////////////////////////////////////////////////////////////////////////
//服务定义
//游戏属性
#define DDZ_KIND_ID 200 //游戏 I D
#define DDZ_GAME_NAME ("斗地主") //游戏名字
//组件属性
#define DDZ_GAME_PLAYER 3 //游戏人数
//////////////////////////////////////////////////////////////////////////////////
//玩家相关定义
#define DDZ_LEFT_VIEW_ID 0 //左边玩家
#define DDZ_SELF_VIEW_ID 1 //自己玩家
#define DDZ_RIGHT_VIEW_ID 2 //右边玩家
#define DDZ_EMPTY_VIEW_ID 65535 //空视图
////////////////////////////////////////////////////////////////////////////////////
//数目定义
#define DDZ_MAX_COUNT 20 //最大数目
#define DDZ_FULL_COUNT 54 //全牌数目
#define DDZ_BACK_COUNT 3 //底牌数量
//逻辑数目
#define DDZ_NORMAL_COUNT 17 //常规数目
#define DDZ_DISPATCH_COUNT 51 //派发数目
//////////////////////////////////////////////////////////////////////////////////
//状态定义
#define GAME_SCENE_FREE GAME_STATUS_FREE //等待开始
#define GAME_SCENE_CALL GAME_STATUS_PLAY //叫分状态
#define GAME_SCENE_PLAY GAME_STATUS_PLAY+1 //游戏进行
//空闲状态
struct DDZ_CMD_S_StatusFree
{
//游戏属性
int lCellScore; //基础积分
//时间信息
uint8 cbTimeOutCard; //出牌时间
uint8 cbTimeCallScore; //叫分时间
uint8 cbTimeStartGame; //开始时间
uint8 cbTimeHeadOutCard; //首出时间
//历史积分
SCORE lTurnScore[DDZ_GAME_PLAYER]; //积分信息
SCORE lCollectScore[DDZ_GAME_PLAYER]; //积分信息
};
//叫分状态
struct DDZ_CMD_S_StatusCall
{
//时间信息
uint8 cbTimeOutCard; //出牌时间
uint8 cbTimeCallScore; //叫分时间
uint8 cbTimeStartGame; //开始时间
uint8 cbTimeHeadOutCard; //首出时间
//游戏信息
int lCellScore; //单元积分
uint16 wCurrentUser; //当前玩家
uint8 cbBankerScore; //庄家叫分
uint8 cbScoreInfo[DDZ_GAME_PLAYER]; //叫分信息
uint8 cbHandCardData[DDZ_NORMAL_COUNT]; //手上扑克
bool bUserTrustee[DDZ_GAME_PLAYER]; //托管标志
//历史积分
SCORE lTurnScore[DDZ_GAME_PLAYER]; //积分信息
SCORE lCollectScore[DDZ_GAME_PLAYER]; //积分信息
};
//游戏状态
struct DDZ_CMD_S_StatusPlay
{
//时间信息
uint8 cbTimeOutCard; //出牌时间
uint8 cbTimeCallScore; //叫分时间
uint8 cbTimeStartGame; //开始时间
uint8 cbTimeHeadOutCard; //首出时间
//游戏变量
int lCellScore; //单元积分
uint8 cbBombCount; //炸弹次数
uint16 wBankerUser; //庄家用户
uint16 wCurrentUser; //当前玩家
uint8 cbBankerScore; //庄家叫分
//出牌信息
uint16 wTurnWiner; //胜利玩家
uint8 cbTurnCardCount; //出牌数目
uint8 cbTurnCardData[DDZ_MAX_COUNT]; //出牌数据
//扑克信息
uint8 cbBankerCard[3]; //游戏底牌
uint8 cbHandCardData[DDZ_MAX_COUNT]; //手上扑克
uint8 cbHandCardCount[DDZ_GAME_PLAYER]; //扑克数目
//历史积分
SCORE lTurnScore[DDZ_GAME_PLAYER]; //积分信息
SCORE lCollectScore[DDZ_GAME_PLAYER]; //积分信息
bool bUserTrustee[DDZ_GAME_PLAYER]; //托管标志
};
//////////////////////////////////////////////////////////////////////////////////
//命令定义
#define DDZ_SUB_S_GAME_START 100 //游戏开始
#define DDZ_SUB_S_CALL_SCORE 101 //用户叫分
#define DDZ_SUB_S_BANKER_INFO 102 //庄家信息
#define DDZ_SUB_S_OUT_CARD 103 //用户出牌
#define DDZ_SUB_S_PASS_CARD 104 //用户放弃
#define DDZ_SUB_S_GAME_CONCLUDE 105 //游戏结束
#define DDZ_SUB_S_SET_BASESCORE 106 //设置基数
#define DDZ_SUB_S_CHEAT_CARD 107 //作弊扑克
#define DDZ_SUB_S_TRUSTEE 108 //托管
//发送扑克
struct DDZ_CMD_S_GameStart
{
uint16 wStartUser; //开始玩家
uint16 wCurrentUser; //当前玩家
uint8 cbValidCardData; //明牌扑克
uint8 cbValidCardIndex; //明牌位置
uint8 cbCardData[DDZ_NORMAL_COUNT]; //扑克列表
};
//录像开始;
struct DDZ_CMD_Record_GameStart
{
WORD wStartUser; //开始玩家
WORD wCurrentUser; //当前玩家
};
//用户叫分
struct DDZ_CMD_S_CallScore
{
uint16 wCurrentUser; //当前玩家
uint16 wCallScoreUser; //叫分玩家
uint8 cbCurrentScore; //当前叫分
uint8 cbUserCallScore; //上次叫分
};
//庄家信息
struct DDZ_CMD_S_BankerInfo
{
uint16 wBankerUser; //庄家玩家
uint16 wCurrentUser; //当前玩家
uint8 cbBankerScore; //庄家叫分
uint8 cbBankerCard[3]; //庄家扑克
};
//用户出牌
struct DDZ_CMD_S_OutCard
{
uint8 cbCardCount; //出牌数目
uint16 wCurrentUser; //当前玩家
uint16 wOutCardUser; //出牌玩家
uint8 cbCardData[DDZ_MAX_COUNT]; //扑克列表
};
//放弃出牌
struct DDZ_CMD_S_PassCard
{
uint8 cbTurnOver; //一轮结束
uint16 wCurrentUser; //当前玩家
uint16 wPassCardUser; //放弃玩家
};
//游戏结束
struct DDZ_CMD_S_GameConclude
{
//积分变量
int lCellScore; //单元积分
SCORE lGameScore[DDZ_GAME_PLAYER]; //游戏积分
SCORE lAllScore[DDZ_GAME_PLAYER]; //总成绩;
//春天标志
uint8 bChunTian; //春天标志
uint8 bFanChunTian; //春天标志
//炸弹信息
uint8 cbBombCount; //炸弹个数
uint8 cbEachBombCount[DDZ_GAME_PLAYER]; //炸弹个数
//游戏信息
uint8 cbBankerScore; //叫分数目
uint8 cbCardCount[DDZ_GAME_PLAYER]; //扑克数目
uint8 cbHandCardData[DDZ_FULL_COUNT]; //扑克列表
};
//托管
struct DDZ_CMD_S_Trustee
{
uint16 wTrusteeUser; //托管玩家
uint8 bTrustee; //托管标志
};
//////////////////////////////////////////////////////////////////////////////////
//命令定义
#define DDZ_SUB_C_CALL_SCORE 1 //用户叫分
#define DDZ_SUB_C_OUT_CARD 2 //用户出牌
#define DDZ_SUB_C_PASS_CARD 3 //用户放弃
#define DDZ_SUB_C_TRUSTEE 4 //用户托管
//用户叫分
struct DDZ_CMD_C_CallScore
{
uint8 cbCallScore; //叫分数目
};
//用户出牌
struct DDZ_CMD_C_OutCard
{
uint8 cbCardCount; //出牌数目
uint8 cbCardData[DDZ_MAX_COUNT]; //扑克数据
};
//托管
struct DDZ_CMD_C_Trustee
{
bool bTrustee; //托管标志
};
//////////////////////////////////////////////////////////////////////////////////
enum eDDZRuleEnum
{
eDDZRuleEnum_CardAA = 1, //房卡AA;
eDDZRuleEnum_LimitMultiple8 = 1 << 1, //8倍封顶;
eDDZRuleEnum_NoLimitMultiple = 1 << 2, //不封顶;
};
// 游戏解散结构
struct DDZ_CMD_S_Private_End_Info
{
WORD wMainChairID; // 房主
BYTE cbFinishCout; // 完成局数
SCORE lAllScore[DDZ_GAME_PLAYER]; // 总成绩
SCORE lDetails[DDZ_GAME_PLAYER][16]; // 成绩明细(目前开房最大16局)
void StreamValue(DataStream& kData, bool bSend)
{
if (bSend)
{
kData.pushValue(this, sizeof(DDZ_CMD_S_Private_End_Info));
}
else
{
kData.popValue(this, sizeof(DDZ_CMD_S_Private_End_Info));
}
}
};
//////////////////////////////////////////////////////////////////////////////////
//#define DDZ_LEAVE_GAME "DDZ_LeaveGame" //离开游戏
//#define DDZ_WEIXIN_SHOW "DDZ_WeiXinImagic" //微信分享
//////////////////////////////////////////////////////////////////////////////////
//声音文件
#define DDZ_BUJIAO_FILE "Games/DDZ/Sound/%d/bujiao.mp3"
#define DDZ_JIAO_FEN_FILE "Games/DDZ/Sound/%d/score%d.mp3"
#define DDZ_DANZHANG_FILE "Games/DDZ/Sound/%d/%d.mp3" //单张牌;
#define DDZ_LIANGZHANG_FILE "Games/DDZ/Sound/%d/dui%d.mp3" //对子;
#define DDZ_FEIJI_FILE "Games/DDZ/Sound/%d/feiji.mp3" //飞机;
#define DDZ_3ZHANG_FILE "Games/DDZ/Sound/%d/sanzhang.mp3" //三张;
#define DDZ_3DAI1_FILE "Games/DDZ/Sound/%d/three1.mp3" //三带一;
#define DDZ_3DAI2_FILE "Games/DDZ/Sound/%d/three2.mp3" //三带二;
#define DDZ_4DAI2_FILE "Games/DDZ/Sound/%d/four2.mp3" //四带二;
#define DDZ_ZHADAN_FILE "Games/DDZ/Sound/%d/bomb.mp3" //炸弹;
#define DDZ_SHUNZI_FILE "Games/DDZ/Sound/%d/shunzi.mp3"
#define DDZ_LIANDUI_FILE "Games/DDZ/Sound/%d/duiduishun.mp3"
#define DDZ_PASS_FILE "Games/DDZ/Sound/%d/pass%d.mp3" //过;
#define DDZ_MINGPAI_FILE "Games/DDZ/Sound/%d/mingpai.mp3"
#define DDZ_HUOJIAN_FILE "Games/DDZ/Sound/%d/huojian.mp3" //火箭;
#define DDZ_FEIJI_EFF_FILE "Games/DDZ/Sound/feiji_eff.mp3"
#define DDZ_HUOJIAN_EFF_FILE "Games/DDZ/Sound/huojian_eff.mp3"
#define DDZ_ZHADAN_EFF_FILE "Games/DDZ/Sound/zhadan_eff.mp3"
#define DDZ_SHUNZI_EFF_FILE "Games/DDZ/Sound/shunzi_eff.mp3"
#define DDZ_LIANDUI_EFF_FILE "Games/DDZ/Sound/liandui_eff.mp3"
#define DDZ_ZUIHOUYIZHANG_FILE "Games/DDZ/Sound/%d/endCard.mp3"
#define DDZ_WIN_EFF_FILE "Games/DDZ/Sound/win.mp3"
#define DDZ_LOSE_EFF_FILE "Games/DDZ/Sound/lose.mp3"
#define DDZ_FAPAI_EFF_FILE "Games/DDZ/Sound/fapai_eff.mp3"
#define DDZ_DIANPAI_EFF_FILE "Games/DDZ/Sound/dianpai_eff.mp3"
#define DDZ_CHUPAI_EFF_FILE "Games/DDZ/Sound/chupai_eff.mp3"
#define DDZ_BACKMUSIC_FILE "Games/DDZ/Sound/backmusic.mp3"
//图片文件
#define DDZ_END_TITLE_WIN_PNG_FILE "Games/DDZ/Result/sprTitleWin.png" //胜利
#define DDZ_END_TITLE_LOSE_PNG_FILE "Games/DDZ/Result/sprTitleLose.png" //输
#define DDZ_DIZHU_SHENG_PNG_FILE "Games/DDZ/Result/sprLandlordWin.png" //地主胜利
#define DDZ_NONGMIN_SHENG_PNG_FILE "Games/DDZ/Result/sprFarmerWin.png" //农民胜利
#define DDZ_DIZHU_SHU_PNG_FILE "Games/DDZ/Result/sprLandlordLose.png" //地主输
#define DDZ_NONGMIN_SHU_PNG_FILE "Games/DDZ/Result/sprFarmerLose.png" //农民输
#define DDZ_SHENG_PNG_FILE "Games/DDZ/Result/sprWin.png" //胜利
#define DDZ_SHU_PNG_FILE "Games/DDZ/Result/sprLose.png" //输
#define DDZ_TIPS_ONLY_PASS_PNG_FILE "Games/DDZ/Table/tips_onlypass.png" //没有大过上家的牌
#define DDZ_TIPS_OUT_ERROR_PNG_FILE "Games/DDZ/Table/tips_outerror.png" //出牌类型错误
#define DDZ_TIPS_CHOOSECARD_PNG_FILE "Games/DDZ/Table/tips_choosecard.png" //选择要出的牌
#define DDZ_LANDLORD_FLAG_PNG_FILE "Games/DDZ/Table/landlord.png" //地主标志
#define DDZ_FARMER_FLAG_PNG_FILE "Games/DDZ/Table/farmer.png" //农民标志
#define DDZ_CALL_SCORE_PNG_FILE "Games/DDZ/Call/player_call_%d.png" //叫分
#define DDZ_PASS_SCORE_PNG_FILE "Games/DDZ/Call/player_pass_score.png" //不叫
#define DDZ_READY_PNG_FILE "Games/DDZ/Table/player_ready.png" //准备
#define DDZ_PASS_CARD_PNG_FILE "Games/DDZ/Table/player_pass.png" //不出
//字体文件
#define DDZ_WIN_NUMBER_FNT_FILE "Games/DDZ/Fonts/win_number.fnt" //赢数字
#define DDZ_LOSE_NUMBER_FNT_FILE "Games/DDZ/Fonts/lose_number.fnt" //输数字
#pragma pack()
#endif