⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gameunitmgr.cpp

📁 混乱竞技场的全套代码,客户端资源可以网上搜
💻 CPP
字号:
// GameUnitMgr.cpp: implementation of the GameUnitMgr class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "GameUnitMgr.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

GameUnitMgr::GameUnitMgr()
{
	m_seed	= UID_SEED_BEGIN;
	difficulty_level	= 0;
}

GameUnitMgr::~GameUnitMgr()
{

}

uint32 GameUnitMgr::new_uid()
{
	while(m_game_unit_map.find(m_seed)!=m_game_unit_map.end())
	{
		m_seed++;
		if(m_seed>UID_SEED_END)
		{
			m_seed	= UID_SEED_BEGIN;
		}
	}
	return m_seed++;
}

GAME_UNIT* GameUnitMgr::get_game_unit(uint32 uid)
{
	GAME_UNIT_MAP::iterator	it	= m_game_unit_map.find(uid);
	if(it!=m_game_unit_map.end())
	{
		return &it->second;
	}
	return NULL;
}

GAME_UNIT* GameUnitMgr::create_unit()
{
	uint32 uid = new_uid();
	GAME_UNIT* p	= &m_game_unit_map[uid];
	memset(p, 0, sizeof(GAME_UNIT));
	p->uid			= uid;
	return p;
}


bool GameUnitMgr::LoadCFG(const char *strCFG)
{
	CFG	cfg;
	if(FALSE==cfg.open(strCFG))
		return FALSE;

	m_aMonster.clear();

	difficulty_level	= cfg.GetFloat("main", "difficulty", "1.0f");
	if(difficulty_level<0.5f)
		difficulty_level = 0.5f;

	char str[100];
	for(int i=0; i<10000; i++)
	{
		sprintf(str, "monster_%d", i+1);

		GAME_MONSTER	game_monster;
		game_monster.unit_type			= cfg.GetLong(str, "unit_type");
		if(game_monster.unit_type==0)
			break;
		game_monster.nick_name			= cfg.GetString(str, "nick_name");
		//base
		game_monster.base_level			= cfg.GetLong(str, "base_level");
		game_monster.base_experience	= cfg.GetLong(str, "base_experience");
		game_monster.base_life			= cfg.GetLong(str, "base_life")*difficulty_level;
		game_monster.base_mana			= cfg.GetLong(str, "base_mana")*difficulty_level;
		game_monster.base_damage		= cfg.GetLong(str, "base_damage");
		game_monster.base_strength		= cfg.GetLong(str, "base_strength");
		game_monster.base_agility		= cfg.GetLong(str, "base_agility", "20");
		game_monster.base_magic			= cfg.GetLong(str, "base_magic", "20");
		//生成配置
		game_monster.pos_x				= cfg.GetLong(str, "pos_x");
		game_monster.pos_y				= cfg.GetLong(str, "pos_y");
		game_monster.base_revive_time   = cfg.GetLong(str, "base_revive_time");		//毫秒
		//使用ai处理的频率
		game_monster.base_ai_time		= cfg.GetLong(str, "base_ai_time");

		game_monster.base_eye_shot		= cfg.GetLong(str, "base_eye_shot");

		game_monster.ai_time			= float(rand())/(RAND_MAX+1)*game_monster.base_ai_time;;
		game_monster.revive_time		= float(rand())/(RAND_MAX+1)*game_monster.base_revive_time;

		for(int j=0; j<5; j++)
		{
			char str_temp[20];
			sprintf(str_temp, "magic_%d", j+1);
			game_monster.magics[j] = cfg.GetLong(str, str_temp);
			if(game_monster.magics[j]==0)
			{
				game_monster.magics[j]	= game_monster.magics[(int)(j*float(rand())/(RAND_MAX+1))];
			}
			sprintf(str_temp, "skill_%d", j+1);
			game_monster.skills[j] = cfg.GetLong(str, str_temp);
			if(game_monster.skills[j]==0)
			{
				game_monster.skills[j]	= game_monster.skills[(int)(j*float(rand())/(RAND_MAX+1))];
			}
		}

		m_aMonster.push_back(game_monster);
		GAME_MONSTER g_m = game_monster;
		m_aMonster.push_back(g_m);
//		GAME_MONSTER g_m_1 = game_monster;
//		m_aMonster.push_back(g_m_1);
//		GAME_MONSTER g_m_2 = game_monster;
//		m_aMonster.push_back(g_m_2);
	}

	return TRUE;
}

LONG GameUnitMgr::DoUpdate()
{
	return 0;
}

void GameUnitMgr::delete_unit(uint32 uid)
{
	GAME_UNIT_MAP::iterator it = m_game_unit_map.find(uid);
	if(it!=m_game_unit_map.end())
	{
		m_game_unit_map.erase(it);
	}
}

uint16 GameUnitMgr::query_monster_magic(uint32 uid)
{
	GAME_UNIT* pUnit = get_game_unit(uid);
	if(pUnit==NULL)
		return 0;
	return m_aMonster[pUnit->monster_index].magics[(int)(5*float(rand())/(RAND_MAX+1))];
}

uint16 GameUnitMgr::query_monster_skill(uint32 uid)
{
	GAME_UNIT* pUnit = get_game_unit(uid);
	if(pUnit==NULL)
		return 0;
	return m_aMonster[pUnit->monster_index].skills[(int)(5*float(rand())/(RAND_MAX+1))];
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -