Files
wnmj-normal/Classes/Games/PDK/PDK_CMD.h
2026-03-03 13:56:44 +08:00

352 lines
12 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_PDK_GAME_HEAD_FILE
#define CMD_PDK_GAME_HEAD_FILE
#include "Types.h"
#include "DataStream.h"
#pragma pack(1)
//////////////////////////////////////////////////////////////////////////////////
//服务定义
//游戏属性
#define PDK_KIND_ID 210 //游戏 I D
#define PDK_GAME_NAME ("跑得快") //游戏名字
//组件属性
#define PDK_GAME_PLAYER 3 //游戏人数
//////////////////////////////////////////////////////////////////////////////////
//玩家相关定义
#define PDK_LEFT_VIEW_ID 0 //左边玩家
#define PDK_SELF_VIEW_ID 1 //自己玩家
#define PDK_RIGHT_VIEW_ID 2 //右边玩家
#define PDK_EMPTY_VIEW_ID 65535 //空视图
////////////////////////////////////////////////////////////////////////////////////
//数目定义
#define PDK_MAX_COUNT 16 //最大数目
#define PDK_FULL_COUNT 48 //全牌数目
#define PDK_FULL_COUNT_15 45 //全牌数目
#define PDK_MAX_MUSTCARD_COUT 11 //必出牌数目
//逻辑数目
#define PDK_NORMAL_COUNT 16 //常规数目
#define PDK_DISPATCH_COUNT 48 //派发数目
//////////////////////////////////////////////////////////////////////////////////
//状态定义
#define PDK_GAME_SCENE_FREE GAME_STATUS_FREE //等待开始
#define PDK_GAME_SCENE_SEND GAME_STATUS_PLAY //发牌状态
#define PDK_GAME_SCENE_CALL GAME_STATUS_PLAY+1 //叫分状态
#define PDK_GAME_SCENE_PLAY GAME_STATUS_PLAY+2 //游戏进行
//空闲状态
struct PDK_CMD_S_StatusFree
{
//时间信息
uint8 cbTimeOutCard; //出牌时间
uint8 cbTimeCallScore; //叫分时间
uint8 cbTimeStartGame; //开始时间
uint8 cbTimeHeadOutCard; //首出时间
};
//叫分状态
struct PDK_CMD_S_StatusSend
{
//时间信息
uint8 cbTimeOutCard; //出牌时间
uint8 cbTimeCallScore; //叫分时间
uint8 cbTimeStartGame; //开始时间
uint8 cbTimeHeadOutCard; //首出时间
uint32 dwGameRule; //游戏规则;
bool bActiveStatus[PDK_GAME_PLAYER]; //玩家状态;
//游戏信息
uint8 cbHandCardCount[PDK_GAME_PLAYER]; //手牌数量;
uint8 cbHandCardData[PDK_NORMAL_COUNT]; //手上扑克
};
//叫分状态
struct PDK_CMD_S_StatusCall
{
//时间信息
uint8 cbTimeOutCard; //出牌时间
uint8 cbTimeCallScore; //叫分时间
uint8 cbTimeStartGame; //开始时间
uint8 cbTimeHeadOutCard; //首出时间
uint32 dwGameRule; //游戏规则;
bool bActiveStatus[PDK_GAME_PLAYER]; //玩家状态;
//比出牌信息;
uint16 wCurrentUser; //比出牌玩家;
uint8 cbMustOutCard; //必出牌信息;
//游戏信息
bool bScoreInfo[PDK_GAME_PLAYER]; //叫分信息
bool bScoreActive[PDK_GAME_PLAYER]; //叫分操作;
uint8 cbHandCardCount[PDK_GAME_PLAYER]; //手牌数量;
uint8 cbHandCardData[PDK_NORMAL_COUNT]; //手上扑克
};
//游戏状态
struct PDK_CMD_S_StatusPlay
{
//时间信息
uint8 cbTimeOutCard; //出牌时间
uint8 cbTimeCallScore; //叫分时间
uint8 cbTimeStartGame; //开始时间
uint8 cbTimeHeadOutCard; //首出时间
uint32 dwGameRule; //游戏规则;
bool bActiveStatus[PDK_GAME_PLAYER]; //玩家状态;
//游戏变量
uint16 wBankerUser; //庄家用户
uint16 wCurrentUser; //当前玩家
uint8 cbMustOutCard; //必出牌信息;
//出牌信息
uint16 wTurnWiner; //胜利玩家
uint8 cbTurnCardCount; //出牌数目
uint8 cbTurnCardData[PDK_MAX_COUNT]; //出牌数据
//扑克信息
uint8 cbHandCardData[PDK_MAX_COUNT]; //手上扑克
uint8 cbHandCardCount[PDK_GAME_PLAYER]; //扑克数目
};
//////////////////////////////////////////////////////////////////////////////////
//命令定义
#define PDK_SUB_S_GAME_START 100 //游戏开始
#define PDK_SUB_S_CALL_SCORE 101 //用户叫分
#define PDK_SUB_S_BANKER_INFO 102 //庄家信息
#define PDK_SUB_S_OUT_CARD 103 //用户出牌
#define PDK_SUB_S_PASS_CARD 104 //用户放弃
#define PDK_SUB_S_GAME_CONCLUDE 105 //游戏结束
#define PDK_SUB_S_SET_BASESCORE 106 //设置基数
#define PDK_SUB_S_CHEAT_CARD 107 //作弊扑克
#define PDK_SUB_S_TRUSTEE 108 //托管
#define PDK_SUB_S_START_SCORE 109 //开始叫分
//发送扑克
struct PDK_CMD_S_GameStart
{
uint32 dwGameRule; //游戏规则;
uint16 wStartUser; //开始玩家
bool bActiveStatus[PDK_GAME_PLAYER]; //玩家状态;
uint8 cbCardCount[PDK_GAME_PLAYER]; //扑克牌数量;
uint8 cbCardData[PDK_NORMAL_COUNT]; //扑克列表
};
//录像开始;
struct PDK_CMD_Record_GameStart
{
uint32 dwGameRule; //游戏规则;
uint16 wStartUser; //开始玩家
uint16 wCurrentUser; //当前玩家
bool bActiveStatus[PDK_GAME_PLAYER]; //玩家状态;
};
//用户叫分
struct PDK_CMD_S_CallScore
{
uint16 wCallScoreUser; //叫分玩家
bool bCurrentScore; //当前叫分
};
//通知抢庄;
struct PDK_CMD_S_SendCallScore
{
uint16 wBankerUser; //庄家玩家
uint8 cbMustOutCard; //必出牌;
};
//庄家信息
struct PDK_CMD_S_BankerInfo
{
uint16 wBankerUser; //庄家玩家
uint16 wCurrentUser; //当前玩家
bool bShowMustOutCard; //是否显示必打牌
uint8 cbMustOutCard; //必出牌;
};
//用户出牌
struct PDK_CMD_S_OutCard
{
uint8 cbCardCount; //出牌数目
uint16 wCurrentUser; //当前玩家
uint16 wOutCardUser; //出牌玩家
bool bLastCard; //最后一手
uint8 cbCardData[PDK_MAX_COUNT]; //扑克列表
};
//放弃出牌
struct PDK_CMD_S_PassCard
{
uint8 cbTurnOver; //一轮结束
uint16 wCurrentUser; //当前玩家
uint16 wPassCardUser; //放弃玩家
};
//游戏结束
struct PDK_CMD_S_GameConclude
{
//积分变量
int lCellScore; //单元积分
bool bActiveStatus[PDK_GAME_PLAYER]; //玩家状态;
SCORE lGameScore[PDK_GAME_PLAYER]; //游戏积分
SCORE lBombScore[PDK_GAME_PLAYER]; //游戏积分
SCORE lAllScore[PDK_GAME_PLAYER]; //总成绩;
//春天标志
uint8 bChunTian; //春天标志
uint8 bFanChunTian; //春天标志
//炸弹信息
uint8 cbBombCount; //炸弹个数
uint8 cbEachBombCount[PDK_GAME_PLAYER]; //炸弹个数
//游戏信息
uint8 cbBankerScore; //叫分数目
uint8 cbCardCount[PDK_GAME_PLAYER]; //扑克数目
uint8 cbHandCardData[PDK_FULL_COUNT]; //扑克列表
};
//托管
struct PDK_CMD_S_Trustee
{
uint16 wTrusteeUser; //托管玩家
uint8 bTrustee; //托管标志
};
//////////////////////////////////////////////////////////////////////////////////
//命令定义
#define PDK_SUB_C_CALL_SCORE 1 //用户叫分
#define PDK_SUB_C_OUT_CARD 2 //用户出牌
#define PDK_SUB_C_PASS_CARD 3 //用户放弃
#define PDK_SUB_C_TRUSTEE 4 //用户托管
//用户叫分
struct PDK_CMD_C_CallScore
{
bool bCallScore; //叫分数目
};
//用户出牌
struct PDK_CMD_C_OutCard
{
uint8 cbCardCount; //出牌数目
uint8 cbCardData[PDK_MAX_COUNT]; //扑克数据
};
//托管
struct PDK_CMD_C_Trustee
{
bool bTrustee; //托管标志
};
//////////////////////////////////////////////////////////////////////////////////
enum ePDKRuleEnum
{
ePDKRuleEnum_CardAA = 1, //房卡AA;
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 PDK_CMD_S_Private_End_Info
{
uint16 wMainChairID; // 房主
uint8 cbFinishCout; // 完成局数
bool aryActiveStatus[PDK_GAME_PLAYER]; // 手牌状态;
SCORE lAllScore[PDK_GAME_PLAYER]; // 总成绩
SCORE lDetails[PDK_GAME_PLAYER][16]; // 成绩明细(目前开房最大16局)
void StreamValue(DataStream& kData, bool bSend)
{
if (bSend)
{
kData.pushValue(this, sizeof(PDK_CMD_S_Private_End_Info));
}
else
{
kData.popValue(this, sizeof(PDK_CMD_S_Private_End_Info));
}
}
};
//////////////////////////////////////////////////////////////////////////////////
//#define PDK_LEAVE_GAME "PDK_LeaveGame" //离开游戏
//#define PDK_WEIXIN_SHOW "PDK_WeiXinImagic" //微信分享
//////////////////////////////////////////////////////////////////////////////////
//声音文件
#define PDK_BUJIAO_FILE "Games/DDZ/Sound/%d/bujiao.mp3"
#define PDK_JIAO_FEN_FILE "Games/DDZ/Sound/%d/score%d.mp3"
#define PDK_DANZHANG_FILE "Games/DDZ/Sound/%d/%d.mp3" //单张牌;
#define PDK_LIANGZHANG_FILE "Games/DDZ/Sound/%d/dui%d.mp3" //对子;
#define PDK_FEIJI_FILE "Games/DDZ/Sound/%d/feiji.mp3" //飞机;
#define PDK_3ZHANG_FILE "Games/DDZ/Sound/%d/sanzhang.mp3" //三张;
#define PDK_3DAI1_FILE "Games/DDZ/Sound/%d/three1.mp3" //三带一;
#define PDK_3DAI2_FILE "Games/DDZ/Sound/%d/three2.mp3" //三带二;
#define PDK_4DAI2_FILE "Games/DDZ/Sound/%d/four2.mp3" //四带二;
#define PDK_ZHADAN_FILE "Games/DDZ/Sound/%d/bomb.mp3" //炸弹;
#define PDK_SHUNZI_FILE "Games/DDZ/Sound/%d/shunzi.mp3"
#define PDK_LIANDUI_FILE "Games/DDZ/Sound/%d/duiduishun.mp3"
#define PDK_PASS_FILE "Games/DDZ/Sound/%d/pass%d.mp3" //过;
#define PDK_MINGPAI_FILE "Games/DDZ/Sound/%d/mingpai.mp3"
#define PDK_HUOJIAN_FILE "Games/DDZ/Sound/%d/huojian.mp3" //火箭;
#define PDK_FEIJI_EFF_FILE "Games/DDZ/Sound/feiji_eff.mp3"
#define PDK_HUOJIAN_EFF_FILE "Games/DDZ/Sound/huojian_eff.mp3"
#define PDK_ZHADAN_EFF_FILE "Games/DDZ/Sound/zhadan_eff.mp3"
#define PDK_SHUNZI_EFF_FILE "Games/DDZ/Sound/shunzi_eff.mp3"
#define PDK_LIANDUI_EFF_FILE "Games/DDZ/Sound/liandui_eff.mp3"
#define PDK_ZUIHOUYIZHANG_FILE "Games/DDZ/Sound/%d/endCard.mp3"
#define PDK_WIN_EFF_FILE "Games/DDZ/Sound/win.mp3"
#define PDK_LOSE_EFF_FILE "Games/DDZ/Sound/lose.mp3"
#define PDK_FAPAI_EFF_FILE "Games/DDZ/Sound/fapai_eff.mp3"
#define PDK_DIANPAI_EFF_FILE "Games/DDZ/Sound/dianpai_eff.mp3"
#define PDK_CHUPAI_EFF_FILE "Games/DDZ/Sound/chupai_eff.mp3"
#define PDK_BACKMUSIC_FILE "Games/DDZ/Sound/backmusic.mp3"
//图片文件
#define PDK_END_TITLE_WIN_PNG_FILE "Games/DDZ/Result/sprTitleWin.png" //胜利
#define PDK_END_TITLE_LOSE_PNG_FILE "Games/DDZ/Result/sprTitleLose.png" //输
#define PDK_DIZHU_SHENG_PNG_FILE "Games/DDZ/Result/sprLandlordWin.png" //地主胜利
#define PDK_NONGMIN_SHENG_PNG_FILE "Games/DDZ/Result/sprFarmerWin.png" //农民胜利
#define PDK_DIZHU_SHU_PNG_FILE "Games/DDZ/Result/sprLandlordLose.png" //地主输
#define PDK_NONGMIN_SHU_PNG_FILE "Games/DDZ/Result/sprFarmerLose.png" //农民输
#define PDK_SHENG_PNG_FILE "Games/DDZ/Result/sprWin.png" //胜利
#define PDK_SHU_PNG_FILE "Games/DDZ/Result/sprLose.png" //输
#define PDK_TIPS_ONLY_PASS_PNG_FILE "Games/DDZ/Table/tips_onlypass.png" //没有大过上家的牌
#define PDK_TIPS_OUT_ERROR_PNG_FILE "Games/DDZ/Table/tips_outerror.png" //出牌类型错误
#define PDK_TIPS_CHOOSECARD_PNG_FILE "Games/DDZ/Table/tips_choosecard.png" //选择要出的牌
#define PDK_FARMER_FLAG_PNG_FILE "Games/DDZ/Table/farmer.png" //农民标志
#define PDK_READY_PNG_FILE "Games/DDZ/Table/player_ready.png" //准备
#define PDK_PASS_CARD_PNG_FILE "Games/DDZ/Table/player_pass.png" //不出
#define PDK_CALL_SCORE_PNG_FILE "Games/PDK/Call/player_dadu.png" //叫分
#define PDK_PASS_SCORE_PNG_FILE "Games/PDK/Call/player_bubao.png" //不叫
#define PDK_LANDLORD_FLAG_PNG_FILE "Games/PDK/Table/landlord.png" //地主标志
//字体文件
#define PDK_WIN_NUMBER_FNT_FILE "Games/DDZ/Fonts/win_number.fnt" //赢数字
#define PDK_LOSE_NUMBER_FNT_FILE "Games/DDZ/Fonts/lose_number.fnt" //输数字
#pragma pack()
#endif