第二次宣战_MMORPG设计

第二次宣战_MMORPG设计_第1张图片

 

/******************************
* 文件名:   Game_Define.h
* 创建人:   陈泽丹/Clark
* 创建时间: 20120330
* 文件描述:
******************************/
#pragma once




namespace GAME_DEFINE
{
	struct ENTITY_TYPE
	{
		enum
		{
			BASE_ENTITY = 0,
		};
	};
}


 

/******************************
* 文件名:   Res_Interface.h
* 创建人:   陈泽丹/Clark
* 创建时间: 20120330
* 文件描述:
******************************/
#pragma once
#include <iostream>
#include <map>
#include "Entity_Interface.h"




using namespace std;





template<int TYPE_VAL>
class Res_Interface
{
public:
	Res_Interface(const int _RES_ID):RES_ID(_RES_ID){ Clear(); }
	virtual ~Res_Interface(){ Clear();  }
	bool Login(int _UID, Entity_Interface<TYPE_VAL>* _pEntity)
	{
		if( 0 == m_vpEntitys[_UID])
		{
			m_vpEntitys[_UID] = _pEntity;
			return true; 
		}
		return false;
	}
	void Logout(int _UID)
	{
		m_vpEntitys[_UID] = 0;
	}
	void Clear()
	{
		for(map< int, Entity_Interface<TYPE_VAL>* >::iterator it = m_vpEntitys.begin(); it != m_vpEntitys.end(); it++)
		{
			if( 0 != it->second)
			{
				delete it->second;
				it->second = 0;
			}
		}
		m_vpEntitys.clear();
	}
	int  GetSize()
	{
		return m_vpEntitys.size();
	}
	Entity_Interface<TYPE_VAL>* GetEntity(int _UID)
	{
		return m_vpEntitys[_UID];
	}
	const int RES_ID;

protected:
	map< int, Entity_Interface<TYPE_VAL>* > m_vpEntitys;
};


 

/******************************
* 文件名:   Entity_Interface.h
* 创建人:   陈泽丹/Clark
* 创建时间: 20120330
* 文件描述:
******************************/
#pragma once


template<int TYPE_VAL>
class Entity_Interface
{ 
public: 
	virtual ~Entity_Interface(){} 
};


 

/******************************
* 文件名:   BaseNPC_Entity.h
* 创建人:   陈泽丹/Clark
* 创建时间: 20120330
* 文件描述:
******************************/
#pragma once
#include "../Game_Define.h"
#include "../Entity_Interface.h"
#include "../Res_Interface.h"



using namespace GAME_DEFINE;


template<>
class Entity_Interface<ENTITY_TYPE::BASE_ENTITY>
{
public:
	void ToRes(Res_Interface<ENTITY_TYPE::BASE_ENTITY>* _pDestRes, const int _iPosX = 0, const int _iPosY = 0);
	const int UID;

protected:
	Entity_Interface(int _UID, Res_Interface<ENTITY_TYPE::BASE_ENTITY>* _pRes);
	virtual ~Entity_Interface();
	int m_iPosX;
	int m_iPosY;
	Res_Interface<ENTITY_TYPE::BASE_ENTITY>* m_pRes;
	friend class Res_Interface<ENTITY_TYPE::BASE_ENTITY>;
};


 

#include "BaseNPC_Entity.h"




Entity_Interface<ENTITY_TYPE::BASE_ENTITY>::Entity_Interface(int _UID, Res_Interface<ENTITY_TYPE::BASE_ENTITY>* _pRes):
UID(_UID), 
m_pRes(_pRes),
m_iPosX(0),
m_iPosY(0)
{ 
	m_pRes->Login( UID, this );
}



Entity_Interface<ENTITY_TYPE::BASE_ENTITY>::~Entity_Interface()
{
	m_pRes->Logout( UID );
};

void Entity_Interface<ENTITY_TYPE::BASE_ENTITY>::ToRes(Res_Interface<ENTITY_TYPE::BASE_ENTITY>* _pDestRes, const int _iPosX, const int _iPosY)
{
	if( m_pRes != _pDestRes)
	{
		m_pRes->Logout( UID );
		m_pRes = _pDestRes;
		m_pRes->Login( UID, this );
	}
	m_iPosX = _iPosX;
	m_iPosY = _iPosY;
}


 

/******************************
* 文件名:   LogicNPC_Entity.h
* 创建人:   陈泽丹/Clark
* 创建时间: 20120330
* 文件描述:
******************************/

#pragma once
#include "../Interface/Entity_Interface.h"
#include "../Interface/Res_Interface.h"
#include "../Interface/NPC/BaseNPC_Entity.h"



class LogicNPC_Entity: public Entity_Interface<ENTITY_TYPE::BASE_ENTITY>
{
public:
	LogicNPC_Entity( int _UID, Res_Interface<ENTITY_TYPE::BASE_ENTITY>* _pRes_Logic);

private:
	virtual ~LogicNPC_Entity();
};


 

#include "LogicNPC_Entity.h"
#include <iostream>

using namespace std;


LogicNPC_Entity::LogicNPC_Entity( int _UID, Res_Interface<ENTITY_TYPE::BASE_ENTITY>* _pRes_Logic):
Entity_Interface(_UID, _pRes_Logic) 
{
	m_iPosX = rand()%20;
	m_iPosY = rand()%20;
	cout<<"逻辑服"<<_pRes_Logic->RES_ID<<"号街道(地图块)创建NPC["<< UID <<"], 坐标("<<m_pRes->RES_ID<<","<<m_iPosX<<","<<m_iPosY<<")"<<endl;
}

LogicNPC_Entity::~LogicNPC_Entity()
{
	cout<<"逻辑服"<<m_pRes->RES_ID<<"号街道(地图块)删除NPC["<< UID <<"], 坐标("<<m_pRes->RES_ID<<","<<m_iPosX<<","<<m_iPosY<<")"<<endl;
}


 

/******************************
* 文件名:   LogicMagic_Entity.h
* 创建人:   陈泽丹/Clark
* 创建时间: 20120330
* 文件描述:
******************************/

#pragma once
#include "../Interface/Entity_Interface.h"
#include "../Interface/Res_Interface.h"
#include "../Interface/NPC/BaseNPC_Entity.h"



class LogicMagic_Entity: public Entity_Interface<ENTITY_TYPE::BASE_ENTITY>
{
public:
	LogicMagic_Entity( int _UID, Res_Interface<ENTITY_TYPE::BASE_ENTITY>* _pRes_Logic);

private:
	virtual ~LogicMagic_Entity();
};


 

#include "LogicMagic_Entity.h"
#include <iostream>

using namespace std;


LogicMagic_Entity::LogicMagic_Entity( int _UID, Res_Interface<ENTITY_TYPE::BASE_ENTITY>* _pRes_Logic):
Entity_Interface(_UID, _pRes_Logic) 
{
	m_iPosX = rand()%20;
	m_iPosY = rand()%20;
	cout<<"逻辑服"<<_pRes_Logic->RES_ID<<"号街道(地图块)创建火焰术["<< UID <<"], 坐标("<<m_pRes->RES_ID<<","<<m_iPosX<<","<<m_iPosY<<")"<<endl;
}

LogicMagic_Entity::~LogicMagic_Entity()
{
	cout<<"逻辑服"<<m_pRes->RES_ID<<"号街道(地图块)删除火焰术["<< UID <<"], 坐标("<<m_pRes->RES_ID<<","<<m_iPosX<<","<<m_iPosY<<")"<<endl;
}


 

/******************************
* 文件名:   FreshmanWorld.h
* 创建人:   陈泽丹/Clark
* 创建时间: 20120330
* 文件描述: 新手村
******************************/

#pragma once
#include "LogicNPC_Entity.h"   
#include "LogicMagic_Entity.h"   
#include "Block_LogicMap.h"   

class FreshmanWorld
{
public:
	FreshmanWorld(void);
	virtual ~FreshmanWorld(void);
	void CreateMonster();
	void MonsterEvent();

private:
	void Create();
	void Delete();
	enum
	{
		MAP_ROW = 2,
		MAP_LINE = 2,
		NPC_SIZE = 2,
		MAGIC_SIZE = 1,
	};

	//新手世界由 (MAP_ROW * MAP_LINE) 个灯塔块(地图块)组成
	Block_LogicMap* m_pMapBlock[MAP_ROW][MAP_LINE];
};


 

#include "FreshmanWorld.h"

FreshmanWorld::FreshmanWorld(void)
{
	Create();
}

FreshmanWorld::~FreshmanWorld(void)
{
	Delete();
}



void FreshmanWorld::Create()
{
	cout<<"---------- 初始化逻辑服务器地图块 ---------- "<<endl;
	for(int i=0; i<MAP_ROW; i++)
	{
		for(int j=0; j<MAP_LINE; j++)
		{
			m_pMapBlock[i][j] = new Block_LogicMap(i*MAP_LINE + j);
		}
	}
	cout<<"\n"<<endl;
}

void FreshmanWorld::CreateMonster()
{
	cout<<"---------- 每个服务器地图块创建相应的怪 ---------- "<<endl;
	int UID = 0;
	for(int i=0; i<MAP_ROW; i++)
	{
		for(int j=0; j<MAP_LINE; j++)
		{
			for(int k=0; k<NPC_SIZE; k++)
			{ 
				new LogicNPC_Entity(++UID, m_pMapBlock[i][j]);  
			}
			for(int k=0; k<MAGIC_SIZE; k++)
			{
				new LogicMagic_Entity(++UID, m_pMapBlock[i][j]);  
			}
		}
	}
	cout<<"\n"<<endl;
}


void FreshmanWorld::MonsterEvent()
{
	Entity_Interface<ENTITY_TYPE::BASE_ENTITY>* pEntity = 0;
	cout<<"---------- 怪1 从0号街道移动到"<<(MAP_ROW-1)*MAP_LINE+MAP_LINE-1<<"号街道 ---------- "<<endl;
	pEntity = m_pMapBlock[0][0]->GetEntity(1);
	if( 0 != pEntity)
		pEntity->ToRes(m_pMapBlock[MAP_ROW-1][MAP_LINE-1], rand()%20, rand()%20);
	cout<<"---------- 法术3 从0号街道移动到1号街道 ---------- "<<endl;
	pEntity = m_pMapBlock[0][0]->GetEntity(3);
	if( 0 != pEntity)
		pEntity->ToRes(m_pMapBlock[0][1], rand()%20, rand()%20);
	cout<<"\n"<<endl;
}

void FreshmanWorld::Delete()
{
	cout<<"---------- 删除逻辑服务器地图块 ---------- "<<endl;
	for(int i=0; i<MAP_ROW; i++)
	{
		for(int j=0; j<MAP_LINE; j++)
		{
			if( 0 != m_pMapBlock[i][j] )
			{
				delete m_pMapBlock[i][j];
				m_pMapBlock[i][j] = 0;
			}
		}
	}
	cout<<"\n"<<endl;
}


 

/******************************
* 文件名:   Block_ProxyMap.h
* 创建人:   陈泽丹/Clark
* 创建时间: 20120330
* 文件描述:
******************************/




#pragma once
#include <iostream>
#include "../Interface/Res_Interface.h"


using namespace std;
class Block_ProxyMap:public Res_Interface<ENTITY_TYPE::BASE_ENTITY>
{
public:
	Block_ProxyMap(const int _BLOCK_ID): Res_Interface<ENTITY_TYPE::BASE_ENTITY>(_BLOCK_ID){}
	~Block_ProxyMap(){ cout<<"删除代理服地图块: "<<RES_ID<<endl; }
};


 

/******************************
* 文件名:   ProxyMagic_Entity.h
* 创建人:   陈泽丹/Clark
* 创建时间: 20120330
* 文件描述:
******************************/

#pragma once
#include "../Interface/Entity_Interface.h"
#include "../Interface/Res_Interface.h"
#include "../Interface/NPC/BaseNPC_Entity.h"



class ProxyMagic_Entity: public Entity_Interface<ENTITY_TYPE::BASE_ENTITY>
{
public:
	ProxyMagic_Entity( int _UID, Res_Interface<ENTITY_TYPE::BASE_ENTITY>* _pRes_Logic);

private:
	virtual ~ProxyMagic_Entity();
};


 

#include "ProxyMagic_Entity.h"
#include <iostream>

using namespace std;


ProxyMagic_Entity::ProxyMagic_Entity( int _UID, Res_Interface<ENTITY_TYPE::BASE_ENTITY>* _pRes_Logic):
Entity_Interface(_UID, _pRes_Logic) 
{
	m_iPosX = rand()%20;
	m_iPosY = rand()%20;
	cout<<"代理服"<<_pRes_Logic->RES_ID<<"号街道(地图块)创建火焰术["<< UID <<"], 坐标("<<m_pRes->RES_ID<<","<<m_iPosX<<","<<m_iPosY<<")"<<endl;
}

ProxyMagic_Entity::~ProxyMagic_Entity()
{
	cout<<"代理服"<<m_pRes->RES_ID<<"号街道(地图块)删除火焰术["<< UID <<"], 坐标("<<m_pRes->RES_ID<<","<<m_iPosX<<","<<m_iPosY<<")"<<endl;
}


 

/******************************
* 文件名:   ProxyNPC_Entity.h
* 创建人:   陈泽丹/Clark
* 创建时间: 20120330
* 文件描述:
******************************/

#pragma once
#include "../Interface/Entity_Interface.h"
#include "../Interface/Res_Interface.h"
#include "../Interface/NPC/BaseNPC_Entity.h"



class ProxyNPC_Entity: public Entity_Interface<ENTITY_TYPE::BASE_ENTITY>
{
public:
	ProxyNPC_Entity( int _UID, Res_Interface<ENTITY_TYPE::BASE_ENTITY>* _pRes_Logic);

private:
	virtual ~ProxyNPC_Entity();
};


 

#include "ProxyNPC_Entity.h"
#include <iostream>

using namespace std;


ProxyNPC_Entity::ProxyNPC_Entity( int _UID, Res_Interface<ENTITY_TYPE::BASE_ENTITY>* _pRes_Logic):
Entity_Interface(_UID, _pRes_Logic) 
{
	m_iPosX = rand()%20;
	m_iPosY = rand()%20;
	cout<<"代理服"<<_pRes_Logic->RES_ID<<"号街道(地图块)创建NPC["<< UID <<"], 坐标("<<m_pRes->RES_ID<<","<<m_iPosX<<","<<m_iPosY<<")"<<endl;
}

ProxyNPC_Entity::~ProxyNPC_Entity()
{
	cout<<"代理服"<<m_pRes->RES_ID<<"号街道(地图块)删除NPC["<< UID <<"], 坐标("<<m_pRes->RES_ID<<","<<m_iPosX<<","<<m_iPosY<<")"<<endl;
}


 

#include <iostream>
#include "LogicServer/FreshmanWorld.h"   
 

using namespace std;


FreshmanWorld* g_pFreshmanWorld = 0;

void Start()
{
	g_pFreshmanWorld = new FreshmanWorld();
}

void Run()
{
	if( 0 != g_pFreshmanWorld)
	{
		g_pFreshmanWorld->CreateMonster();
		g_pFreshmanWorld->MonsterEvent();
	}
}

void End()
{
	delete g_pFreshmanWorld;
}

void main()
{
	Start();
	Run();
	End();
	
	system("pause");  
}


 

 

 

第二次宣战_MMORPG设计_第2张图片

你可能感兴趣的:(第二次宣战_MMORPG设计)