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

📄 maingame.cpp

📁 混乱竞技场的全套代码,客户端资源可以网上搜
💻 CPP
📖 第 1 页 / 共 3 页
字号:
//		}

// 		D3DCOLOR	color	= RGBA_MAKE(96,96,96,255);
		D3DCOLOR	color	= RGBA_MAKE(46,46,46,255);

		m_aVertex[0].tu		= left;
		m_aVertex[0].tv		= top;
		m_aVertex[0].color	= color;

		m_aVertex[1].tu		= right;
		m_aVertex[1].tv		= top;
		m_aVertex[1].color	= color;
		
		m_aVertex[2].tu		= left;
		m_aVertex[2].tv		= bottom;
		m_aVertex[2].color	= color;
		
		m_aVertex[3].tu		= right;
		m_aVertex[3].tv		= bottom;
		m_aVertex[3].color	= color;
		LPDIRECT3DDEVICE7 pDevice	= m_pEngine->GetD3dDevice();
		pDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ONE);
		pDevice->SetRenderState(D3DRENDERSTATE_ZENABLE, false);
		pDevice->SetTexture( 0, pTexture->GetDDrawSurface() );
		{
			pDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 
											  D3DFVF_TLVERTEX,
											  (LPVOID)m_aVertex,
											  4,
											  0 );
		}
//		m_pEngine->PreparePaint();
//		m_pEngine->DarkenScene(1.9f);
		m_world.Render();
		m_pEngine->PreparePaint();
		hr = RenderUI();
		//画经验条
		Game_Unit* pUnit = GetControlUnit();
		if(pUnit)
		{
			m_pEngine->PreparePaint();
			m_pEngine->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE);
			GRECT rc(150,555,600,562);
			m_pEngine->Render_DrawRect(&rc, TRUE, RGBA_MAKE(0,0,255,50), 0.0f);
			if(pUnit->exp_level_up!=pUnit->exp_level && pUnit->base_experience>pUnit->exp_level)
			{
				rc.right	= rc.left + rc.width()*(pUnit->base_experience-pUnit->exp_level)/(pUnit->exp_level_up-pUnit->exp_level);
				m_pEngine->Render_DrawRect(&rc, TRUE, RGBA_MAKE(126,255,255,200), 0.0f);
			}
			if(!pUnit->is_death())
			{
				m_pEngine->Render_DrawRect(&m_rc_energy, TRUE, RGBA_MAKE(126,255,255,50), 0.0f);
				int power = Sys_GetTime()-pUnit->m_map_query_holder["melee"];
				m_rc_power.top	= 400 - power/10.0f;
				if(m_rc_power.top<100)
					m_rc_power.top = 100;
				if(power>3000)
				{
					int cr = m_pEngine->ValueCycle(128, 255, 0, 100);
					m_pEngine->Render_DrawRect(&m_rc_power, TRUE, RGBA_MAKE(cr,cr,150,250), 0.0f);
				}
				else if(power>1000)
				{
					int cr = m_pEngine->ValueCycle(78, 250, 0, 300);
					m_pEngine->Render_DrawRect(&m_rc_power, TRUE, RGBA_MAKE(150,cr,70,250), 0.0f);
				}
				else if(power>500)
				{
					int cr = m_pEngine->ValueCycle(78, 200, 0, 700);
					m_pEngine->Render_DrawRect(&m_rc_power, TRUE, RGBA_MAKE(150,cr,0,250), 0.0f);
				}
				else
				{
					m_pEngine->Render_DrawRect(&m_rc_power, TRUE, RGBA_MAKE(150,150,0,250), 0.0f);
				}
			}
			//画魔法图标
			m_pEngine->PreparePaint();
			for(int i=0; i<8; i++)
			{
				D3DCOLOR cr = D3DRGBA(0.5f, 0.5f, 0.5f, 1.0f);
				if(!pUnit->m_ani_spell.IsReady() 
					||(pUnit->m_ani_ranged.IsReady() && i>=4))
				{
					cr = D3DRGBA(0.3f, 0.3f, 0.3f, 0.8f);
				}
				if(m_magic_list[i].use>0)
				{
					m_magic_list[i].use	-= m_pEngine->m_dwPassTime;
					float fcr = m_pEngine->ValueCycle(0.5, 1.0, 0, 200);
					cr = D3DRGBA(fcr, fcr, fcr, 1.0f);
				}
				if(m_select_magic == i)
				{
					float fv = m_pEngine->ValueCycle(0.6f, 1.0f, 0, 500);
					m_magic_list[i].icon.DrawFast(40, 50+i*50, 1.0f, 0.6f, 0.6f, 1.0f, cr);
					m_magic_list[i].icon.DrawFast(40, 50+i*50, 1.0f, fv, fv, 0.5f);
					//m_pEngine->Render_PaintFast(40, 50+i*50, m_magic_list[i].icon.GetCurrentFrame(), 1.0f, 0.6f, 0.6f, 1.0f, cr);
					//m_pEngine->Render_PaintFast(40, 50+i*50, m_magic_list[i].icon.GetCurrentFrame(), 1.0f, fv, fv, 0.5f);
				}
				else
					m_magic_list[i].icon.DrawFast(40, 50+i*50, 1.0f, 0.6f, 0.6f, 1.0f, cr);
					//_pEngine->Render_PaintFast(40, 50+i*50, m_magic_list[i].icon.GetCurrentFrame(), 1.0f, 0.6f, 0.6f, 1.0f, cr);
			}
		}
	}
	return hr;
}
HRESULT MainGame::Draw(CGsSurface *pSurface)
{
	//Sys_Log(NULL, "begin draw time = %d", Sys_GetTime());
	char strMouse[100];
	LONG x = m_pEngine->m_Pos.x + m_world.m_rcOriginalPix.left;
	LONG y = m_pEngine->m_Pos.y + m_world.m_rcOriginalPix.top;
	sprintf(strMouse, "屏幕坐标X: %5d", m_pEngine->m_Pos.x);
	pSurface->DrawTextDirect(NULL, strMouse, 70, 10, RGB(255,255,255), RGB(0,0,0));
	sprintf(strMouse, "屏幕坐标Y: %5d", m_pEngine->m_Pos.y);
	pSurface->DrawTextDirect(NULL, strMouse, 70, 26, RGB(255,255,255), RGB(0,0,0));
	sprintf(strMouse, "世界坐标X: %5d", x);
	pSurface->DrawTextDirect(NULL, strMouse, 200, 10, RGB(255,255,255), RGB(0,0,0));
	sprintf(strMouse, "世界坐标Y: %5d", y);
	pSurface->DrawTextDirect(NULL, strMouse, 200, 26, RGB(255,255,255), RGB(0,0,0));
	m_world.PickFlatGrid(x,y);
	sprintf(strMouse, "格子坐标X: %5d", x);
	pSurface->DrawTextDirect(NULL, strMouse, 20, m_pEngine->GetRenderHeight() - 50, RGB(255,255,255), RGB(1,1,1));
	sprintf(strMouse, "格子坐标Y: %5d", y);
	pSurface->DrawTextDirect(NULL, strMouse, 20, m_pEngine->GetRenderHeight() - 30, RGB(255,255,255), RGB(1,1,1));
	pSurface->DrawTextDirect(NULL, m_str_net_speed, m_pEngine->GetRenderWidth()-100, m_pEngine->GetRenderHeight() - 30, RGB(255,255,255), RGB(1,1,1));


	Game_Unit* pUnit = GetControlUnit();
	if(pUnit)
	{
		for(int i=0; i<8; i++)
		{
			sprintf(strMouse, "F%d", i+1);
			pSurface->DrawTextDirect(NULL, strMouse, 15, 30+i*50, RGB(255,214,55), RGB(0,0,0));
		}
		sprintf(strMouse, "杀怪次数: %d", (LONG)pUnit->count_hunter);
		pSurface->DrawTextDirect(NULL, strMouse, 450, 10, RGB(255,185,55));//, RGB(1,1,1));
		sprintf(strMouse, "杀人次数: %d", (LONG)pUnit->count_pk);
		pSurface->DrawTextDirect(NULL, strMouse, 450, 30, RGB(255,205,155));//, RGB(1,1,1));
		sprintf(strMouse, "死亡次数: %d", (LONG)pUnit->count_die);
		pSurface->DrawTextDirect(NULL, strMouse, 450, 50, RGB(255,55,55));//, RGB(1,1,1));
		sprintf(strMouse, "等级: %d", (LONG)pUnit->base_level);
		pSurface->DrawTextDirect(NULL, strMouse, m_pEngine->GetRenderWidth()-170, m_pEngine->GetRenderHeight() - 190, RGB(255,255,255));//, RGB(1,1,1));
		sprintf(strMouse, "经验: %d/%d", (LONG)pUnit->base_experience, pUnit->exp_level_up);
		pSurface->DrawTextDirect(NULL, strMouse, m_pEngine->GetRenderWidth()-170, m_pEngine->GetRenderHeight() - 170, RGB(255,255,255));//, RGB(1,1,1));
		sprintf(strMouse, "攻击: %d", (LONG)pUnit->base_damage);
		pSurface->DrawTextDirect(NULL, strMouse, m_pEngine->GetRenderWidth()-170, m_pEngine->GetRenderHeight() - 150, RGB(255,255,255));//, RGB(1,1,1));
		sprintf(strMouse, "力量: %d", (LONG)pUnit->base_strength);
		pSurface->DrawTextDirect(NULL, strMouse, m_pEngine->GetRenderWidth()-170, m_pEngine->GetRenderHeight() - 130, RGB(255,255,255));//, RGB(1,1,1));
		sprintf(strMouse, "敏捷: %d", (LONG)pUnit->base_agility);
		pSurface->DrawTextDirect(NULL, strMouse, m_pEngine->GetRenderWidth()-170, m_pEngine->GetRenderHeight() - 110, RGB(255,255,255));//, RGB(1,1,1));
		sprintf(strMouse, "魔力: %d", (LONG)pUnit->base_magic);
		pSurface->DrawTextDirect(NULL, strMouse, m_pEngine->GetRenderWidth()-170, m_pEngine->GetRenderHeight() - 90, RGB(255,255,255));//, RGB(1,1,1));
		sprintf(strMouse, "生命: %d/%d", (LONG)pUnit->life, (LONG)pUnit->base_life);
		pSurface->DrawTextDirect(NULL, strMouse, m_pEngine->GetRenderWidth()-170, m_pEngine->GetRenderHeight() - 70, RGB(255,255,255));//, RGB(1,1,1));
		sprintf(strMouse, "魔法: %d/%d", (LONG)pUnit->mana, (LONG)pUnit->base_mana);
		pSurface->DrawTextDirect(NULL, strMouse, m_pEngine->GetRenderWidth()-170, m_pEngine->GetRenderHeight() - 50, RGB(255,255,255));//, RGB(1,1,1));
		Game_Unit* pUnit_aim	= (Game_Unit*)m_world.GetObject(pUnit->m_aim_unit);
		if(pUnit_aim)
		{
			sprintf(strMouse, "名称: %s", pUnit_aim->GetName());
			pSurface->DrawTextDirect(NULL, strMouse, m_pEngine->GetRenderWidth()/2-70, 10, RGB(255,155,155));//, RGB(1,1,1));
			sprintf(strMouse, "等级: %d", (LONG)pUnit_aim->base_level);
			pSurface->DrawTextDirect(NULL, strMouse, m_pEngine->GetRenderWidth()/2-70, 30, RGB(255,55,55));//, RGB(1,1,1));
			sprintf(strMouse, "攻击: %d", (LONG)pUnit_aim->base_damage);
			pSurface->DrawTextDirect(NULL, strMouse, m_pEngine->GetRenderWidth()/2-70, 50, RGB(255,55,55));//, RGB(1,1,1));
			sprintf(strMouse, "力量: %d", (LONG)pUnit_aim->base_strength);
			pSurface->DrawTextDirect(NULL, strMouse, m_pEngine->GetRenderWidth()/2-70, 70, RGB(255,55,55));//, RGB(1,1,1));
			sprintf(strMouse, "敏捷: %d", (LONG)pUnit_aim->base_agility);
			pSurface->DrawTextDirect(NULL, strMouse, m_pEngine->GetRenderWidth()/2-70, 90, RGB(255,55,55));//, RGB(1,1,1));
			sprintf(strMouse, "魔力: %d", (LONG)pUnit_aim->base_magic);
			pSurface->DrawTextDirect(NULL, strMouse, m_pEngine->GetRenderWidth()/2-70, 110, RGB(255,55,55));//, RGB(1,1,1));
			sprintf(strMouse, "生命: %d/%d", (LONG)pUnit_aim->life, (LONG)pUnit_aim->base_life);
			pSurface->DrawTextDirect(NULL, strMouse, m_pEngine->GetRenderWidth()/2-70, 130, RGB(255,55,55));//, RGB(1,1,1));
			if(pUnit_aim->base_mana>0)
			{
				sprintf(strMouse, "魔法: %d/%d", (LONG)pUnit_aim->mana, (LONG)pUnit_aim->base_mana);
				pSurface->DrawTextDirect(NULL, strMouse, m_pEngine->GetRenderWidth()/2-70, 150, RGB(255,55,55));//, RGB(1,1,1));
			}
		}
	}

	std::list<GAME_MSG>::iterator	it = m_list_game_msg.begin();
	for (int i=0; i<6 && it!=m_list_game_msg.end(); i++) 
	{
		pSurface->DrawTextDirect(NULL, 
								 it->str_msg.c_str(), 
								 20, 
								 m_pEngine->GetRenderHeight()-50-(i+1)*16, 
								 RGB(RGBA_GETRED(it->color), RGBA_GETGREEN(it->color), RGBA_GETBLUE(it->color)), 
								 RGB(0,0,0));
		it++;
	}


//	Sys_Log(NULL, "end draw time = %d", Sys_GetTime());
	return S_OK;
}

VOID MainGame::Cleanup()
{
	CGsGame::Cleanup();
}

VOID MainGame::ReleaseSource()	
{
//	m_ani_select_unit.ReleaseSource();
//	m_ani_light_shadow.ReleaseSource();
//	m_ani_dreamland.ReleaseSource();
//	m_ani_test.ReleaseSource();

	m_tex_game_msg.ReleaseObjects();
	m_world.ReleaseSource();

	CGsGame::ReleaseSource();

}

HRESULT MainGame::RestoreSource() 
{
//	m_ani_select_unit.RestoreSource();
//	m_ani_light_shadow.RestoreSource();
//	m_ani_dreamland.RestoreSource();
//	m_ani_test.RestoreSource();
	m_ani_light_shadow.GetTextureGroup()->SetBasePoint(64,64);

	m_tex_game_msg.RestoreObjects();
	m_world.RestoreSource();
	return CGsGame::RestoreSource();
}


BOOL MainGame::InitGame()
{
//	std::string str = CGsFunc::GetGsApp()->GetAppPath(NULL);
//	str += "\\server.ini";
//	if(FALSE==LoadConfig())
//		return FALSE;

	m_ani_select_unit.SetGsEngine(m_pEngine);
	m_ani_select_unit.Create("ani\\select_4");
	m_ani_light_shadow.SetGsEngine(m_pEngine);
	m_ani_light_shadow.Create("particle.bmp");
	m_ani_light_shadow.GetTextureGroup()->SetBasePoint(64,64);
	m_ani_dreamland.SetGsEngine(m_pEngine);
//	m_ani_dreamland.Create("land.jpg");//"animation\\effect\\caust");
	m_ani_dreamland.Create("land_grass.txg");
	m_ani_dreamland.SetCache(0);
//	m_ani_magic_skill.SetGsEngine(m_pEngine);
//	m_ani_magic_skill.Create("magic\\icon\\small.txg");
	//m_ani_magic_skill.SetCache(0);
	m_ani_dreamland.Play();

//	m_bk_music.SetStreamSource("music\\battle_5.mp3");
	m_bk_music.SetLooping(FALSE);
//	m_bk_music.Play();

	m_magic_list[0].type	= 2001;
	m_magic_list[0].use		= 0;
	m_magic_list[0].icon.SetGsEngine(m_pEngine);
	m_magic_list[0].icon.Create("magic\\icon\\small.txg,18");
	m_magic_list[1].use		= 0;
	m_magic_list[1].type	= 2002;
	m_magic_list[1].icon.SetGsEngine(m_pEngine);
	m_magic_list[1].icon.Create("magic\\icon\\death.txg,3");
	m_magic_list[2].type	= 2003;
	m_magic_list[2].use		= 0;
	m_magic_list[2].icon.SetGsEngine(m_pEngine);
	m_magic_list[2].icon.Create("magic\\icon\\small.txg,11");
	m_magic_list[3].type	= 2004;
	m_magic_list[3].use		= 0;
	m_magic_list[3].icon.SetGsEngine(m_pEngine);
	m_magic_list[3].icon.Create("magic\\icon\\small.txg,31");
	m_magic_list[4].type	= 2051;
	m_magic_list[4].use		= 0;
	m_magic_list[4].icon.SetGsEngine(m_pEngine);
	m_magic_list[4].icon.Create("magic\\icon\\small.txg,5");
	m_magic_list[5].type	= 2052;
	m_magic_list[5].use		= 0;
	m_magic_list[5].icon.SetGsEngine(m_pEngine);
	m_magic_list[5].icon.Create("magic\\icon\\small.txg,15");
	m_magic_list[6].type	= 2053;
	m_magic_list[6].use		= 0;
	m_magic_list[6].icon.SetGsEngine(m_pEngine);
	m_magic_list[6].icon.Create("magic\\icon\\small.txg,10");
	m_magic_list[7].type	= 2054;
	m_magic_list[7].use		= 0;
	m_magic_list[7].icon.SetGsEngine(m_pEngine);
	m_magic_list[7].icon.Create("magic\\icon\\small.txg,1");

	if(!IsReady())
	{
		return FALSE;
	}
//	Login();
	return TRUE;
}

BOOL MainGame::LoadConfig()
{
	if(std::string("client 1.0")!=g_config.GetString("MAIN", "style"))
		return FALSE;
	if(m_account.empty())
		m_account	= g_config.GetString("MAIN", "account");
	m_password	= g_config.GetString("MAIN", "password");
	m_server_ip = ntohl(inet_addr(g_config.GetString("MAIN", "server_ip", "0.0.0.0")));
	if(m_server_ip==0)
	{
		m_server_ip = ntohl(NET_GetLocalIP());
	}
	m_server_port = g_config.GetLong("MAIN", "server_port");
	m_locate_port = g_config.GetLong("MAIN", "locate_port");
	m_want_unit_light	= g_config.GetBOOL("EFFECT", "want_unit_light", "false");
//	m_is_show_fps	= g_config.GetBOOL("MAIN", "show_fps");
	return TRUE;
}


Game_Unit* MainGame::GetControlUnit()
{
	GM_Object*	pObj	= m_world.GetObject(m_id_player);
	Game_Unit*	pUnit	= (Game_Unit*)pObj;//dynamic_cast<GM_Unit*>(pObj);
	return pUnit;	
}

BOOL MainGame::StartGame()
{
//	BOOL bRet = m_world.CreateWorld("image\\jpeg\\map.JPG");
// 	m_world.SetDrawGridFlag(DRAW_GRID_FRAME|DRAW_GRID_OBJECT);
	BOOL bRet = m_world.CreateWorld(4000,4000);

	m_tex_game_msg.CreateEx(512, 256);

	GetMainUI()->Create("ui\\main.ini");

	return bRet;

}

void MainGame::EndGame()
{
	Logout(m_id_player);
}

void MainGame::add_game_msg(D3DCOLOR color, const char *str_msg, ...)
{
	va_list args;
	va_start(args, str_msg);
	char str[256];
	VSNPRINTF(str,255,str_msg,args);
	/* write to file */
	va_end(args);

	if(m_list_game_msg.size()>50)
	{
		m_list_game_msg.pop_back();
	}
	GAME_MSG msg;
	msg.color	= color;
	msg.str_msg	= str;
	m_list_game_msg.push_front(msg);


	m_is_msg_change	= TRUE;
}

HRESULT MainGame::Redraw_Msg()
{
	HRESULT hr;
	m_tex_game_msg.Clear(0);
	std::list<GAME_MSG>::iterator	it = m_list_game_msg.begin();
	for (int i=0; i<15 && it!=m_list_game_msg.end(); i++) 
	{
		GRECT rc(0, 256-(i+1)*16, 512, 256-i*16);
		hr = m_tex_game_msg.DrawText(NULL,
									 (*it).str_msg.c_str(), 
									 &rc, 
									 512, 
									 256, 
									 DT_SINGLELINE|DT_VCENTER, 
									 (*it).color/*RGBA_MAKE(0,205,255,230)*/, 
									 RGBA_MAKE(0,0,0,0));

		it++;
	}
	m_is_msg_change	= FALSE;
	return hr;
}


void MainGame::on_speek(uint32 uid_speeker, const char *strSpeek)
{
	Game_Unit* pUnit	= (Game_Unit*)m_world.GetObject(uid_speeker);
	if(pUnit)
	{
		pUnit->SetSpeekText(strSpeek);
	}
}

⌨️ 快捷键说明

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