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

📄 gametable.cpp

📁 网络泡泡被.net管理
💻 CPP
📖 第 1 页 / 共 2 页
字号:
				shp.bubble_bad	= ptr_player_user->num_bubble_bad;
				shp.bubble_good	= ptr_player_user->num_bubble_store;
				shp.enum_handle	= ENUM_HANDLE_POP_BIG;
				shp.bubble_bad_obj	= ptr_player_obj->num_bubble_bad;
				shp.bubble_good_obj	= ptr_player_obj->num_bubble_store;
				shp.score	= ptr_user->n_score;
				do_handle_player(&shp);
				NET_Packet* pPacket	= new NET_Packet;
				pPacket->setCmd(GSP_POP_BUBBLE);
				pPacket->write32(ptr_obj->uid);
				pPacket->write32(ptr_user->uid);
				//pPacket->write8(64);
				pPacket->write16(n);
				pPacket->writeData(ap_pop, sizeof(USHORT)*n);
				BroadcastPacket(pPacket);
			}
		}
		else if(ptr_player_user->num_bubble_store>=8)
		{//绝招,50%消掉4泡
			USHORT ap_pop[4];
			int n=0;
			for (int i=0; i<ptr_player_obj->m_num_data; i++)
			{
				if(ptr_player_obj->GetBubble(i)%10 && rand()*99.0f/RAND_MAX<50)
				{
					ptr_player_obj->PopBubble(ptr_player_obj->Index2X(i), ptr_player_obj->Index2Y(i), 1);
					ap_pop[n]	= i;
					n++;
					if(n>=4)
						break;
				}
			}
			if(n>0)
			{
				ptr_player_user->AddGoodBubble(-8);
				STRUCT_HANDLE_PLAYER shp;
				shp.user	= ptr_user->uid;
				shp.object	= ptr_obj->uid;
				shp.bubble_bad	= ptr_player_user->num_bubble_bad;
				shp.bubble_good	= ptr_player_user->num_bubble_store;
				shp.enum_handle	= ENUM_HANDLE_POP;
				shp.bubble_bad_obj	= ptr_player_obj->num_bubble_bad;
				shp.bubble_good_obj	= ptr_player_obj->num_bubble_store;
				shp.score	= ptr_user->n_score;
				do_handle_player(&shp);
				NET_Packet* pPacket	= new NET_Packet;
				pPacket->setCmd(GSP_POP_BUBBLE);
				pPacket->write32(ptr_obj->uid);
				pPacket->write32(ptr_user->uid);
				//pPacket->write8(8);
				pPacket->write16(n);
				pPacket->writeData(ap_pop, sizeof(USHORT)*n);
				BroadcastPacket(pPacket);
			}
		}
		else if(ptr_player_user->num_bubble_store>=1)
		{//小绝招,
		//	ptr_player_user->num_bubble_store -= 1;
		}
	}
	else
	{//对敌方使用,加泡泡给对方
		if(ptr_player_user->GetState()==PLAYER_STATE_LOST && ptr_user->n_score>0)
		{//已经输了,可以用牺牲积分来害人
			ptr_user->n_score	-=1;
			ptr_player_obj->AddBadBubble(5);
			STRUCT_HANDLE_PLAYER shp;
			shp.user	= ptr_user->uid;
			shp.object	= ptr_obj->uid;
			shp.bubble_bad	= ptr_player_user->num_bubble_bad;
			shp.bubble_good	= ptr_player_user->num_bubble_store;
			shp.bubble_bad_obj	= ptr_player_obj->num_bubble_bad;
			shp.bubble_good_obj	= ptr_player_obj->num_bubble_store;
			shp.enum_handle	= ENUM_HANDLE_ADD_BAD;
			shp.score	= ptr_user->n_score;
			do_handle_player(&shp);
		}
		else
		{
			if(ptr_player_user->num_bubble_store>=64)
			{//大绝招,直接击败对手
				ptr_player_user->AddGoodBubble(-64);
				STRUCT_HANDLE_PLAYER shp;
				shp.user	= ptr_user->uid;
				shp.object	= ptr_obj->uid;
				shp.bubble_bad	= ptr_player_user->num_bubble_bad;
				shp.bubble_good	= ptr_player_user->num_bubble_store;
				shp.bubble_bad_obj	= ptr_player_obj->num_bubble_bad;
				shp.bubble_good_obj	= ptr_player_obj->num_bubble_store;
				shp.enum_handle	= ENUM_HANDLE_KILL;
				shp.score	= ptr_user->n_score;
				do_handle_player(&shp);
				ptr_player_obj->Lost();
			}
			else if(ptr_player_user->num_bubble_store>=8)
			{//给对方增加5泡泡
				ptr_player_user->AddGoodBubble(-8);
				ptr_player_obj->AddBadBubble(5);
				STRUCT_HANDLE_PLAYER shp;
				shp.user	= ptr_user->uid;
				shp.object	= ptr_obj->uid;
				shp.bubble_bad	= ptr_player_user->num_bubble_bad;
				shp.bubble_good	= ptr_player_user->num_bubble_store;
				shp.bubble_bad_obj	= ptr_player_obj->num_bubble_bad;
				shp.bubble_good_obj	= ptr_player_obj->num_bubble_store;
				shp.enum_handle	= ENUM_HANDLE_ADD_BAD;
				shp.score	= ptr_user->n_score;
				do_handle_player(&shp);
			}
			else if(ptr_player_user->num_bubble_store>=1)
			{//小绝招,
			//	ptr_player_user->num_bubble_store -= 1;
			}
		}
	}
	if(ptr_player_obj->update_state())
	{
		_update_player_state(ptr_obj, ptr_player_obj);
	}
}

void GameTable::do_score(GameUser *ptr_user, int score)
{
	STRUCT_SCORE ss;
	ss.uid	= ptr_user->uid;
	ss.gain	= score;
	ss.score	= ptr_user->n_score;
	ss.us_lost	= ptr_user->us_lost;
	ss.us_win	= ptr_user->us_win;
	ptr_user->n_score	+= ss.gain;
	NET_Packet* pPacket = new NET_Packet;
	pPacket->setCmd(GSP_SCORE);
	pPacket->writeData(&ss, sizeof(STRUCT_SCORE));
	BroadcastPacket(pPacket);

}

void GameTable::_update_player_state(GameUser *ptr_user, GamePlayer *ptr_player)
{
	if(ptr_player->GetState()==PLAYER_STATE_LOST)
	{
		m_num_playing--;
		if(false==CheckWinner())
			do_score(ptr_user, 0);

	}
	else if(ptr_player->GetState()==PLAYER_STATE_WIN)
	{
		m_player[ptr_user->uid].Win();
		for(int i=0; i<NUM_CHAIR; i++)
		{
			if(player[i])
			{
				GameUser* p_user	= g_server.get_user(player[i]);
				if(p_user==NULL || p_user==ptr_user)
				{	
					player[i]=0;
					continue;
				}
				p_user->us_lost++;
				switch(m_player[i].GetState()) {
				case PLAYER_STATE_PLAYING:
					{
						m_player[i].Lost();
						do_score(p_user, -2);
						m_prize	+= 2;
					}
					break;
				case PLAYER_STATE_LOST:
					{
						m_player[i].Lost();
						do_score(p_user, -5);
						m_prize	+= 5;
					}
					break;
				default:
					break;
				}
			}
		}
		//if(m_prize>12)
		ptr_user->us_win++;
		do_score(ptr_user, m_prize);
		//else
		//	do_score(ptr_user, 12);
		is_playing	= false;
		g_server.on_update_table_info(this);
	}
}

void GameTable::do_handle_player(STRUCT_HANDLE_PLAYER* pSHP)
{
	NET_Packet* pPacket	= new NET_Packet;
	pPacket->setCmd(GSP_HANDLE_PLAYER);
	pPacket->writeData(pSHP, sizeof(STRUCT_HANDLE_PLAYER));
	BroadcastPacket(pPacket);
}

void GameTable::on_msg_trigger_cards(GameUser *pUser, BYTE *pData)
{
	if (pUser==NULL || pData==NULL)
	{
		return;
	}
	GamePlayer* ptr_player	= get_player(pUser->uid);
	if (ptr_player==NULL)
	{
		return;
	}
	BOOL bTrigger = FALSE;
	for (int i=0; i<WAY_SIZE; i++)
	{
		//if (ptr_player->m_cards_trigger[i]!=pData[i])
		//{//错误,先不管了,唉
			//break;
		//}
		if (ptr_player->m_cards_trigger[i]!=0)
		{	
			bTrigger = TRUE;//确定可以触发
			break;
		}
	}
	if (bTrigger==FALSE)
	{
		return;
	}
	NET_Packet* pPacket	= new NET_Packet;
	//广播特效
	pPacket->setCmd(GSP_TRIGGER_CARDS);
	pPacket->write32(pUser->uid);
	pPacket->writeData(ptr_player->m_cards_trigger, WAY_SIZE);
	BroadcastPacket(pPacket);
	for (i=0; i<WAY_SIZE; i++)
	{
		if (ptr_player->m_cards_trigger[i]!=0)
		{
			//处理不同卡片的效果
			switch((ptr_player->m_cards_trigger[i]/10)%100) 
			{//1-5有害的卡片,6-9有益的卡片
			case CARD_SUBTRACT_COIN://扣一分
				{
					pUser->n_score	-= 1;
					STRUCT_HANDLE_PLAYER shp;
					shp.user	= pUser->uid;
					shp.object	= pUser->uid;
					shp.bubble_bad	= ptr_player->num_bubble_bad;
					shp.bubble_good	= ptr_player->num_bubble_store;
					shp.bubble_bad_obj	= ptr_player->num_bubble_bad;
					shp.bubble_good_obj	= ptr_player->num_bubble_store;
					shp.enum_handle	= ENUM_HANDLE_SUBTRACT_COIN;
					shp.score	= pUser->n_score;
					do_handle_player(&shp);
				}
				break;
			case CARD_SUBTRACT_GOOD://减少6个有益泡泡
				{
					ptr_player->AddGoodBubble(-6);
					STRUCT_HANDLE_PLAYER shp;
					shp.user	= pUser->uid;
					shp.object	= pUser->uid;
					shp.bubble_bad	= ptr_player->num_bubble_bad;
					shp.bubble_good	= ptr_player->num_bubble_store;
					shp.bubble_bad_obj	= ptr_player->num_bubble_bad;
					shp.bubble_good_obj	= ptr_player->num_bubble_store;
					shp.enum_handle	= ENUM_HANDLE_SUBTRACT_GOOD;
					shp.score	= pUser->n_score;
					do_handle_player(&shp);
				}
				break;
			case CARD_RAISE://冒5个泡泡
				{
					ptr_player->trigger_bubble_up(BUBBLE_GROUP_BAD);
					_update_player_state(pUser, ptr_player);
				}
				break;
			case CARD_BREAKDOWN://下降一层
				{
					ptr_player->m_num_time_shoot	= LIMIT_LEVEL_SHOOT;
					//ptr_player->trigger_add_level();
					NET_Packet* pPacket	= new NET_Packet;
					pPacket->setCmd(GSP_UI_CMD);
					pPacket->write32(pUser->uid);
					pPacket->write16(_UI_CMD_SHAKE);
					g_server.m_socket_player.PushSendPacket(pUser->uid, pPacket);
				}
				break;
			case CARD_LOST_CONTROL:		//失控
				{
					NET_Packet* pPacket	= new NET_Packet;
					pPacket->setCmd(GSP_UI_CMD);
					pPacket->write32(pUser->uid);
					pPacket->write16(_UI_CMD_LOST_CONTROL);
					g_server.m_socket_player.PushSendPacket(pUser->uid, pPacket);
				}
				break;
			case CARD_BLIND:				//失明
				{
					NET_Packet* pPacket	= new NET_Packet;
					pPacket->setCmd(GSP_UI_CMD);
					pPacket->write32(pUser->uid);
					pPacket->write16(_UI_CMD_BLIND);
					g_server.m_socket_player.PushSendPacket(pUser->uid, pPacket);
				}
				break;
			case CARD_ADD_BAD://加7个有害泡泡
				{
					ptr_player->AddBadBubble(7);
					STRUCT_HANDLE_PLAYER shp;
					shp.user	= pUser->uid;
					shp.object	= pUser->uid;
					shp.bubble_bad	= ptr_player->num_bubble_bad;
					shp.bubble_good	= ptr_player->num_bubble_store;
					shp.bubble_bad_obj	= ptr_player->num_bubble_bad;
					shp.bubble_good_obj	= ptr_player->num_bubble_store;
					shp.enum_handle	= ENUM_HANDLE_ADD_BAD;
					shp.score	= pUser->n_score;
					do_handle_player(&shp);
				}
				break;
			case CARD_POP://随机销掉3个泡泡
				{
					USHORT ap_pop[3];
					int n=0;
					for (int i=0; i<ptr_player->m_num_data; i++)
					{
						if(ptr_player->GetBubble(i)%10 && rand()*99.0f/RAND_MAX<60)
						{
							ptr_player->PopBubble(ptr_player->Index2X(i), ptr_player->Index2Y(i), 1);
							ap_pop[n]	= i;
							n++;
							if(n>=3)
								break;
						}
					}
					if(n>0)
					{
						STRUCT_HANDLE_PLAYER shp;
						shp.user	= pUser->uid;
						shp.object	= pUser->uid;
						shp.bubble_bad	= ptr_player->num_bubble_bad;
						shp.bubble_good	= ptr_player->num_bubble_store;
						shp.bubble_bad_obj	= ptr_player->num_bubble_bad;
						shp.bubble_good_obj	= ptr_player->num_bubble_store;
						shp.enum_handle	= ENUM_HANDLE_POP;
						shp.score	= pUser->n_score;
						do_handle_player(&shp);
						NET_Packet* pPacket	= new NET_Packet;
						pPacket->setCmd(GSP_POP_BUBBLE);
						pPacket->write32(pUser->uid);
						pPacket->write32(pUser->uid);
						//pPacket->write8(8);
						pPacket->write16(n);
						pPacket->writeData(ap_pop, sizeof(USHORT)*n);
						BroadcastPacket(pPacket);
					}
				}
				break;
			case CARD_SUPER://进入超级状态
				{
					NET_Packet* pPacket	= new NET_Packet;
					pPacket->setCmd(GSP_UI_CMD);
					pPacket->write32(pUser->uid);
					pPacket->write16(_UI_CMD_SUPER);
					g_server.m_socket_player.PushSendPacket(pUser->uid, pPacket);
				
				}
				break;
			case CARD_ADD_GOOD://获得7个有益泡泡
				{
					ptr_player->AddGoodBubble(7);
					STRUCT_HANDLE_PLAYER shp;
					shp.user	= pUser->uid;
					shp.object	= pUser->uid;
					shp.bubble_bad	= ptr_player->num_bubble_bad;
					shp.bubble_good	= ptr_player->num_bubble_store;
					shp.bubble_bad_obj	= ptr_player->num_bubble_bad;
					shp.bubble_good_obj	= ptr_player->num_bubble_store;
					shp.enum_handle	= ENUM_HANDLE_ADD_GOOD;
					shp.score	= pUser->n_score;
					do_handle_player(&shp);
				}
				break;
			case CARD_BONUS://奖励一分
				{
					pUser->n_score	+= 1;
					STRUCT_HANDLE_PLAYER shp;
					shp.user	= pUser->uid;
					shp.object	= pUser->uid;
					shp.bubble_bad	= ptr_player->num_bubble_bad;
					shp.bubble_good	= ptr_player->num_bubble_store;
					shp.bubble_bad_obj	= ptr_player->num_bubble_bad;
					shp.bubble_good_obj	= ptr_player->num_bubble_store;
					shp.enum_handle	= ENUM_HANDLE_BONUS_COIN;
					shp.score	= pUser->n_score;
					do_handle_player(&shp);
				}
				break;
			default:
				return;
			}
		}
	}
	_update_player_state(pUser, ptr_player);
}
					//对所有玩家加5个有害泡泡,包括自己
//					for (int i=0; i<NUM_CHAIR; i++)
//					{
//						if (player[i] && m_player[i].GetState()==PLAYER_STATE_PLAYING)
//						{
//							ptr_player->num_bubble_bad	+= 5;
//							STRUCT_HANDLE_PLAYER shp;
//							shp.user	= pUser->uid;
//							shp.object	= player[i];
//							shp.bubble_bad	= ptr_player->num_bubble_bad;
//							shp.bubble_good	= ptr_player->num_bubble_store;
//							shp.enum_handle	= ENUM_HANDLE_ADD_BAD;
//							shp.bubble_bad_obj	= m_player[i].num_bubble_bad;
//							shp.bubble_good_obj	= m_player[i].num_bubble_store;
//							shp.score	= pUser->n_score;
//							do_handle_player(&shp);
//						}
//					}

NET_Packet* GameTable::CreateTableInfoPacket()
{
	uc_user		= m_set_user.size();
	NET_Packet* pPacket = new NET_Packet;
	pPacket->setCmd(GSP_ADD_TABLE);
	pPacket->writeData((STRUCT_TABLE_INFO*)this, sizeof(STRUCT_TABLE_INFO));
	return pPacket;
}

void GameTable::on_auto_handle(GamePlayer *ptr_player)
{
	STRUCT_HANDLE_PLAYER shp;
	shp.user	= ptr_player->m_ptr_user->uid;
	shp.object	= ptr_player->m_ptr_user->uid;
	shp.bubble_bad	= ptr_player->num_bubble_bad;
	shp.bubble_good	= ptr_player->num_bubble_store;
	shp.bubble_bad_obj	= ptr_player->num_bubble_bad;
	shp.bubble_good_obj	= ptr_player->num_bubble_store;
	shp.enum_handle	= ENUM_HANDLE_NULL;
	shp.score	= ptr_player->m_ptr_user->n_score;
	do_handle_player(&shp);
}

⌨️ 快捷键说明

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