327 lines
11 KiB
C
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 |