📄 maingame.cpp
字号:
m_array_player[i].m_scale = SMALL_SCALE;
m_index[i+1] = i;
m_array_player[i].update_user_data(i+1, &m_map_user[player[i]]);
}
else
{
m_array_player[i].m_scale = SMALL_SCALE;
m_index[i] = i;
m_array_player[i].update_user_data(i, &m_map_user[player[i]]);
}
}
if (is_playing)
{
SetMode(ENUM_GAME);
}
}
}
void MainGame::on_msg_add_user(STRUCT_ADD_USER *pData)
{
if(pData==NULL)
return;
if(m_id_player==0)
{
m_id_player = pData->uid;
m_UI.Create("ui\\main_lobby.ini");
m_is_show_lobby = TRUE;
m_index_table_select = 0;
}
else if (m_id_player==pData->uid)
{//大厅、游戏切换
if (pData->us_table!=m_map_user[pData->uid].us_table)
{//桌子变了
memset((STRUCT_TABLE_INFO*)this, 0, sizeof(STRUCT_TABLE_INFO));
m_ptr_player = NULL;
if (m_is_show_lobby==FALSE && pData->us_table>0)
{
SetMode(ENUM_GAME);
}
else
{
SetMode(ENUM_LOBBY);
}
}
}
m_map_user[pData->uid] = *pData;
CPlayer* ptr_player = GetPlayer(pData->uid);
int index = GetPlayerIndex(pData->uid);
if(ptr_player && index>=0)
{
ptr_player->update_user_data(index, pData);
}
update_ui();
return;
}
CPlayer* MainGame::GetPlayer(ULONG id_user)
{
if(id_user==0)
id_user = m_id_player;
if(id_user==0)
return NULL;
for(int i=0; i<NUM_CHAIR; i++)
{
if(player[i]==id_user)
return &m_array_player[i];
}
return NULL;
}
void MainGame::on_msg_scene_data(ULONG id_user, STRUCT_ADD_USER* ptr_add_user, STRUCT_ADD_SCENE* ptr_add_scene, UCHAR* ptr_scene_data)
{
CPlayer* pPlayer = GetPlayer(id_user);
if(pPlayer)
{
pPlayer->update_scene_data(ptr_add_scene, ptr_scene_data);
int index = GetPlayerIndex(id_user);
if (index>=0)
{
pPlayer->update_user_data(index, ptr_add_user);
}
// if(pPlayer==GetPlayer())
// {
// pPlayer->m_scale = MAIN_SCALE;
// }
// else
// {
// pPlayer->m_scale = SMALL_SCALE;
// }
}
}
void MainGame::on_msg_ui_cmd(ULONG id_user, USHORT ui_cmd)
{
CPlayer* pPlayer = GetPlayer(id_user);
if(pPlayer)
{
pPlayer->on_msg_pointer(ui_cmd);
}
switch(ui_cmd) {
case _UI_CMD_SHOOT:
if(m_is_playing && m_ptr_player && m_ptr_player->IsReady())
{
m_ptr_player->m_is_shoot_shaking = FALSE;
m_msg_holder["shoot"] = Sys_GetTime();
m_ptr_player->Shoot();
}
break;
case _UI_CMD_SHAKE:
if(m_is_playing && pPlayer && pPlayer->IsReady())
{
pPlayer->trigger_scene_shaking();
}
break;
case _UI_CMD_SUPER:
if(m_is_playing && pPlayer && pPlayer->IsReady())
{
pPlayer->TriggerSuperShooter();
pPlayer->add_effect_tip("SUPER!",
GPOINT(0, pPlayer->GetHeight()/2),
GPOINT(0, 0),
RGBA_MAKE(0,205,15, 250),
1.0f
);
play_sound("bubble_sound\\heal");
play_sound("bubble_sound\\heal");
}
break;
case _UI_CMD_LOST_CONTROL: //TO CLIENT, 命令客户端进入失控状态
if(m_is_playing && pPlayer && pPlayer->IsReady())
{
pPlayer->TriggerLostControl();
pPlayer->add_effect_tip("PUZZLE!",
GPOINT(0, pPlayer->GetHeight()/2),
GPOINT(0, 0),
RGBA_MAKE(255,25,175, 250),
1.0f
);
play_sound("bubble_sound\\use_bubble");
play_sound("bubble_sound\\use_bubble");
}
break;
case _UI_CMD_BLIND: //TO CLIENT, 命令客户端进入失明状态
if(m_is_playing && pPlayer && pPlayer->IsReady())
{
pPlayer->TriggerBlind();
pPlayer->add_effect_tip("BLIND!",
GPOINT(0, pPlayer->GetHeight()/2),
GPOINT(0, 0),
RGBA_MAKE(255,25,20, 250),
1.0f
);
play_sound("bubble_sound\\use_bubble");
play_sound("bubble_sound\\use_bubble");
}
break;
}
}
void MainGame::on_msg_score(STRUCT_SCORE *pSS)
{
if(pSS==NULL)
return;
CPlayer* pPlayer = GetPlayer(pSS->uid);
m_map_user[pSS->uid].n_score = pSS->score;
m_map_user[pSS->uid].n_score += pSS->gain;
m_map_user[pSS->uid].us_lost = pSS->us_lost;
m_map_user[pSS->uid].us_win = pSS->us_win;
if(pPlayer)
{
pPlayer->on_msg_score(pSS);
int index = GetPlayerIndex(pSS->uid);
if(index>=0)
{
pPlayer->update_user_data(index, &m_map_user[pSS->uid]);
}
}
}
void MainGame::process_packet(NET_Packet *ptr_packet)
{
uint16 cmd = ptr_packet->getCmd();
switch(cmd)
{
case GSP_TALK:
case GSP_SPEEK:
{
uint32 uid_speeker = ptr_packet->read32();
const char* strUser = ptr_packet->readString();
const char* strSpeek = ptr_packet->readString();
on_speek(uid_speeker, strUser, strSpeek);
}
break;
case GSP_LOGIN:
{
on_login(NULL);
}
break;
case GSP_ADD_USER:
{
on_msg_add_user((STRUCT_ADD_USER*)ptr_packet->readData());
}
break;
case GSP_DEL_USER:
{
ULONG uid = ptr_packet->read32();
std::map<ULONG, STRUCT_ADD_USER>::iterator it = m_map_user.find(uid);
if (it!=m_map_user.end())
{
m_map_user.erase(it);
}
update_ui();
}
break;
case GSP_ADD_TABLE:
{
on_msg_add_table((STRUCT_TABLE_INFO*)ptr_packet->readData());
}
break;
case GSP_SCENE_DATA:
{
ULONG uid = ptr_packet->read32();
STRUCT_ADD_USER* pSAU = (STRUCT_ADD_USER*)ptr_packet->readData();
STRUCT_ADD_SCENE* pSAS = (STRUCT_ADD_SCENE*)ptr_packet->readData();
if (pSAS)
{
if (pSAS->m_state==PLAYER_STATE_WIN)
{
m_is_playing = FALSE;
}
else if (pSAS->m_state==PLAYER_STATE_PLAYING)
{
m_is_playing = TRUE;
if(m_ptr_player && m_id_player==uid)
{
if (m_ptr_player->GetState()!=PLAYER_STATE_PLAYING)
{//游戏开始
m_msg_holder["shoot"] = Sys_GetTime();
m_game_start_time = 0;//Sys_GetTime();
}
}
}
}
on_msg_scene_data(uid, pSAU, pSAS, (UCHAR*)ptr_packet->readData());
update_ui();
}
break;
case GSP_GAME_CLOCK:
{
ULONG game_time = ptr_packet->read32();
if (game_time==0)
{//游戏开始
m_msg_holder["shoot"] = Sys_GetTime();
m_game_start_time = 0;//Sys_GetTime();
m_is_playing = TRUE;
for (int i=0; i<NUM_CHAIR; i++)
{
if (player[i])
{
m_array_player[i].Start();
}
}
}
if (m_game_start_time==0)
{
m_game_start_time = Sys_GetTime() - game_time;
}
if (m_ptr_player && abs(game_time + m_game_start_time - Sys_GetTime())>5000)
{//作弊!
MessageBox(m_pEngine->GetEngineWnd(), "居然还要作弊! :_: ", "无聊呀", MB_OK);
PostQuitMessage(0);
}
update_game_clock(game_time);
}
break;
case GSP_TRIGGER_CARDS:
{
ULONG id_user = ptr_packet->read32();
CPlayer* ptr_player = GetPlayer(id_user);
if (ptr_player)
{
BYTE* pData = (BYTE*)ptr_packet->readData();
std::vector<BYTE> lst_cards;
for (int i=0; i<WAY_SIZE; i++)
{
if (pData[i]>0)
{
lst_cards.push_back((pData[i])/10);
if ((pData[i])/10>=ENUM_CARD_GOOD)
{
play_sound("bubble_sound\\heal");
}
else
{
play_sound("bubble_sound\\card_bad");
}
}
}
float x = -(lst_cards.size()-1.0f)/2.0f;
for (i=0; i<lst_cards.size(); i++)
{
ptr_player->add_effect_cards(lst_cards[i], x, 0);
x +=1.0f;
}
}
}
break;
case GSP_SHOOT:
{
ULONG uid = ptr_packet->read32();
on_msg_shoot(uid, (STRUCT_SHOOT_DATA*)ptr_packet->readData());
}
break;
case GSP_UI_CMD:
{
ULONG id_user = ptr_packet->read32();
USHORT ui_cmd = ptr_packet->read16();
on_msg_ui_cmd(id_user, ui_cmd);
update_ui();
}
break;
case GSP_SCORE:
{
STRUCT_SCORE* pSS = (STRUCT_SCORE*)ptr_packet->readData();
on_msg_score(pSS);
if (pSS && pSS->gain!=0 && GetPlayer(pSS->uid))
{
m_bk_music.SetStreamSource("bubble_sound\\wait");
m_bk_music.Play();
m_bk_music.SetLooping();
m_is_playing = FALSE;
update_ui();
}
}
break;
case GSP_POP_BUBBLE:
{
ULONG id_user = ptr_packet->read32();
ULONG id_caster = ptr_packet->read32();
//UCHAR bubble_use = ptr_packet->read8();
CPlayer* pPlayer_caster = GetPlayer(id_caster);
//if(pPlayer_caster)
// pPlayer_caster->num_bubble_store -= bubble_use;
USHORT num = ptr_packet->read16();
USHORT* ap_pop = (USHORT*)ptr_packet->readData();
CPlayer* pPlayer = GetPlayer(id_user);
if(pPlayer)
{
for (int i=0; i<num; i++)
{
pPlayer->PopBubble(pPlayer->Index2X(ap_pop[i]), pPlayer->Index2Y(ap_pop[i]), 1);
}
}
play_sound("bubble_sound\\pop");
}
break;
case GSP_HANDLE_PLAYER:
{
STRUCT_HANDLE_PLAYER* pSHP = (STRUCT_HANDLE_PLAYER*)ptr_packet->readData();
CPlayer* pPlayer = GetPlayer(pSHP->user);
CPlayer* pPlayer_obj = GetPlayer(pSHP->object);
if (pPlayer && pPlayer_obj)
{
int idx_user = GetPlayerIndex(pSHP->user);
int idx_object = GetPlayerIndex(pSHP->object);
GPOINT src;
GPOINT dest;
if (idx_user>=0 && idx_object>=0)
{
if (idx_user==0)
src = GPOINT(655, 500);
else
src = GPOINT(76+149*((idx_user-1)%3), 290 + 279*(int)((idx_user-1)/3));
if (idx_object==0)
dest = GPOINT(655, 500 - pPlayer_obj->GetHeight()/2.0f*pPlayer_obj->m_scale);
else
dest = GPOINT(76+149*((idx_object-1)%3), 290 + 279*(int)((idx_object-1)/3) - pPlayer_obj->GetHeight()/2.0f*pPlayer_obj->m_scale);
switch(pSHP->enum_handle) {
case ENUM_HANDLE_ADD_BAD: //加有害泡泡
{
char str[50];
sprintf(str, "+%d", abs(pSHP->bubble_bad_obj - pPlayer_obj->num_bubble_bad));
pPlayer_obj->add_effect_tip(str,
GPOINT(0, pPlayer_obj->GetHeight()/2),
GPOINT(pPlayer_obj->GetWidth(), 0),
RGBA_MAKE(255, 10, 0, 200),
1.0f
);
add_skill_effect(src, dest,
"ani\\magic.txg",
"particles\\magic_1");
play_sound("bubble_sound\\use_bubble");
}
break;
case ENUM_HANDLE_ADD_GOOD: //加有益泡泡
{
char str[50];
sprintf(str, "+%d", abs(pSHP->bubble_good_obj - pPlayer_obj->num_bubble_store));
pPlayer_obj->add_effect_tip(str,
GPOINT(0, pPlayer_obj->GetHeight()/2),
GPOINT(-pPlayer_obj->GetWidth()-1, pPlayer_obj->GetHeight()),
RGBA_MAKE(0, 255, 0, 200),
1.0f
);
if (m_ptr_player==pPlayer || m_ptr_player==pPlayer_obj)
{
add_skill_effect(src, dest,
"ani\\mana.txg",
"particles\\magic_3");
}
play_sound("bubble_sound\\heal");
}
break;
case ENUM_HANDLE_SUBTRACT_GOOD:
{
char str[50];
sprintf(str, "-%d", abs(pSHP->bubble_good_obj - pPlayer_obj->num_bubble_store));
pPlayer_obj->add_effect_tip(str,
GPOINT(0, pPlayer_obj->GetHeight()/2),
GPOINT(-pPlayer_obj->GetWidth()-1, pPlayer_obj->GetHeight()),
RGBA_MAKE(100, 25, 0, 200),
1.5f
);
if (m_ptr_player==pPlayer || m_ptr_player==pPlayer_obj)
{
add_skill_effect(src, dest,
"ani\\magic.txg",
"particles\\magic_1");
}
play_sound("bubble_sound\\use_bubble");
}
break;
case ENUM_HANDLE_RAISE: //冒泡泡
{
if (m_ptr_player==pPlayer || m_ptr_player==pPlayer_obj)
{
add_skill_effect(src, dest,
"ani\\magic.txg",
"particles\\magic_1");
}
play_sound("bubble_sound\\use_bubble");
}
break;
case ENUM_HANDLE_POP: //消泡泡
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -