GameLogi.h
来源:互联网 发布:孔有德 知乎 编辑:程序博客网 时间:2024/05/01 14:58
// GameLogi.h: interface for the CGameServer class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_SAMPLESERVER_H__B9B928D4_0E4A_42E0_956E_A0EA13AC458B__INCLUDED_)
#define AFX_SAMPLESERVER_H__B9B928D4_0E4A_42E0_956E_A0EA13AC458B__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "site_i.h"
#include "../transStruct.h"
#include "LogicalHelper.h"
#include "ServerPlayer/Player.h"
class CGameServer :
public IGameLogical
{
public: //IUnknown
virtual HRESULT STDMETHODCALLTYPE QueryInterface(
/* [in] */ REFIID riid,
/* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject);
virtual ULONG STDMETHODCALLTYPE AddRef( void) {
return (m_dwRef++);
}
virtual ULONG STDMETHODCALLTYPE Release( void) {
--m_dwRef;
return m_dwRef;
}
private:
ULONG m_dwRef;
public: // IGameConst
STDMETHOD(GetEstimateTime)(DWORD * pMillesecond);
STDMETHOD(GetPlayerNum)(IGameConst::PLAYERNUMBER * pNumber);
STDMETHOD(GetGameIdentifier)(char * lpszIdentifier);
STDMETHOD(CanQuickStart)(); //retrun S_OK if supported
STDMETHOD(CanSaveGame)(); //retrun S_OK if supported
STDMETHOD(GetVersion)(IGameConst::VERSION_STRUCT * pVS);
public: //IGameLogical
STDMETHOD(SetServerSite)(IServerSite * pGameSite);
STDMETHOD(ConstructScene)();
STDMETHOD(GetPersonalScene)(int nIndex, UINT uflags, IGameLogical::SCENE * pScene);
STDMETHOD(Start)();
STDMETHOD(Stop)(UINT uflags);
STDMETHOD(Clear)();
STDMETHOD(GetScore)(int nIndex, void * lpScoreBuf);
STDMETHOD(OnGameOperation)(int nIndex, DWORD dwUserID, int opID, LPOPDATA oData, int nSize);
private:
IServerSite * m_pSite;
CServerBase * m_pServer;
IUserList * m_pList;
bool m_started;
public:
CGameServer();
virtual ~CGameServer();
private: //游戏数据,所谓现场,就是由这些数据组成
int m_nGameState; //游戏状态,似乎,大概在这个游戏中,没有使用哦。
int m_nActivePlayer; //活动用户,一般只有一个。活动用户就是可以出牌的人。
//记录椅子号(1-4)有效
LogicalHelper m_quickStartelper;
CPlayer m_CPlayer[MAX_PLAYER_COUNT]; //所有玩家
private:
BOOL OperateOPID(int opID,DWORD dwUserID,int nIndex); //对从客户端接收到的opID进行处理,返回值为是否有对opID处理
void ShowMineCardScene(Game_SCENE * pGameScene,int nIndex, UINT uflags, IGameLogical::SCENE * pScene); //只显示自己的牌的时候的场景包打包方式
void ShowAllCardScene (Game_SCENE * pGameScene,int nIndex, UINT uflags, IGameLogical::SCENE * pScene); //显示所有玩家的牌的时候的场景包打包方式
BOOL JudgeAllOutCard(); //判断是否都出牌了
void CalculationScore(); //计算玩家得分。
};
#endif // !defined(AFX_SAMPLESERVER_H__B9B928D4_0E4A_42E0_956E_A0EA13AC458B__INCLUDED_)