📄 gametable.cpp
字号:
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 + -