📄 playerplane.cpp
字号:
// PlayerPlane.cpp: implementation of the CPlayerPlane class.
//
//////////////////////////////////////////////////////////////////////
#include "PlayerPlane.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CPlayerPlane::CPlayerPlane(CDirectWnd *win,
CObList *ObList,
int lNum
):CPlane(win,ObList)
{
id = 0;
width = 50;
height = 60;
posx = SrcWidth/2 - width/2;
posy = SrcHeight;
xspeed = 3;
yspeed = 3;
moveState = 0;
bulletNum = 8;
bulletType = 1;
bulletLevel = 1;
otime = timeGetTime();
stime = timeGetTime();
life = 1;
bombNum = 3;
lifeNum = lNum;
super = TRUE;
supertime = 3;
canControl = FALSE;
}
CPlayerPlane::~CPlayerPlane()
{
}
void CPlayerPlane::LoadPic()
{
PlanePic[0] = m_win->lpBKGObject[3];
PlanePic[1] = m_win->lpBKGObject[4];
PlanePic[2] = m_win->lpBKGObject[5];
}
void CPlayerPlane::Action()
{
CheckKeyboard();
if( life < 0 )
{
setExist(0);
new CExplode(m_win,
m_ObList,
posx,
posy,
0);
m_win->m_snd->PlaySound(1,0);
lifeNum-- ;
if(lifeNum > 0)
{
new CPlayerPlane(m_win,m_ObList,lifeNum);
}
}
// 显示飞机数量
RECT rSrc,rDest;
m_win->GetRect(&rDest,20,SrcHeight - 40,25,30);
m_win->BltObject(PlanePic[0],NULL,&rDest);
m_win->ShowText(50,SrcHeight - 30,"x");
m_win->ShowText(65,SrcHeight - 30,lifeNum);
// 显示炸弹数量
m_win->GetRect(&rSrc,0,40,40,40);
m_win->GetRect(&rDest,80,SrcHeight - 35,20,20);
m_win->BltObject(m_win->lpBKGObject[9],&rSrc,&rDest);
m_win->ShowText(110,SrcHeight - 30,"x");
m_win->ShowText(125,SrcHeight - 30,bombNum);
}
void CPlayerPlane::Fire()
{
if(CPlayerBullet::num <= bulletNum * bulletLevel)
{
if (timeGetTime()-otime > 50)
{
otime = timeGetTime();
switch(bulletLevel)
{
case 1:
{
if( 1 == bulletType )
{
new CPlayerBullet( m_win,
m_ObList,
posx+17,
posy-5,
0,
5,
2);
}
else if( 2 == bulletType )
{
new CPlayerBullet( m_win,
m_ObList,
posx+18,
posy-5,
0,
5,
3);
}
}
break;
case 2:
{
if( 1 == bulletType )
{
new CPlayerBullet( m_win,
m_ObList,
posx+10,
posy-5,
0,
5,
2);
new CPlayerBullet( m_win,
m_ObList,
posx+24,
posy-5,
0,
5,
2);
}
else if( 2 == bulletType )
{
new CPlayerBullet( m_win,
m_ObList,
posx+18,
posy-5,
0,
5,
3);
}
}
break;
case 3:
{
if( 1 == bulletType )
{
for(int i = 0 ; i < 3; i++)
{
new CPlayerBullet( m_win,
m_ObList,
posx+10,
posy-5,
i-1,
5,
2);
}
}
else if( 2 == bulletType )
{
new CPlayerBullet( m_win,
m_ObList,
posx+14,
posy-5,
0,
5,
3);
new CPlayerBullet( m_win,
m_ObList,
posx+22,
posy-5,
0,
5,
3);
}
}
break;
case 4:
{
if( 1 == bulletType )
{
for(int i = 0 ; i < 5; i++)
{
new CPlayerBullet( m_win,
m_ObList,
posx+17,
posy-5,
i-2,
5,
2);
}
}
else if( 2 == bulletType )
{
for(int i = 0; i < 3; i++)
{
new CPlayerBullet( m_win,
m_ObList,
posx+11+7*i,
posy-5,
0,
5,
3);
}
}
}
break;
case 5:
{
if( 1 == bulletType )
{
for(int i = 0 ; i < 7; i++)
{
new CPlayerBullet( m_win,
m_ObList,
posx+17,
posy-5,
i-3,
5,
2);
}
}
else if( 2 == bulletType )
{
for(int i = 0; i < 4; i++)
{
new CPlayerBullet( m_win,
m_ObList,
posx+8+7*i,
posy-5,
0,
5,
3);
}
}
}
break;
}
// m_win->m_snd->PlaySound(6,0);
}
}
}
void CPlayerPlane::CheckKeyboard()
{
if (super==TRUE)
if (timeGetTime() > stime + supertime*1000)
{
stime = timeGetTime();
super=FALSE;
}
RECT rtDest = {posx,posy,posx+50,posy+60};
if ( canControl == TRUE )
{
moveState = 0;
if(KEYDOWN(VK_LEFT))
{
posx -= xspeed;
if( posx < 0 ) posx = 0;
moveState = 1;
}
if(KEYDOWN(VK_RIGHT))
{
posx += xspeed;
if( posx > SrcWidth - width ) posx = SrcWidth - width;
moveState = 2;
}
if(KEYDOWN(VK_UP))
{
posy -= yspeed;
if( posy < 0 ) posy = 0;
}
if(KEYDOWN(VK_DOWN))
{
posy += yspeed;
if(posy > SrcHeight - height) posy = SrcHeight - height;
}
if(KEYDOWN(VK_CONTROL))
{
Fire();
}
if(KEYDOWN(VK_MENU))
{
if ( 0 == CBomb::num && bombNum > 0 )
{
new CBomb(m_win,m_ObList);
bombNum --;
}
}
}
else
{
if (posy > SrcHeight - 100 ) //飞机刚出现时是无法控制的
{
posy -= yspeed;
}
else
canControl=TRUE;
}
if (super==TRUE) //无敌时的闪烁效果
{
static int ot=0;//延时
if (timeGetTime()-ot > 20)
ot = timeGetTime();
else
return;
}
// 显示飞机
m_win->BltObject(PlanePic[moveState],NULL,&rtDest);
}
void CPlayerPlane::getBonus(int type)
{
//type 0:子弹一 1:子弹二 2: 炸弹 3: 无敌 4: 子弹全满
switch(type)
{
case 0:
if( 1 == bulletType )
{
if(bulletLevel < 5)
bulletLevel++;
}
else if( 2 == bulletType )
{
bulletType = 1;
}
break;
case 1:
if( 1 == bulletType )
{
bulletType = 2;
}
else if( 2 == bulletType )
{
if(bulletLevel < 5)
bulletLevel++;
}
break;
case 2:
bombNum++;
break;
case 3:
super = TRUE;
supertime = 20;
stime = timeGetTime();
break;
case 4:
bulletLevel = 5;
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -