📄 game.cpp
字号:
}
}
}
}
test = done;
if (done == CAN_MOVE)
{
m_Player[0].status = STATUS_MOVE; // 设置移动标志
m_Player[0].counter = m_Player[0].step / m_Player[0].speed; // counter此处表示需要多少桢
if (m_Player[0].step % m_Player[0].speed != 0)
{
m_Player[0].counter++;
}
}
else if (done == CAN_PUSH)
{
m_Player[0].presswaykey++;
if (m_Player[0].presswaykey>40)
{
// 设置推箱子标志
if (m_Player[0].y %40 < 10)
{
if (((m_Player[0].x-40)/40 != 0) && ((m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40-2].type == 0) || (m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40-2].type == 8) || (m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40-2].type == 9)))
{
m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40-1].counter = 40;
m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40-1].way = m_Player[0].way;
}
}
else
{
if (((m_Player[0].x-40)/40 != 0) && ((m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40-2].type == 0) || (m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40-2].type == 8) || (m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40-2].type == 9)))
{
m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40].counter = 40;
m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40].way = m_Player[0].way;
}
}
m_Player[0].presswaykey = 0;
}
}
else if (done == CAN_KICK && m_Player[0].kick)
{
m_Player[0].presswaykey++;
if (m_Player[0].presswaykey>20)
{
// 设置推箱子标志
if (m_Player[0].y %40 < 10)
{
if (((m_Player[0].x-40)/40 != 0) && ((m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40-2].type == 0) || (m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40-2].type == 8) || (m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40-2].type == 9)))
{
m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40-1].type = 0;
MOVEBOMB move;
move.mode = 0;
move.way = m_Player[0].way;
move.x = (m_Player[0].x/40-1)*40;
move.y = (m_Player[0].y)/40*40;
move.counter = m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40-1].counter;
move.power = m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40-1].status;
move.who = m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40-1].who;
m_bombKick.push_back(move);
}
}
else
{
if (((m_Player[0].x-40)/40 != 0) && ((m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40-2].type == 0) || (m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40-2].type == 8) || (m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40-2].type == 9)))
{
m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40].type = 0;
MOVEBOMB move;
move.mode = 0;
move.way = m_Player[0].way;
move.x = (m_Player[0].x/40)*40;
move.y = (m_Player[0].y+40)/40*40;
move.counter = m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40].counter;
move.power = m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40].status;
move.who = m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40].who;
m_bombKick.push_back(move);
}
}
m_Player[0].presswaykey = 0;
}
}
return;
}
if (m_pInput->IsKeyDown(DIK_RIGHT) && (m_Player[0].status == STATUS_FREE) && (m_Player[0].x != 14*40))
{
done = CAN_MOVE;
m_Player[0].way = WAY_RIGHT;
if (m_Player[0].x % 40 == 0) // 判断阻挡
{
done = CAN_BLOCK;
// 正前方为空
if ((m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40+1].type ==0 ) || (m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40+1].type ==8 ) || (m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40+1].type ==9 ))
{
// 右上方为空 ...OK!
if ((m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40+1].type ==0 ) || (m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40+1].type ==8 ) || (m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40+1].type ==9 ))
{
done = CAN_MOVE; // 直接往前走
}
else // 右上方有东西
{
if (m_Player[0].y%40 == 0)
{
done = CAN_MOVE; // 直接往前走
}
else if (m_Player[0].y%40 <= 30)
{
m_Player[0].way = WAY_UP;
done = CAN_MOVE; // 向左边偏移
}
else if (m_Player[0].y%40 > 30)
{
if (m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40+1].type ==2 )
{
// 右上方是箱子,推
done = CAN_PUSH;
}
else if (m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40+1].type ==7 )
{
// 右上方是泡泡,踢
done = CAN_KICK;
}
}
}
}
else // 正前方有东西
{
// 右上方为空 ...OK!
if ((m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40+1].type ==0 ) || (m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40+1].type ==8 ) || (m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40+1].type ==9 ))
{
if (m_Player[0].y%40 == 0)
{
if (m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40+1].type ==2 )
{
// 右上方是箱子,推
done = CAN_PUSH;
}
else if (m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40+1].type ==7 )
{
// 右上方是泡泡,踢
done = CAN_KICK;
}
}
else if (m_Player[0].y%40 >= 10)
{
m_Player[0].way = WAY_DOWN;
done = CAN_MOVE; // 向右边偏移
}
else if (m_Player[0].y%40 < 10)
{
if (m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40+1].type ==2 )
{
// 右上方是箱子,推
done = CAN_PUSH;
}
else if (m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40+1].type ==7 )
{
// 右上方是泡泡,踢
done = CAN_KICK;
}
}
}
else // 右上方有东西
{
// 此处较麻烦分4种情况: 1.左边可以移动,右边可以移动 如果x%40<20则左移,否则右移
// 2.左边可以移动,右边不可移动 如果x%40<=30则左移
// 3.左边不可移动,右边可以移动 如果x%40>=10则右移
// 4.左边不可移动,右边不可移动 不能移动
if (((m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40+1].type ==2 ) || (m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40+1].type ==7 ))
&& ((m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40+1].type ==2 ) || (m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40+1].type ==7 )))
{
if (m_Player[0].y%40 == 0)
{
if (m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40+1].type ==2 )
{
// 右上方是箱子,推
done = CAN_PUSH;
}
else if (m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40+1].type ==7 )
{
// 右上方是泡泡,踢
done = CAN_KICK;
}
}
else if (m_Player[0].y%40 < 20)
{
m_Player[0].way = WAY_UP;
done = CAN_MOVE; // 向左边偏移
}
else
{
m_Player[0].way = WAY_DOWN;
done = CAN_MOVE; // 向右边偏移
}
}
if (((m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40+1].type ==2 ) || (m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40+1].type ==7 ))
&& !((m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40+1].type ==2 ) || (m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40+1].type ==7 )))
{
if (m_Player[0].y%40 == 0)
{
if (m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40+1].type ==2 )
{
// 右上方是箱子,推
done = CAN_PUSH;
}
else if (m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40+1].type ==7 )
{
// 右上方是泡泡,踢
done = CAN_KICK;
}
}
else if (m_Player[0].y%40 <= 30)
{
m_Player[0].way = WAY_UP;
done = CAN_MOVE; // 向左边偏移
}
}
if ( !((m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40+1].type ==2 ) || (m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40+1].type ==7 ))
&& ((m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40+1].type ==2 ) || (m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40+1].type ==7 )))
{
if (m_Player[0].y%40 >= 10)
{
m_Player[0].way = WAY_DOWN;
done = CAN_MOVE; // 向右边偏移
}
}
}
}
}
test = done;
if (done == CAN_MOVE)
{
m_Player[0].status = STATUS_MOVE; // 设置移动标志
m_Player[0].counter = m_Player[0].step / m_Player[0].speed; // counter此处表示需要多少桢
if (m_Player[0].step % m_Player[0].speed != 0)
{
m_Player[0].counter++;
}
}
else if (done == CAN_PUSH)
{
m_Player[0].presswaykey++;
if (m_Player[0].presswaykey>40)
{
// 设置推箱子标志
if (m_Player[0].y %40 < 10)
{
if (((m_Player[0].x-40)/40 != 13*40) && ((m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40+2].type == 0) || (m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40+2].type == 8) || (m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40+2].type == 9)))
{
m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40+1].counter = 40;
m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40+1].way = m_Player[0].way;
}
}
else
{
if (((m_Player[0].x-40)/40 != 13*40) && ((m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40+2].type == 0) || (m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40+2].type == 8) || (m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40+2].type == 9)))
{
m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40+1].counter = 40;
m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40+1].way = m_Player[0].way;
}
}
m_Player[0].presswaykey = 0;
}
}
else if (done == CAN_KICK && m_Player[0].kick)
{
m_Player[0].presswaykey++;
if (m_Player[0].presswaykey>20)
{
// 设置推箱子标志
if (m_Player[0].y %40 < 10)
{
if (((m_Player[0].x-40)/40 != 13*40) && ((m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40+2].type == 0) || (m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40+2].type == 8) || (m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40+2].type == 9)))
{
m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40+1].type = 0;
MOVEBOMB move;
move.mode = 0;
move.way = m_Player[0].way;
move.x = (m_Player[0].x/40+1)*40;
move.y = (m_Player[0].y)/40*40;
move.counter = m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40+1].counter;
move.power = m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40+1].status;
move.who = m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40+1].who;
m_bombKick.push_back(move);
}
}
else
{
if (((m_Player[0].x-40)/40 != 13*40) && ((m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40+2].type == 0) || (m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40+2].type == 8) || (m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40+2].type == 9)))
{
m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40+1].type = 0;
MOVEBOMB move;
move.mode = 0;
move.way = m_Player[0].way;
move.x = (m_Player[0].x/40+1)*40;
move.y = (m_Player[0].y+40)/40*40;
move.counter = m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40+1].counter;
move.power = m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40+1].status;
move.who = m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40+1].who;
m_bombKick.push_back(move);
}
}
m_Player[0].presswaykey = 0;
}
}
return;
}
/*
if (m_pInput->IsKeyDownToggle(DIK_Z)) // 踢泡泡,测试用
{
MOVEBOMB move;
move.mode = 0;
move.way = m_Player[0].way;
move.x = (m_Player[0].x+20)/40*40;
move.y = (m_Player[0].y+20)/40*40;
m_bombKick.push_back(move);
return;
}
*/
/*
if (m_pInput->IsKeyDownToggle(DIK_X)) // 扔泡泡,测试用
{
MOVEBOMB move;
move.mode = 1;
move.way = m_Player[0].way;
move.x = (m_Player[0].x+20)/40*40;
move.y = (m_Player[0].y+20)/40*40;
move.offset = 0;
move.addorsub = true;
m_bombCast.push_back(move);
return;
}
*/
if (m_pInput->IsKeyDownToggle(DIK_F1))
{
m_bHelp = !m_bHelp;
}
if (m_pInput->IsKeyDownToggle(DIK_F2))
{
ResetMapInfor();
return;
}
if (m_pInput->IsKeyDownToggle(DIK_F3))
{
m_bWindowed = !m_bWindowed;
ChangeDisplayMode( m_bWindowed );
return;
}
// 鼠标处理
POINT point;
RECT rect,rect1;
GetCursorPos(&point);
ScreenToClient(m_hWnd,&point);
GetClientRect(m_hWnd,&rect);
m_CursorPos.x = 800*point.x/(rect.right-rect.left);
m_CursorPos.y = 600*point.y/(rect.bottom-rect.top);
m_pInput->GetMouseState();
if (m_pInput->IsMouseDown(0)) // 左键按下
{
rect1.left = 649;
rect1.top = 555;
rect1.right = 782;
rect1.bottom = 590;
if (PtInRect(&rect1,m_CursorPos))
{
PostQuitMessage(0);
}
}
// 连选方向键时不会执行该语句
m_Player[0].presswaykey = 0;
}
HRESULT CGame::ChangeDisplayMode( BOOL bWindowed )
{
HRESULT hr;
// Release all existing surfaces
delete m_pDraw;
delete m_pSurface;
delete m_pSurfacePlayer;
delete m_pSurfaceWord;
// The back buffer and primary surfaces need to be created differently
// depending on if we are in full-screen or windowed mode
m_pDraw = new CDraw;
if( bWindowed )
{
if ( FAILED( hr = m_pDraw->CreateWindowedDisplay(m_hWnd,800,600 ) ) )
return hr;
}
else
{
if( FAILED( hr = m_pDraw->CreateFullScreenDisplay(m_hWnd,800,600,32) ) )
{
MessageBox( m_hWnd, TEXT("This display card does not support 800x600x32. "),
TEXT("泡泡堂"), MB_ICONERROR | MB_OK );
return hr;
}
}
// Create a surface, and draw a bitmap resource on it. The surface must
// be newly created every time the screen mode is switched since it
// uses the pixel format of the primary surface
if ( FAILED( hr = m_pDraw->CreateSurface(&m_pSurface,800,600) ) )
return hr;
if( FAILED( hr = m_pSurface->DrawBitmap(".\\picture\\pic.bmp",800,600) ) )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -