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

📄 maingame.cpp

📁 网络泡泡被.net管理
💻 CPP
📖 第 1 页 / 共 5 页
字号:
// MainGame.cpp: implementation of the MainGame class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "MainGame.h"

const GRECT RECT_player[NUM_CHAIR]	=
{
	GRECT(523, 42, 785, 518),
	GRECT(11, 48, 141, 296),
	GRECT(159, 48, 291, 296),
	GRECT(309, 48, 441, 296),
	GRECT(11, 322, 141, 575),
	GRECT(159, 322, 291, 575)
};

const char	STR_card_name[ENUM_CARD_NUM][2][50]	= 
{
	{"掠夺",			"玩家得分扣一分"},
	{"吸收",			"减少有益泡泡"},
	{"泡泡攻击波",		"随即冒几个泡泡"},
	{"地动天摇",		"召唤强烈的地震,崩塌一层"},
	{"迷惑",			"使玩家无法控制发射台,失控"},
	{"失明",			"使玩家无法辨认将要发射的泡泡"}, 
	{"邪恶附身",		"加7个有害泡泡"},
	{"神圣之光",		"随机销掉3个泡泡"},
	{"天神附身",		"使玩家进入超级状态"},
	{"神圣祝福",		"获得7个有益泡泡"},
	{"天賜",			"玩家得分奖励一分"}
};

#define	MAGIC_CARD_BOOK_WIETH	500
#define	MAGIC_CARD_BOOK_HEIGHT	450

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

MainGame::MainGame(CGsEngine*	pEngine)
:CGsGame(pEngine),
m_tex_game_msg(pEngine),
m_bk_music(pEngine),
m_tex_game_time(pEngine)
{
	m_is_msg_change	= FALSE;
		for( WORD ix=0; ix<2; ix++ )
		{
			for( WORD iy=0; iy<2; iy++ )
			{
//				FLOAT tu = ix;
//				FLOAT tv = iy;
				float fx = 0;
				float fy = 0;

				m_aVertex[ix+iy*2] = D3DTLVERTEX( D3DVECTOR(fx,fy,0.0f),
                                                            0.5f,
															0xffffffff,
															0,
															0, 0 );
			}
		}
	m_is_inputing_text	= FALSE;
	//memset(m_magic_list, 0, sizeof(MAGIC_SKILL)*8);

	for(int i=0; i<NUM_CHAIR; i++)
	{
		player[i]	= 0;
	}
	for (i=0; i<NUM_CHAIR; i++)
	{
		m_index[i]	= 0;
	}
	m_ptr_player	= NULL;
	m_rc_energy		= GRECT(467,100,483,290);
	m_rc_power		= GRECT(467,290,483,290);
	m_is_playing	= FALSE;
	m_game_start_time		= 0;
	m_index_table_select		= 0;
	m_page_table_select	= 0;
	m_page_player_select	= 0;
	m_index_player_select	= 0;
	m_is_show_lobby		= TRUE;
	m_map_user[0].uid=0;
	m_id_player_talk	= 0;
	m_is_broadcast		= TRUE;
	m_is_show_magic_book		= FALSE;
	m_rc_magic_book		= GRECT(0, 0, 0, 0);

}

MainGame::~MainGame()
{

}



LRESULT	MainGame::MsgProc( UINT uMsg, WPARAM wParam, LPARAM lParam )
{
	return CGsGame::MsgProc( uMsg, wParam, lParam );
}



ID MainGame::OnMouseMove(UINT nFlags, GPOINT point)
{
//	if(m_pEngine->TestMouseState(MK_LBUTTON))
//	{
//		Game_Unit*	pUnit	= GetControlUnit();
//		if(pUnit)
//		{
//			LONG x,y;
//			m_world.GetOriginal(x, y);
//			pUnit->query_goto(point.x+x, point.y+y);
//			//pUnit->PlyWalkTo(point.x+x, point.y+y);
//		}
//	}
	ID id_ret = CGsGame::OnMouseMove( nFlags, point );

	return id_ret;
}

ID MainGame::OnLButtonDown( UINT nFlags, GPOINT point )			
{ 
	ID id_ret = CGsGame::OnLButtonDown( nFlags, point );
	if (id_ret)
		return id_ret;

	if (GetMode()==ENUM_LOBBY)
	{
		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 - 325 + j*350, 115 +  i*130,m_pEngine->GetRenderWidth()/2 - 25 + + j*350, 215 +  i*130);
				int index	= m_page_table_select + j*NUM_TABLE_IN_LINE + i + 1;
				if (is_point_in_rect(m_pEngine->m_Pos, rc_table))
				{
					if (m_index_table_select!=index)
					{
						m_index_table_select = index;
						NET_Packet* pPacket	= new NET_Packet;
						pPacket->setCmd(GSP_ENTER_TABLE);
						pPacket->write16(m_index_table_select);
						pPacket->write16(NUM_CHAIR);
						m_socket.PushSendPacket(1, pPacket);
						update_ui();
					}
				}
			}
		}
	}
	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())
		{
			if (is_point_in_rect(m_pEngine->m_Pos, rc_player) || is_point_in_rect(m_pEngine->m_Pos, rc_player_tip))
			{
				m_index_player_select	= m_page_player_select + i;
				if (m_id_player_talk != it_player->second.uid || m_is_broadcast)
				{
					m_id_player_talk	= it_player->second.uid;
					m_is_broadcast	= FALSE;
					update_ui();
				}
			}
			it_player++;
		}
	}
	for (i=0; i<NUM_CHAIR; i++)
	{
		if (player[m_index[i]]>=0 && is_point_in_rect(m_pEngine->m_Pos, RECT_player[i]))
		{
			STRUCT_ADD_USER* ptr_user	= GetUser(player[m_index[i]]);
			m_index_player_select	= player[m_index[i]];
			if (m_id_player_talk != ptr_user->uid || m_is_broadcast)
			{
				m_id_player_talk	= ptr_user->uid;
				m_is_broadcast	= FALSE;
				update_ui();
			}
		}
	}
	return id_ret;
	
}
ID MainGame::OnLButtonUp( UINT nFlags, GPOINT point )				
{ 
	ID id_ret = CGsGame::OnLButtonUp( nFlags, point );
	if(id_ret>0)
		return id_ret;
	return id_ret;
}
ID MainGame::OnLButtonDbClk( UINT nFlags, GPOINT point )			
{ 
	ID id_ret = CGsGame::OnLButtonDbClk( nFlags, point );
	if(id_ret>0)
		return id_ret;
	return id_ret;
	
}
ID MainGame::OnRButtonDown( UINT nFlags, GPOINT point )			
{ 
	ID id_ret = CGsGame::OnRButtonDown( nFlags, point );
	if(id_ret>0)
		return id_ret;
	return id_ret;
	
}
ID MainGame::OnRButtonUp( UINT nFlags, GPOINT point )				
{ 
	ID id_ret = CGsGame::OnRButtonUp( nFlags, point );
	if(id_ret>0)
		return id_ret;

	
	return id_ret;
}
ID MainGame::OnRButtonDbClk( UINT nFlags, GPOINT point )			
{ 
	ID id_ret = CGsGame::OnRButtonDbClk( nFlags, point );
	if(id_ret>0)
		return id_ret;
	return id_ret;
	
}


ID MainGame::OnMouseWheel(UINT nFlags, short zDelta, GPOINT point)
{
	ID id_ret = CGsGame::OnMouseWheel(nFlags, zDelta, point);
	if(id_ret>0)
		return id_ret;
	return id_ret;
}

ID MainGame::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
	if(nChar==VK_RETURN)
	{
		return 0;
	}
	ID id_ret = CGsGame::OnChar(nChar, nRepCnt, nFlags);
	if(id_ret>0)
		return id_ret;

	return id_ret;

}

ID MainGame::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
	ID id_ret = CGsGame::OnKeyDown(nChar, nRepCnt, nFlags);
//	if(id_ret>0)
//		return id_ret;
//	CPlayer* pPlayer	= GetPlayer();
	if(m_ptr_player)
	{
		switch(nChar)
		{
		case	VK_SPACE:
		case	VK_UP:
			if(m_is_playing && m_ptr_player && m_ptr_player->IsReady())
			{
				DWORD dwTime = Sys_GetTime();
				if(dwTime-m_msg_holder["shoot"]>300)
				{
					m_ptr_player->m_is_shoot_shaking	= FALSE;
					m_msg_holder["shoot"]	= dwTime;
					m_ptr_player->Shoot();
				}
			}
			break;
		case	VK_LEFT:
			if(m_is_playing && m_ptr_player && m_ptr_player->IsReady())
			{
				m_ptr_player->on_msg_pointer(_UI_CMD_TURN_LEFT);
				DWORD dwTime = Sys_GetTime();
				if(dwTime-m_msg_holder["turn_left"]>200)
				{
					m_msg_holder["turn_left"]	= dwTime;
					NET_Packet* pPacket	= new NET_Packet;
					pPacket->setCmd(GSP_UI_CMD);
					pPacket->write32(m_id_player);
					pPacket->write16(_UI_CMD_TURN_LEFT);
					m_socket.PushSendPacket(1, pPacket);
				}
			}
			break;
		case	VK_RIGHT:
			if(m_is_playing && m_ptr_player && m_ptr_player->IsReady())
			{
				m_ptr_player->on_msg_pointer(_UI_CMD_TURN_RIGHT);
				DWORD dwTime = Sys_GetTime();
				if(dwTime-m_msg_holder["turn_right"]>200)
				{
					m_msg_holder["turn_right"]	= dwTime;
					NET_Packet* pPacket	= new NET_Packet;
					pPacket->setCmd(GSP_UI_CMD);
					pPacket->write32(m_id_player);
					pPacket->write16(_UI_CMD_TURN_RIGHT);
					m_socket.PushSendPacket(1, pPacket);
				}
			}
			break;
		case	'1':
		case	'2':
		case	'3':
		case	'4':
		case	'5':
		case	'6':
			if(m_is_playing && m_ptr_player && m_ptr_player->IsReady() && m_ptr_player->num_bubble_store>=8)
			{
				DWORD dwTime = Sys_GetTime();
				if(dwTime-m_msg_holder["use_bubble"]>500)
				{
					int obj_idx	= nChar - '1';
					if (m_index[obj_idx]>=0 && player[m_index[obj_idx]]>0)
					{
						m_msg_holder["use_bubble"]	= dwTime;
						query_handle_player(player[m_index[obj_idx]]);
					}
				}
			}
			else if (m_is_playing && m_ptr_player && m_ptr_player->GetState()==PLAYER_STATE_LOST)
			{
				STRUCT_ADD_USER* pUser	= GetUser(m_id_player);
				if (pUser==NULL || pUser->n_score<=0)
				{
					break;
				}
				DWORD dwTime = Sys_GetTime();
				if(dwTime-m_msg_holder["use_bubble"]>5000)
				{
					int obj_idx	= nChar - '1';
					if (obj_idx!=0 && m_index[obj_idx]>=0 && player[m_index[obj_idx]]>0)
					{
						m_msg_holder["use_bubble"]	= dwTime;
						query_handle_player(player[m_index[obj_idx]]);
					}
				}
			}
			break;
		}
	}
	return id_ret;
}
void MainGame::query_handle_player(ULONG id_player)
{
	NET_Packet* pPacket	= new NET_Packet;
	pPacket->setCmd(GSP_HANDLE_PLAYER);
	STRUCT_HANDLE_PLAYER shp;
	shp.user	= m_id_player;
	shp.object	= id_player;
	pPacket->writeData(&shp, sizeof(shp));
	m_socket.PushSendPacket(1, pPacket);

}

ID MainGame::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)
{
	ID id_ret = CGsGame::OnKeyUp(nChar, nRepCnt, nFlags);
//	if(id_ret>0)
//		return id_ret;
	CPlayer* pPlayer	= GetPlayer();
	switch(nChar)
	{
	case	VK_LEFT:
		if(m_is_playing && pPlayer && pPlayer->IsReady())
		{
			pPlayer->on_msg_pointer(_UI_CMD_HODE_LEFT);
			DWORD dwTime = Sys_GetTime();
			if(dwTime-m_msg_holder["hold_left"]>200)
			{
				m_msg_holder["hold_left"]	= dwTime;
				NET_Packet* pPacket	= new NET_Packet;
				pPacket->setCmd(GSP_UI_CMD);
				pPacket->write32(m_id_player);
				pPacket->write16(_UI_CMD_HODE_LEFT);
				m_socket.PushSendPacket(1, pPacket);
			}
		}
		break;
	case	VK_RIGHT:
		if(m_is_playing && pPlayer && pPlayer->IsReady())
		{
			pPlayer->on_msg_pointer(_UI_CMD_HODE_RIGHT);
			DWORD dwTime = Sys_GetTime();
			if(dwTime-m_msg_holder["hold_right"]>200)
			{
				m_msg_holder["hold_right"]	= dwTime;
				NET_Packet* pPacket	= new NET_Packet;
				pPacket->setCmd(GSP_UI_CMD);
				pPacket->write32(m_id_player);
				pPacket->write16(_UI_CMD_HODE_RIGHT);
				m_socket.PushSendPacket(1, pPacket);
			}
		}
		break;
	}
	CGsUIPanel* pPanel = m_pEngine->FindUIFromName("input_msg");
	if(nChar==VK_RETURN)
	{
		if(pPanel)
		{
			if(pPanel->IsFocus())
			{
				pPanel->SetFocus(FALSE);
				//query_speek(m_id_player, pPanel->GetCaption());
				int len = strlen(pPanel->GetCaption());
				if (len>0 && len<LIMIT_TALK_STRING)
				{
					NET_Packet*	pPacket		= new NET_Packet;
					if (m_is_broadcast || m_id_player_talk==0)
					{
						pPacket->setCmd(GSP_SPEEK);
						pPacket->write16(uid);
						pPacket->writeString(pPanel->GetCaption());
						m_socket.PushSendPacket(1, pPacket);
					}
					else
					{
						pPacket->setCmd(GSP_TALK);
						pPacket->write32(m_id_player_talk);
						pPacket->writeString(pPanel->GetCaption());
						m_socket.PushSendPacket(1, pPacket);
					}
				}
				pPanel->SetCaption("");
			}
			else
			{
				pPanel->SetFocus(TRUE);
			}
		}

⌨️ 快捷键说明

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