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

📄 maingame.cpp

📁 网络泡泡被.net管理
💻 CPP
📖 第 1 页 / 共 5 页
字号:
					continue;
				}
			}
			else
			{
				(*it)->ptr_effect->Render(GPOINT(0,0));
			}
		}
		else
		{
			if (t_<=0)
			{
				delete(*it);
				it	= m_lst_effect_skill.erase(it);
				continue;
			}
		}
		
		it++;
	}
	
	float fa	= m_pEngine->ValueLoop(0, 8, 0, 8, 400);
	float scale;
	if (fa==0)
		scale = m_pEngine->ValueCycle(1, 1.15f, 0, 100);
	else
		scale = 1;
	m_pEngine->PreparePaint();
	if (m_ptr_player && m_ptr_player->GetState()==PLAYER_STATE_WIN)
	{
		m_pEngine->Render_Paint(400, 250, &m_tex_game_time, 1.0f, 10.2f*scale, 15.4f*scale, 1.0f, 0.0f, RGBA_MAKE(255, 64, 32,255));
	}
	m_pEngine->Render_Paint(693, 18, &m_tex_game_time, 1.0f, 1.2f*scale, 1.6f*scale, 1.0f, 0.0f, RGBA_MAKE(155, 200, 32,255));

	
	//画魔法书
	if ((m_is_show_magic_book || m_rc_magic_book.top<m_pEngine->GetRenderHeight()) && m_rc_magic_book.height()>0 )
	{
		if (m_is_show_magic_book)
		{
			m_rc_magic_book	-= GPOINT(0, 100);
			if (m_rc_magic_book.top<0 || m_rc_magic_book.top < (m_pEngine->GetRenderHeight()-MAGIC_CARD_BOOK_HEIGHT)/2)
			{
				m_rc_magic_book.top = (m_pEngine->GetRenderHeight()-MAGIC_CARD_BOOK_HEIGHT)/2;
				m_rc_magic_book.bottom = m_rc_magic_book.top + MAGIC_CARD_BOOK_HEIGHT;
			}
		}
		else
		{
			m_rc_magic_book	+= GPOINT(0, 100);
		}
		m_pEngine->Render_DrawRect(&m_rc_magic_book, TRUE, D3DRGBA(0.1f, 0.1f, 0.38f, 0.8f));
		m_pEngine->Render_DrawRect(&m_rc_magic_book, FALSE, D3DRGBA(1.0f, 0.7f, 0.2f, 0.7f));
		for (int i=0; i<ENUM_CARD_NUM; i++)
		{
			GRECT rc_card	= GRECT(m_rc_magic_book.left + 30 + i%2*MAGIC_CARD_BOOK_WIETH/2,
									m_rc_magic_book.top + 30 + i/2*MAGIC_CARD_BOOK_HEIGHT/7,
									m_rc_magic_book.left + 30 + i%2*MAGIC_CARD_BOOK_WIETH/2 + 200,
									m_rc_magic_book.top + 25 + (i/2+1)*MAGIC_CARD_BOOK_HEIGHT/7);
			m_pEngine->Render_DrawRect(&rc_card, TRUE, D3DRGBA(0.3f, 0.1f, 0.18f, 0.8f));
			m_pEngine->Render_PaintFast(rc_card.left + 33,
										rc_card.top + 30,
										g_get_ani_card(i+1),
										1.0f,
										1.0f,
										1.0f);
			m_pEngine->Render_DrawRect(&rc_card, FALSE, D3DRGBA(1.0f, 0.7f, 0.2f, 0.7f));
		}
	}

	return hr;
}

HRESULT MainGame::Render_lobby()
{
	HRESULT hr =
	m_pEngine->GetD3dDevice()->Clear(0UL, NULL, D3DCLEAR_TARGET ,
		RGBA_MAKE(0,0,100,255), 
		1.0f, 0L );
	g_render_background(m_pEngine);

	//画桌子信息
	GRECT	rc(m_pEngine->GetRenderWidth()/2-350, 100, m_pEngine->GetRenderWidth()/2+350, 500);
	m_pEngine->Render_DrawRect(&rc, TRUE, RGBA_MAKE(0, 50, 200, 255));
	m_pEngine->Render_DrawRect(&rc, FALSE, D3DRGBA(1.0f, 0.7f, 0.2f, 0.7f));
	for (int j=0; j<2; j++)
	{
		for (int i=0; i<NUM_TABLE_IN_LINE; i++)
		{
			GRECT rc_table(m_pEngine->GetRenderWidth()/2 - 335 + j*340, 115 +  i*130,m_pEngine->GetRenderWidth()/2 - 5 + j*340, 235 +  i*130);
			int index	= m_page_table_select + j*NUM_TABLE_IN_LINE + i + 1;
			int idx_select	= 0;
			if (is_point_in_rect(m_pEngine->m_Pos, rc_table))
			{
				idx_select = index;
			}
			float fr= 0.5f;
			if (m_index_table_select==index)
				fr = 1.0f;
			if (idx_select==index)
				fr	= m_pEngine->ValueCycle(0.3f, 1.0f, 0, 300);
			m_pEngine->Render_DrawRect(&rc_table, TRUE, D3DRGBA(0.6f*fr, 0.2f*fr, 0.18f*fr, 0.8f));
			m_pEngine->Render_DrawRect(&rc_table, FALSE, D3DRGBA(1.0f, 0.7f, 0.2f, 0.7f));
			GRECT rc_table_tip(rc_table.left+5, rc_table.top+5,rc_table.left+65, rc_table.bottom-5);
			m_pEngine->Render_DrawRect(&rc_table_tip, TRUE, D3DRGBA(0.1f*fr, 0.1f*fr, 0.1f*fr, 0.8f));
			m_pEngine->Render_DrawRect(&rc_table_tip, FALSE, D3DRGBA(1.0f, 0.7f, 0.2f, 0.7f));
			std::map<USHORT, STRUCT_TABLE_INFO>::iterator it_ti	= m_map_table.find(index);
			STRUCT_TABLE_INFO* p_ti	= NULL;
			if (it_ti!=m_map_table.end())
				p_ti	= &it_ti->second;
			for (int n=0; n<NUM_CHAIR; n++)
			{
				GRECT rc_player(rc_table.left + 70 + n*43, rc_table.top +5, rc_table.left + 110 + n*43, rc_table.top +75);
				m_pEngine->Render_DrawRect(&rc_player, TRUE, D3DRGBA(0.2f*fr, 0.2f*fr, 0.6f*fr, 0.8f));
				GRECT rc_player_tip(rc_player.left, rc_player.bottom+1,rc_player.right, rc_table.bottom-5);
				m_pEngine->Render_DrawRect(&rc_player_tip, TRUE, D3DRGBA(0.1f*fr, 0.1f*fr, 0.1f*fr, 0.8f));
				if (p_ti && p_ti->player[n])
				{
					STRUCT_ADD_USER* p_au	= GetUser(p_ti->player[n]);
					if (p_au)
					{
						CGsTextureGroup* pTxg	= m_pEngine->FindTextureGroup(g_get_str_shows_res(p_au->us_type));
						if (pTxg)
						{
							m_pEngine->Render_ClipPaintFast(rc_player.left-11, rc_player.top-18,
								rc_player,
								pTxg->GetTexture(0),
								0.0f,
								0.42f,
								0.42f);
						}
					}
				}
				m_pEngine->Render_DrawRect(&rc_player, FALSE, D3DRGBA(1.0f, 0.7f, 0.2f, 0.7f));
				m_pEngine->Render_DrawRect(&rc_player_tip, FALSE, D3DRGBA(1.0f, 0.7f, 0.2f, 0.7f));
			}
		}
	}
	std::map<ULONG, STRUCT_ADD_USER>::iterator it_player	= m_map_user.begin();
	for (int i=0; i<=m_page_player_select; i++)
		it_player++;
	for (i=0; i<4; i++)
	{
		float fr= 0.5f;
		if (m_index_player_select==m_page_player_select+i)
			fr	= m_pEngine->ValueCycle(0.3f, 1.0f, 0, 300);
		GRECT rc_player(521 + 57*i, 5, 576 + 57*i, 65);
		GRECT rc_player_tip(521 + 57*i, 67, 576 + 57*i, 95);
		if (it_player!=m_map_user.end() && (is_point_in_rect(m_pEngine->m_Pos, rc_player) || is_point_in_rect(m_pEngine->m_Pos, rc_player_tip)))
		{
			GRECT rc_select_frame(rc_player.left-1, rc_player.top-1, rc_player.right+1, rc_player_tip.bottom+1);
			//m_index_player_select	= m_index_player_select+i;
			m_pEngine->Render_DrawRect(&rc_select_frame, TRUE, RGBA_MAKE(BYTE(255*(1.0f-fr)),BYTE(185*fr),BYTE(55*fr), 255));
		}
		m_pEngine->Render_DrawRect(&rc_player, TRUE, D3DRGBA(0.2f*fr, 0.2f*fr, 0.6f*fr, 0.8f));
		m_pEngine->Render_DrawRect(&rc_player_tip, TRUE, D3DRGBA(0.1f*fr, 0.1f*fr, 0.1f*fr, 0.8f));
		if (it_player!=m_map_user.end())
		{
			CGsTextureGroup* pTxg	= m_pEngine->FindTextureGroup(g_get_str_shows_res(it_player->second.us_type));
			if (pTxg)
			{
				m_pEngine->Render_ClipPaintFast(rc_player.left-35, rc_player.top-40,
					rc_player,
					pTxg->GetTexture(0),
					0.0f,
					0.9f,
					0.9f);
			}
			it_player++;
		}
		m_pEngine->Render_DrawRect(&rc_player, FALSE, D3DRGBA(1.0f*fr, 0.7f*fr, 0.2f*fr, 0.7f));
		m_pEngine->Render_DrawRect(&rc_player_tip, FALSE, D3DRGBA(1.0f*fr, 0.7f*fr, 0.2f*fr, 0.7f));
	}
	{
		float fr= 0.5f;
		GRECT rc_player(45, 508, 110, 592);
		GRECT rc_player_tip(115, 508, 170, 558);
		m_pEngine->Render_DrawRect(&rc_player, TRUE, D3DRGBA(0.2f*fr, 0.2f*fr, 0.6f*fr, 0.8f));
		m_pEngine->Render_DrawRect(&rc_player_tip, TRUE, D3DRGBA(0.1f*fr, 0.1f*fr, 0.1f*fr, 0.8f));
		
		STRUCT_ADD_USER* p_au	= GetUser(m_id_player);
		if (m_id_player>0 && p_au)
		{
			CGsTextureGroup* pTxg	= m_pEngine->FindTextureGroup(g_get_str_shows_res(p_au->us_type));
			if (pTxg)
			{
				m_pEngine->Render_ClipPaintFast(rc_player.left-37, rc_player.top-45,
					rc_player,
					pTxg->GetTexture(0),
					0.0f,
					1.0f,
					1.0f);
			}
		}
		m_pEngine->Render_DrawRect(&rc_player, FALSE, D3DRGBA(1.0f, 0.7f, 0.2f, 0.7f));
		m_pEngine->Render_DrawRect(&rc_player_tip, FALSE, D3DRGBA(1.0f, 0.7f, 0.2f, 0.7f));
	}
	m_pEngine->PreparePaint();
	hr = RenderUI();
	return hr;
}

FLAG MainGame::Update_game()
{
	for(int i=0; i<NUM_CHAIR; i++)
	{
		if(-1==m_array_player[i].Update())
		{
			NET_Session* ptr_session	= GetSession();
			NET_Packet*	pPacket	= new NET_Packet;
			pPacket->setCmd(GSP_UPDATE_SCENE);
			pPacket->write32(player[i]);
			ptr_session->PushSendPacket(pPacket);
		}
	}
	if (m_is_playing && m_ptr_player && m_ptr_player->m_is_shoot_shaking==FALSE 
		&& Sys_GetTime()-m_msg_holder["shoot"]>LIMIT_SHAKE_DELAY)
	{
		m_ptr_player->m_is_shoot_shaking	= TRUE;
	}
	
	if(m_is_playing)
	{
		if(!m_bk_music.IsPlaying())
		{
			m_bk_music.SetStreamSource(g_get_str_musics_res((int)(rnd()*g_get_num_musics_res())));
			m_bk_music.Play();
		}
	}
	return 0;
}

FLAG MainGame::Update_lobby()
{
	return 0;
}

HRESULT MainGame::Draw_game(CGsSurface *pSurface)
{
	if ((m_is_show_magic_book || m_rc_magic_book.top<m_pEngine->GetRenderHeight()) && m_rc_magic_book.height()>0 )
	{
		for (int i=0; i<ENUM_CARD_NUM; i++)
		{
			GRECT rc_card	= GRECT(m_rc_magic_book.left + 30 + i%2*MAGIC_CARD_BOOK_WIETH/2,
									m_rc_magic_book.top + 30 + i/2*MAGIC_CARD_BOOK_HEIGHT/7,
									m_rc_magic_book.left + 30 + i%2*MAGIC_CARD_BOOK_WIETH/2 + 200,
									m_rc_magic_book.top + 25 + (i/2+1)*MAGIC_CARD_BOOK_HEIGHT/7);
			pSurface->DrawTextDirect(NULL, STR_card_name[i][0],
									 rc_card.left + 62, rc_card.top + 5, 
									 RGB(255, 255, 128));
			pSurface->DrawTextInRect(NULL, STR_card_name[i][1], 
									 rc_card.left + 62, rc_card.top + 25, 
									 rc_card.width() - 65, rc_card.height() - 25, 
									 RGB(128, 255, 0));
		}
		char str_tip[50];
		sprintf(str_tip, "发射泡泡:");
		pSurface->DrawTextDirect(NULL, str_tip, 
								 m_rc_magic_book.left + 70, 
								 m_rc_magic_book.bottom - 40, 
								 RGB(255,255,255), RGB(0,0,0));
		sprintf(str_tip, "↑键、空格键");
		pSurface->DrawTextDirect(NULL, str_tip, 
								 m_rc_magic_book.left + 170, 
								 m_rc_magic_book.bottom - 40, 
								 RGB(200,175,35), RGB(0,0,0));
		sprintf(str_tip, "使用泡泡:");
		pSurface->DrawTextDirect(NULL, str_tip, 
								 m_rc_magic_book.left + 70 + MAGIC_CARD_BOOK_WIETH/2, 
								 m_rc_magic_book.bottom - 40, 
								 RGB(255,255,255), RGB(0,0,0));
		sprintf(str_tip, "1-6键");
		pSurface->DrawTextDirect(NULL, str_tip, 
								 m_rc_magic_book.left + 170 + MAGIC_CARD_BOOK_WIETH/2, 
								 m_rc_magic_book.bottom - 40, 
								 RGB(200,175,35), RGB(0,0,0));
		sprintf(str_tip, "向左偏转:");
		pSurface->DrawTextDirect(NULL, str_tip, 
								 m_rc_magic_book.left + 70, 
								 m_rc_magic_book.bottom - 20, 
								 RGB(255,255,255), RGB(0,0,0));
		sprintf(str_tip, "←键");
		pSurface->DrawTextDirect(NULL, str_tip, 
								 m_rc_magic_book.left + 170, 
								 m_rc_magic_book.bottom - 20, 
								 RGB(200,175,35), RGB(0,0,0));
		sprintf(str_tip, "向右偏转:");
		pSurface->DrawTextDirect(NULL, str_tip, 
								 m_rc_magic_book.left + 70 + MAGIC_CARD_BOOK_WIETH/2, 
								 m_rc_magic_book.bottom - 20, 
								 RGB(255,255,255), RGB(0,0,0));
		sprintf(str_tip, "→键");
		pSurface->DrawTextDirect(NULL, str_tip, 
								 m_rc_magic_book.left + 170 + MAGIC_CARD_BOOK_WIETH/2, 
								 m_rc_magic_book.bottom - 20, 
								 RGB(200,175,35), RGB(0,0,0));
	}
	return S_OK;
}

HRESULT MainGame::Draw_lobby(CGsSurface *pSurface)
{
	char strText[100];
	//画桌子信息
	HFONT fnt_small		= CGsFunc::Font_QuickCreateFont(7);
	GRECT	rc(m_pEngine->GetRenderWidth()/2-350, 100, m_pEngine->GetRenderWidth()/2+350, 500);
	for (int j=0; j<2; j++)
	{
		for (int i=0; i<NUM_TABLE_IN_LINE; i++)
		{
			GRECT rc_table(m_pEngine->GetRenderWidth()/2 - 335 + j*340, 115 +  i*130,m_pEngine->GetRenderWidth()/2 - 5 + j*340, 235 +  i*130);
			GRECT rc_table_tip(rc_table.left+5, rc_table.top+5,rc_table.left+65, rc_table.bottom-5);
			int index	= m_page_table_select + j*NUM_TABLE_IN_LINE + i + 1;
			int idx_select	= 0;
			if (is_point_in_rect(m_pEngine->m_Pos, rc_table))
				idx_select = index;
			float fr	= m_pEngine->ValueCycle(0.0f, 1.0f, 0, 300);
			std::map<USHORT, STRUCT_TABLE_INFO>::iterator it_ti	= m_map_table.find(index);
			STRUCT_TABLE_INFO* p_ti	= NULL;
			if (it_ti!=m_map_table.end())
				p_ti	= &it_ti->second;
			sprintf(strText, "房间:%d", (LONG)index);
			pSurface->DrawTextDirect(NULL, strText, rc_table_tip.left + 2, rc_table_tip.top + 10, RGB(255,185,55));//, RGB(1,1,1));
			sprintf(strText, "人数:%d", p_ti ? p_ti->uc_user : 0);
			pSurface->DrawTextDirect(NULL, strText, rc_table_tip.left + 2, rc_table_tip.top + 30, RGB(255,55,55));//, RGB(1,1,1));
			if (p_ti && p_ti->is_playing)
				pSurface->DrawTextDirect(NULL, "游戏中", rc_table_tip.left + 2, rc_table_tip.top + 50, RGB(255*fr,205*(1.0f-fr),151.5*fr*fr));//, RGB(1,1,1));
			for (int n=0; n<NUM_CHAIR; n++)
			{
				GRECT rc_player(rc_table.left + 70 + n*43, rc_table.top +5, rc_table.left + 110 + n*43, rc_table.top +75);
				GRECT rc_player_tip(rc_player.left, rc_player.bottom+1,rc_player.right, rc_table.bottom-5);
				if (p_ti && p_ti->player[n])
				{
					STRUCT_ADD_USER* p_au	= GetUser(p_ti->player[n]);
					if (p_au)
					{
						pSurface->DrawTextDirect(fnt_small, p_au->str_name, rc_player_tip.left+1 , rc_player.bottom + 1, RGB(255,205,105));//, RGB(1,1,1));
						sprintf(strText, "得分:%d", (LONG)p_au->n_score);
						pSurface->DrawTextDirect(fnt_small, strText, rc_player_tip.left+1, rc_player.bottom + 11, RGB(255,185,55));//, RGB(1,1,1));
						sprintf(strText, "胜数:%d", (LONG)p_au->us_win);
						pSurface->DrawTextDirect(fnt_small, strText, rc_player_tip.left+1, rc_player.bottom + 20, RGB(255,185,55));//, RGB(1,1,1));
						sprintf(strText, "败数:%d", (LONG)p_au->us_lost);
						pSurface->DrawTextDirect(fnt_small, strText, rc_player_tip.left+1, rc_player.bottom + 29, RGB(255,185,55));//, RGB(1,1,1));
					}
				}
			}
		}
	}
	//fnt_small		= CGsFunc::Font_QuickCreateFont(8);
	HFONT fnt_big		= CGsFunc::Font_QuickCreateFont(8);
	std::map<ULONG, STRUCT_ADD_USER>::iterator it_player	= m_map_user.begin();
	for (int i=0; i<=m_page_player_select; i++)
		it_player++;
	for (i=0; i<4; i++)
	{
		float fr= 0.5f;
		if (m_index_player_select==m_page_player_select+i)
			fr	= m_pEngine->ValueCycle(0.3f, 1.0f, 0, 300);
		GRECT rc_player(521 + 57*i, 5, 576 + 57*i, 65);
		GRECT rc_player_tip(521 + 57*i, 67, 576 + 57*i, 95);
		if (it_player!=m_map_user.end())
		{
			pSurface->DrawTextDirect(fnt_big, it_player->second.str_name, rc_player_tip.left+1, rc_player.bottom + 5, RGB(255,205,105));//, RGB(1,1,1));
			sprintf(strText, "得分:%d", (LONG)it_player->second.n_score);
			pSurface->DrawTextDirect(fnt_small, strText, rc_player_tip.left+1, rc_player.bottom + 16, RGB(155,255,55));//, RGB(1,1,1));
//			sprintf(strText, "胜数:%d", (LONG)it_player->second.us_win);
//			pSurface->DrawTextDirect(fnt_small, strText, rc_player_tip.left+1, rc_player.bottom + 23, RGB(255,185,55));//, RGB(1,1,1));
//			sprintf(strText, "败数:%d", (LONG)it_player->second.us_lost);
//			pSurface->DrawTextDirect(fnt_small, strText, rc_player_tip.left+1, rc_player.bottom + 32, RGB(255,185,55));//, RGB(1,1,1));
			it_player++;
		}
	}
	{
		float fr= 0.5f;
		GRECT rc_player(45, 508, 110, 592);
		GRECT rc_player_tip(115, 508, 170, 558);
		
		STRUCT_ADD_USER* p_au	= GetUser(m_id_player);
		if (m_id_player>0 && p_au)
		{
			pSurface->DrawTextDirect(fnt_big, p_au->str_name, rc_player_tip.left+1, rc_player_tip.top + 2, RGB(255,205,105));//, RGB(1,1,1));
			sprintf(strText, "得分:%d", (LONG)p_au->n_score);
			pSurface->DrawTextDirect(fnt_big, strText, rc_player_tip.left+1, rc_player_tip.top + 16, RGB(155,255,55));//, RGB(1,1,1));
			sprintf(strText, "胜数:%d", (LONG)p_au->us_win);
			pSurface->DrawTextDirect(fnt_big, strText, rc_player_tip.left+1, rc_player_tip.top + 26, RGB(255,185,55));//, RGB(1,1,1));
			sprintf(strText, "败数:%d", (LONG)p_au->us_lost);
			pSurface->DrawTextDirect(fnt_big, strText, rc_player_tip.left+1, rc_player_tip.top + 36, RGB(255,185,55));//, RGB(1,1,1));
		}
	}
	::DeleteObject(fnt_small);
	::DeleteObject(fnt_big);
	return S_OK;
}


ENUM_MODE MainGame::GetMode()
{
	if (m_is_show_lobby==FALSE && m_id_player>0 && m_map_user[m_id_player].us_table>0)
		return ENUM_GAME;
	else
		return ENUM_LOBBY;
}

void MainGame::SetMode(ENUM_MODE mode)
{
	m_index_player_select	= 0;
	m_is_broadcast	= TRUE;
	if (GetMode()==mode)
		return;
	switch(mode) {
	case ENUM_GAME:
		//if (m_ptr_player==NULL)
		//	return;
		m_UI.Create("ui\\main.ini");
		m_is_show_lobby	= FALSE;
		update_ui();
		break;
	case ENUM_LOBBY:
		if (m_ptr_player)
		{
			NET_Packet* pPacket	= new NET_Packet;
			pPacket->setCmd(GSP_LEAVE_TABLE);
			m_socket.PushSendPacket(1, pPacket);
		}
		memset((STRUCT_TABLE_INFO*)this, 0, sizeof(STRUCT_TABLE_INFO));
		m_UI.Create("ui\\main_lobby.ini");
		m_is_show_lobby	= TRUE;
		m_index_table_select	= 0;
		update_ui();
		m_bk_music.SetStreamSource("bubble_sound\\wait");
		m_bk_music.Play();
		m_bk_music.SetLooping();
		for (int i=0; i<NUM_CHAIR; i++)
		{
			m_array_player[i].Reset();
		}
		m_is_playing	= FALSE;
		break;
	}
}

⌨️ 快捷键说明

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