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_)

原创粉丝点击