295 lines
8.9 KiB
C++
295 lines
8.9 KiB
C++
#ifndef TABLE_FRAME_SINK_HEAD_FILE
|
|
#define TABLE_FRAME_SINK_HEAD_FILE
|
|
|
|
#pragma once
|
|
|
|
#include "Stdafx.h"
|
|
#include "GameLogic.h"
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
//枚举定义
|
|
|
|
//效验类型
|
|
enum enEstimatKind
|
|
{
|
|
EstimatKind_OutCard, //出牌效验
|
|
EstimatKind_GangCard, //杠牌效验
|
|
};
|
|
|
|
enum eGangType
|
|
{
|
|
eGangType_BuGang, //补杠;
|
|
eGangType_MingGang, //明杠;
|
|
eGangType_AnGang, //暗杠;
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
//游戏桌子类
|
|
class CTableFrameSink : public ITableFrameSink, public ITableUserAction
|
|
{
|
|
//游戏变量
|
|
protected:
|
|
bool m_bActiveUser[GAME_PLAYER]; //激活玩家;
|
|
WORD m_wSiceCount; //骰子点数
|
|
WORD m_wSiceCount2; //骰子点数
|
|
WORD m_wSiceCount3; //骰子点数3
|
|
WORD m_wBankerUser; //庄家用户
|
|
BYTE m_cbCardIndex[GAME_PLAYER][MAX_INDEX]; //用户扑克
|
|
bool m_bCallCard[GAME_PLAYER]; //洗澡标志
|
|
BYTE m_cbBatch[GAME_PLAYER]; //洗澡倍数
|
|
bool m_bTrustee[GAME_PLAYER]; //是否托管
|
|
bool m_bBatchEnd[GAME_PLAYER]; //洗澡结束
|
|
|
|
//历史积分;
|
|
protected:
|
|
SCORE m_lAllTurnScore[GAME_PLAYER]; //总局得分
|
|
SCORE m_lLastTurnScore[GAME_PLAYER]; //上局得分
|
|
BYTE m_cbAllGangCounts[GAME_PLAYER]; //统计杠的次数;
|
|
protected:
|
|
//临时变量;
|
|
|
|
BYTE m_cbDelCardIndex[GAME_PLAYER][MAX_INDEX];//用户打出去扑克和删除的扑克;
|
|
|
|
//出牌信息
|
|
protected:
|
|
WORD m_wOutCardUser; //出牌用户
|
|
BYTE m_cbOutCardData; //出牌扑克
|
|
BYTE m_cbOutCardCount; //出牌数目
|
|
BYTE m_cbDiscardCount[GAME_PLAYER]; //丢弃数目
|
|
BYTE m_cbDiscardCard[GAME_PLAYER][55]; //丢弃记录
|
|
BYTE m_cbGangCount; //杠牌次数
|
|
INT m_BankContinueCount; //连庄次数 上下楼
|
|
BYTE m_cbMustLeft; //留8墙墩
|
|
|
|
//发牌信息
|
|
protected:
|
|
BYTE m_cbSendCardData; //发牌扑克
|
|
BYTE m_cbSendCardCount; //发牌数目
|
|
BYTE m_cbLeftCardCount; //剩余数目
|
|
BYTE m_cbRepertoryCard[MAX_REPERTORY]; //库存扑克
|
|
BYTE m_cbMasterCheckCard[GAME_PLAYER]; //玩家要牌
|
|
|
|
//运行变量
|
|
protected:
|
|
WORD m_wResumeUser; //还原用户
|
|
WORD m_wCurrentUser; //当前用户
|
|
WORD m_wProvideUser; //供应用户
|
|
BYTE m_cbProvideCard; //供应扑克
|
|
|
|
WORD m_wProvideMingGangUser; //供应明杠的用户;
|
|
|
|
//状态变量
|
|
protected:
|
|
bool m_bSendStatus; //发牌状态
|
|
bool m_bGangStatus; //抢杆状态
|
|
//bool m_bEnjoinChiHu[GAME_PLAYER]; //禁止吃胡
|
|
//bool m_bEnjoinChiPeng[GAME_PLAYER]; //禁止吃碰
|
|
|
|
//用户状态
|
|
public:
|
|
bool m_bResponse[GAME_PLAYER]; //响应标志
|
|
WORD m_wUserAction[GAME_PLAYER]; //用户动作
|
|
BYTE m_cbOperateCard[GAME_PLAYER]; //操作扑克
|
|
WORD m_wPerformAction[GAME_PLAYER]; //执行动作
|
|
|
|
//组合扑克
|
|
protected:
|
|
BYTE m_cbWeaveItemCount[GAME_PLAYER]; //组合数目
|
|
tagWeaveItem m_WeaveItemArray[GAME_PLAYER][4]; //组合扑克
|
|
|
|
//结束信息
|
|
protected:
|
|
BYTE m_cbChiHuCard; //吃胡扑克
|
|
tagChiHuResult m_ChiHuResult[GAME_PLAYER]; //吃胡结果
|
|
|
|
//组件变量
|
|
protected:
|
|
CGameLogic m_GameLogic; //游戏逻辑
|
|
ITableFrame * m_pITableFrame; //框架接口
|
|
const tagGameServiceOption * m_pGameServiceOption; //配置参数
|
|
|
|
//属性变量
|
|
protected:
|
|
static const WORD m_wPlayerCount; //游戏人数
|
|
//static const enStartMode m_GameStartMode; //开始模式
|
|
|
|
BYTE m_genDaLiHuCards[GAME_PLAYER]; //立打立胡的牌值;
|
|
BYTE m_genHuCards[GAME_PLAYER][4]; //跟胡牌的牌值;
|
|
BYTE m_genPengCards[GAME_PLAYER][4]; //跟碰牌的牌值;
|
|
BYTE m_cbContinueGangs[GAME_PLAYER]; //连续杠的次数;
|
|
tagGangCardResult m_GangPaiResult[GAME_PLAYER]; //杠牌结果
|
|
|
|
BYTE m_cbContinueGangTypes[GAME_PLAYER][4]; //连续杠每次杠的类型;
|
|
|
|
//函数定义
|
|
public:
|
|
//构造函数
|
|
CTableFrameSink();
|
|
//析构函数
|
|
virtual ~CTableFrameSink();
|
|
|
|
//基础接口
|
|
public:
|
|
//释放对象
|
|
virtual VOID Release() { delete this; }
|
|
|
|
//接口查询
|
|
virtual void * QueryInterface(const IID & Guid, DWORD dwQueryVer);
|
|
|
|
//管理接口
|
|
public:
|
|
//初始化
|
|
virtual bool Initialization(IUnknownEx * pIUnknownEx);
|
|
//复位桌子
|
|
virtual void RepositionSink();
|
|
|
|
//查询接口
|
|
public:
|
|
//查询限额
|
|
virtual SCORE QueryConsumeQuota(IServerUserItem * pIServerUserItem){return 0;}
|
|
//最少积分
|
|
virtual SCORE QueryLessEnterScore(WORD wChairID, IServerUserItem * pIServerUserItem){return 0;}
|
|
//数据事件
|
|
virtual bool OnDataBaseMessage(WORD wRequestID, VOID * pData, WORD wDataSize){return false;}
|
|
//积分事件
|
|
virtual bool OnUserScroeNotify(WORD wChairID, IServerUserItem * pIServerUserItem, BYTE cbReason){return false;}
|
|
//查询是否扣服务费
|
|
virtual bool QueryBuckleServiceCharge(WORD wChairID){return true;}
|
|
|
|
//比赛接口
|
|
public:
|
|
//设置基数
|
|
virtual void SetGameBaseScore(LONG lBaseScore){};
|
|
|
|
//游戏状态
|
|
virtual bool IsUserPlaying(WORD wChairID);
|
|
|
|
//游戏事件
|
|
public:
|
|
//游戏开始
|
|
virtual bool OnEventGameStart();
|
|
//游戏结束
|
|
virtual bool OnEventGameConclude(WORD wChairID, IServerUserItem * pIServerUserItem, BYTE cbReason);
|
|
//发送场景
|
|
virtual bool OnEventSendGameScene(WORD wChiarID, IServerUserItem * pIServerUserItem, BYTE cbGameStatus, bool bSendSecret);
|
|
|
|
//事件接口
|
|
public:
|
|
//定时器事件
|
|
virtual bool OnTimerMessage(DWORD wTimerID, WPARAM wBindParam);
|
|
//游戏消息处理
|
|
virtual bool OnGameMessage(WORD wSubCmdID, VOID * pDataBuffer, WORD wDataSize, IServerUserItem * pIServerUserItem);
|
|
//框架消息处理
|
|
virtual bool OnFrameMessage(WORD wSubCmdID, VOID * pDataBuffer, WORD wDataSize, IServerUserItem * pIServerUserItem);
|
|
//数据事件
|
|
virtual bool OnGameDataBase(WORD wRequestID, VOID * pData, WORD wDataSize);
|
|
|
|
//用户事件
|
|
public:
|
|
//用户断线
|
|
virtual bool OnActionUserOffLine(WORD wChairID,IServerUserItem * pIServerUserItem) { return true; }
|
|
//用户重入
|
|
virtual bool OnActionUserConnect(WORD wChairID,IServerUserItem * pIServerUserItem) { return true; }
|
|
//用户坐下
|
|
virtual bool OnActionUserSitDown(WORD wChairID,IServerUserItem * pIServerUserItem, bool bLookonUser);
|
|
//用户起立
|
|
virtual bool OnActionUserStandUp(WORD wChairID,IServerUserItem * pIServerUserItem, bool bLookonUser);
|
|
//用户同意
|
|
virtual bool OnActionUserOnReady(WORD wChairID,IServerUserItem * pIServerUserItem, void * pData, WORD wDataSize) { return true; }
|
|
//房卡数量判断;
|
|
virtual bool OnActionUserFangKaCheck(WORD wChairID, IServerUserItem * pIServerUserItem, SCORE lUserInsure) { return true; }
|
|
//用户开始游戏
|
|
virtual bool OnActionUserOnStart(WORD wChairID, IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize) { return true; }
|
|
//用户开始游戏
|
|
virtual bool OnActionUserStartGame(WORD wChairID, IServerUserItem * pIServerUserItem, VOID * pData, WORD wDataSize) { return true; }
|
|
//游戏事件
|
|
protected:
|
|
//用户出牌
|
|
bool OnUserOutCard(WORD wChairID, BYTE cbCardData);
|
|
//用户操作
|
|
bool OnUserOperateCard(WORD wChairID, WORD wOperateCode, BYTE cbOperateCard);
|
|
//获取可以操作牌
|
|
BYTE GetOperateCard(WORD wChairID);
|
|
|
|
//辅助函数
|
|
protected:
|
|
//发送操作
|
|
bool SendOperateNotify(const tagGangCardResult& GangCardResult);
|
|
//派发扑克
|
|
bool DispatchCardData(WORD wCurrentUser,bool bNotGang=true);
|
|
//响应判断
|
|
bool EstimateUserRespond(WORD wCenterUser, BYTE cbCenterCard, enEstimatKind EstimatKind);
|
|
|
|
//私人场
|
|
public:
|
|
virtual void SetPrivateInfo(BYTE bGameTypeIdex, DWORD bGameRuleIdex);
|
|
//重置私人场结束信息
|
|
virtual void ResetPrivateEndInfo();
|
|
//获得私人场结束信息流
|
|
virtual void GetPrivateEndInfo(DataStream &kDataStream, bool bSend);
|
|
//判断私人场是否结束
|
|
virtual bool IsPrivateEnd();
|
|
//真实椅子数
|
|
virtual WORD GetRealChairCount();
|
|
// 获取下家椅子号;
|
|
WORD getNextChairID(WORD wChairID);
|
|
|
|
//私人场辅助函数;
|
|
public:
|
|
bool IsHasGameRule(eWNMJRuleEnum eType ); //是否有相应规则;
|
|
|
|
BYTE GetFanShuType();
|
|
//获得胡牌规则类型;
|
|
BYTE GetHURuleType();
|
|
|
|
// 录像事件
|
|
public:
|
|
// 游戏开始
|
|
void starGameRecord();
|
|
// 玩家操作提示;
|
|
void addGameRecordAction(WORD wSubCmdID, void* pSubMessage, int nMessageSize);
|
|
|
|
private:
|
|
|
|
//把吃碰杠牌插入DelCardIndex;
|
|
void InsertIntoDelCardIndex(WORD wChairID, tagWeaveItem &reftagWeaveItem);
|
|
void InsertIntoDelCardIndex(WORD wChairID, BYTE cbRemoveCard[], BYTE cbRemoveCount);
|
|
|
|
//插入跟打不能胡牌值;
|
|
void InsertGenHuCards(WORD wChairID, BYTE cbHuCardData);
|
|
bool IsInInsertGenHuCards(WORD wChairID, BYTE cbCardData);
|
|
bool HasGenHuCards(WORD wChairID);
|
|
|
|
//插入跟打不能碰牌值;
|
|
void InsertGenPengCards(WORD wChairID, BYTE cbPengCardData);
|
|
bool IsInInsertGenPengCards(WORD wChairID, BYTE cbCardData);
|
|
|
|
//玩家要牌
|
|
BYTE getSendCardData(WORD dwSendUser);
|
|
//发送排堆;
|
|
void sendMasterLeftCard(int nChairdID);
|
|
//使用牌库
|
|
void UseCardLibrary();
|
|
|
|
//从牌堆中删除一些牌
|
|
bool RemoveCards(BYTE cbCards[], BYTE cbCardCount, BYTE cbRemoveCards[], BYTE cbRemoveCount);
|
|
|
|
//私人场结算信息
|
|
public:
|
|
CMD_S_Private_End_Info m_PrivateEndInfo;
|
|
|
|
//录像
|
|
public:
|
|
tagGameRecord m_kGameRecord;
|
|
|
|
//运行变量
|
|
protected:
|
|
WORD m_wCheatChairID; //作弊玩家坐位置号
|
|
|
|
WORD m_wDropped; // 掉线率
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
#endif |