|
- #ifndef TABLE_FRAME_SINK_HEAD_FILE
- #define TABLE_FRAME_SINK_HEAD_FILE
-
- #pragma once
-
- #include "Stdafx.h"
- #include "GameLogic.h"
- #include "ReplayRecordManager.h"
- #include "data.h"
- //游戏桌子类
- class CTableFrameSink : public ITableFrameSink, public ITableUserAction
- {
- //游戏变量
- private:
- BYTE bGameType; //游戏到底是0一脚癞油,1无癞到底,2半癞
- LONG m_lSiceCount; //骰子点数
- WORD m_wBankerUser; //庄家用户
- WORD m_wNextBankerUser; //下一个庄家
- int m_lGameScore[GAME_PLAYER]; //单局游戏得分
- int m_lGameTatolScore[GAME_PLAYER]; //单轮积分计算
- BYTE m_HuPai[GAME_PLAYER]; //玩家胡牌次数
-
- int m_HuPaiLiuShui[16*GAME_PLAYER]; //流水详情
-
- BYTE m_cbCardIndex[GAME_PLAYER][MAX_INDEX]; //用户扑克
- BYTE m_bTrustee[GAME_PLAYER]; //是否托管
- BYTE m_bReading[GAME_PLAYER]; //是否准备
-
- BYTE m_cbLaiZiPiData; //癞子皮
- BYTE m_cbLaiZiData; //癞子
-
- BYTE m_cbQiangGangCardData[GAME_PLAYER]; //抢杠的牌
- BYTE m_cbGenCount[GAME_PLAYER]; //
- bool m_bPlayStatus[GAME_PLAYER]; //玩家状态
- std::list<DWORD> m_offlineUsers; //掉线的玩家
- BYTE m_cbWinCount; //
- WORD m_wWinOrder[GAME_PLAYER]; //
- LONG m_lGameTax[GAME_PLAYER]; //
- //tagGangScore m_GangScore[GAME_PLAYER]; //玩家具体杠的信息
- BYTE m_OutLaiZi[GAME_PLAYER]; //每个用户打出癞子牌个数
-
- BYTE m_TabbOutCardCout[GAME_PLAYER]; //可以打出的牌就听牌的个数
- BYTE m_TabbOutCardData[GAME_PLAYER][MAX_COUNT]; //具体打哪几张牌
- BYTE m_TabbTingCardCount[GAME_PLAYER][MAX_COUNT]; //相对应打出牌可听牌个数,索引表示第几张,值是对应对应的听牌个数
- BYTE m_TabbTingCardData[GAME_PLAYER][MAX_COUNT][MAX_INDEX]; //具体听牌数据,一维索引表示打出牌的第几个,二维索引表示听牌的第几个,值表示牌数据
- private:
- CMD_S_GameConfig m_gameConfig; //游戏配置
- bool m_isCanOutCard; //是否可以出牌
- bool m_bDelete; //是否解散房间
- bool bIsHuang;
- //bool m_isTingPai[GAME_PLAYER]; //玩家是否听牌
- //出牌信息
- private:
- WORD m_wOutCardUser; //出牌用户
- BYTE m_cbOutCardData; //出牌扑克
- BYTE m_cbOutCardCount; //出牌数目
- BYTE m_cbDiscardCount[GAME_PLAYER]; //丢弃数目
- BYTE m_cbDiscardCard[GAME_PLAYER][55]; //丢弃记录
- BYTE m_cbLastDisCardData[GAME_PLAYER][MAX_COUNT];//每个玩家得记忆库,用于判断是否可以碰不
- BYTE m_cbLastDisCount[GAME_PLAYER]; //每个玩家记忆库得个数
- ///BYTE m_cbDiscardWuYongCount[GAME_PLAYER]; //丢弃之后,也没碰杠的牌数目
- //BYTE m_cbDiscardWuYongCard[GAME_PLAYER][55]; //具体数据
- //发牌信息
- private:
- BYTE m_cbSendCardData; //发牌扑克
- BYTE m_cbSendCardCount; //发牌数目
- BYTE m_cbLeftCardCount; //剩余数目
- BYTE m_cbRepertoryCard[MAX_REPERTORY]; //库存扑克
-
- //堆立变量
- private:
- WORD m_wHeapHand; //堆立头部(从哪堆牌开始摸?)
- WORD m_wHeapTail; //堆立尾部(摸到堆牌结束?)
- BYTE m_cbHeapCardInfo[4][2]; //堆牌信息(记录4堆牌的堆头和堆尾各被摸了几张,如果( 堆头+堆尾 = 堆总数 ) 表示这堆牌被摸完了,需要切到下个玩家的那堆牌开始摸)
-
- //运行变量
- private:
- WORD m_wResumeUser; //还原用户(下一个用户?)
- WORD m_wCurrentUser; //当前用户
- WORD m_wProvideUser; //供应用户
- BYTE m_cbProvideCard; //供应扑克
-
- //状态变量
- private:
- bool m_bSendStatus; //发牌状态
- bool m_bGangStatus; //癞子杠状态,表示当时出牌是癞子,杠胡癞油
- WORD m_wDianGangUser; //点杠用户(如果是自己,表示暗杠,他人表示点杠)
-
- bool m_bGangOutStatus; //杠后炮,没用
- bool m_bEnjoinChiHu[GAME_PLAYER]; //禁止吃胡,没用
- bool m_bEnjoinChiPeng[GAME_PLAYER]; //禁止吃碰,没用
-
- //用户状态
- private:
- bool m_bResponse[GAME_PLAYER]; //响应标志
- INT m_cbUserAction[GAME_PLAYER]; //用户动作
- BYTE m_cbOperateCard[GAME_PLAYER]; //操作扑克
- INT m_cbPerformAction[GAME_PLAYER]; //执行动作
-
- //组合扑克
- private:
- BYTE m_cbWeaveItemCount[GAME_PLAYER]; //组合数目
- tagWeaveItem m_WeaveItemArray[GAME_PLAYER][MAX_WEAVE];//组合扑克
-
- //结束信息
- private:
- BYTE m_cbChiHuCard; //吃胡扑克
- DWORD m_dwChiHuKind[GAME_PLAYER]; //吃胡结果
- //std::vector<tagChihu> m_ChiHuRight[GAME_PLAYER]; //血战到底需要记录下每个用户胡牌的类型,但是癞油不需要,胡牌就结束
- WORD m_wProvider[GAME_PLAYER]; //
-
- //组件变量
- private:
- CGameLogic m_GameLogic; //游戏逻辑
- ITableFrame * m_pITableFrame; //框架接口
- const tagGameServiceOption * m_pGameServiceOption; //配置参数
-
- bool m_bReplayRecordStart; //是否开始录像
- std::vector<GameRecordPacket> m_UserReplayRecord; //对四个位置用户的数据的记录,用于回放。
- //bool m_bReduceBean; //是否已扣房卡(游戏豆)
- LONGLONG m_lUserTmpScore[GAME_PLAYER];
- //INT m_lZimo[GAME_PLAYER]; //累计自摸次数
- //LONG m_lFangPao[GAME_PLAYER]; //累计放炮次数
- //LONG m_lDianPao[GAME_PLAYER]; //累计点炮次数
- //LONG m_lMingGang[GAME_PLAYER]; //累计明杠次数
- //LONG m_lAnGang[GAME_PLAYER]; //累计暗杠次数
- //LONG m_lChaDaJiao[GAME_PLAYER]; //累计查大叫
- //函数定义
- public:
- //构造函数
- CTableFrameSink();
- //析构函数
- virtual ~CTableFrameSink();
-
- //void ReduceBean();
- //bool IsCanOutCard(); //是否可以出牌
- //基础接口
- 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 void DeletePrivateTable(bool bSendState = false);
- virtual bool ConcludeGame(BYTE cbGameStatus, bool bSendState = false)
- {
- //结束记录回放数据
- auto dataPair = RepayRecordEnd();
- //结束游戏
- m_pITableFrame->ConcludeGame(cbGameStatus, bSendState);
- return true;
- }
- //查询限额
- virtual SCORE QueryConsumeQuota(IServerUserItem * pIServerUserItem){ return 0; };
- //最少积分
- virtual SCORE QueryLessEnterScore(WORD wChairID, IServerUserItem * pIServerUserItem){ return 0; };
- //查询是否扣服务费
- virtual bool QueryBuckleServiceCharge(WORD wChairID){return true;}
-
- //查询总得分
- virtual int QueryTatolScore(WORD wChairID){ if (wChairID >= GAME_PLAYER || wChairID<0) ASSERT(false); return m_lGameTatolScore[wChairID]; }
- //查询癞子数
- virtual int QueryTatolLaiGang(WORD wChairID){ if (wChairID >= GAME_PLAYER || wChairID < 0) ASSERT(false); return m_OutLaiZi[wChairID]; }
- //查询是否使用临时积分
- virtual bool QueryUseTemporaryScore() {
- return (0!=lstrlen(m_gameConfig.sPrivateTableID)); //私有房间私用临时积分
- }
- //比赛接口
- public:
- //设置基数
- virtual void SetGameBaseScore(LONG lBaseScore){};
-
- virtual void SetGameConfig(VOID * pDataBuffer, WORD wDataSize, std::wstring sPrivateRoomId);
- //游戏事件
- public:
- bool RepayRecordStart();
- bool RepayRecordEnd();
- bool RepayRecord(WORD wChairID, WORD wSubCmdId, void* pData, WORD wSize);
-
- // bool CheckGameConclude();
- public:
- //游戏开始
- virtual bool OnEventGameStart();
- //游戏结束
- virtual bool OnEventGameConclude(WORD wChairID, IServerUserItem * pIServerUserItem, BYTE cbReason, bool bSendState = false);
- //发送场景
- virtual bool OnEventSendGameScene(WORD wChiarID, IServerUserItem * pIServerUserItem, BYTE cbGameStatus, bool bSendSecret);
-
- //事件接口
- public:
- //定时器事件
- virtual bool OnTimerMessage(DWORD wTimerID, WPARAM wBindParam);
- //数据事件
- virtual bool OnDataBaseMessage(WORD wRequestID, VOID * pData, WORD wDataSize) { return false; }
- //积分事件
- virtual bool OnUserScroeNotify(WORD wChairID, IServerUserItem * pIServerUserItem, BYTE cbReason) { return false; }
-
- //网络接口
- public:
- //游戏消息处理
- virtual bool OnGameMessage(WORD wSubCmdID, VOID * pDataBuffer, WORD wDataSize, IServerUserItem * pIServerUserItem);
- //框架消息处理
- virtual bool OnFrameMessage(WORD wSubCmdID, VOID * pDataBuffer, WORD wDataSize, IServerUserItem * pIServerUserItem);
-
- //用户事件
- public:
- //用户断线
- virtual bool OnActionUserOffLine(WORD wChairID,IServerUserItem * pIServerUserItem) { return true; }
- //用户重入 需要处理重新发送指令
- virtual bool OnActionUserConnect(WORD wChairID, IServerUserItem * pIServerUserItem);
- //用户坐下
- 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 OnActionUserReading(WORD wChairID);
- //游戏中途旁观进入
- virtual bool PerformLookonLogin(IServerUserItem * pIServerUserItem);
-
- //游戏事件
- protected:
- //用户出牌
- bool OnUserOutCard(WORD wChairID, BYTE cbCardData);
- //用户操作
- bool OnUserOperateCard(WORD wChairID, int cbOperateCode, BYTE cbOperateCard);
-
- //辅助函数
- protected:
-
- bool IsWin(WORD wChairID);
- //发送操作
- bool SendOperateNotify();
- //派发扑克
- bool DispatchCardData(WORD wCurrentUser,bool bTail=false,bool bLaiZiGang=false);
- //响应判断
- bool EstimateUserRespond(WORD wCenterUser, BYTE cbCenterCard, enEstimatKind EstimatKind);
- //
- //void ProcessChiHuUser( WORD wChairId,CChiHuRight& chr, bool bGiveUp );
- //获取根数
- int GetGenCount(WORD wChairId, CChiHuRight& chr);
-
- BYTE RemainNum(WORD wChairId, const BYTE m_cbCard,BYTE bIndex);
- //
- //void FiltrateRight( WORD wChairId,CChiHuRight &chr );
- };
-
- //////////////////////////////////////////////////////////////////////////
-
- #endif
|