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