📄 enemyplane.cpp
字号:
// EnemyPlane.cpp: implementation of the CEnemyPlane class.
// Download by http://www.codefans.net
//////////////////////////////////////////////////////////////////////
#include "EnemyPlane.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CEnemyPlane::CEnemyPlane(CDirectWnd *win,
CObList *ObList,
int px,
int py,
int xspd,
int yspd,
int etype,
int elife):CPlane(win,ObList)
{
id = 2;
posx = px;
posy = py;
xspeed = xspd;
yspeed = yspd;
enemyType = etype;
life = elife;
firetime = timeGetTime();
firetime1 = timeGetTime();
firetime2 = timeGetTime();
bulletNum = 0;
dead = 0;
getInform();
}
CEnemyPlane::~CEnemyPlane()
{
}
void CEnemyPlane::LoadPic()
{
EnemyPic = m_win->lpBKGObject[7];
}
void CEnemyPlane::Action()
{
RECT rtSrc,rtDest;
m_win->GetRect(&rtDest,posx,posy,width,height);
switch(enemyType)
{
case 0:
m_win->GetRect(&rtSrc,0,0,50,62);
break;
case 1:
m_win->GetRect(&rtSrc,0,62,50,64);
break;
case 2:
m_win->GetRect(&rtSrc,162,0,66,76);
break;
case 3:
m_win->GetRect(&rtSrc,50,0,114,125);
break;
}
m_win->BltObject(EnemyPic,&rtSrc,&rtDest);
if( posx < 0 || posx > SrcWidth - width ||
posy < 0 ||posy > SrcHeight - height)
{
setExist(0);
}
if( life < 0 )
{
dead = 1;
setExist(0);
new CExplode(m_win,
m_ObList,
posx,
posy,
1);
m_win->m_snd->PlaySound(0,0);
if( 1 == rand()%5 )
{
if ( 1 == rand()%4 )
{
new CBonus(m_win,
m_ObList,
posx,
posy,
0,
1,
4);
}
else
{
new CBonus(m_win,
m_ObList,
posx,
posy,
0,
1,
rand()%4);
}
}
}
if(getExist() != 0)
{
Move();
Fire();
}
}
void CEnemyPlane::getInform()
{
switch(enemyType)
{
case 0:
width = 50;
height = 62;
score = 100;
break;
case 1:
width = 50;
height = 64;
score = 200;
break;
case 2:
width = 66;
height = 76;
score = 300;
break;
case 3:
width = 114;
height = 125;
score = 2000;
break;
}
}
void CEnemyPlane::Move()
{
switch(enemyType)
{
case 0:
posx += xspeed;
posy += yspeed;
break;
case 1:
posx += xspeed;
posy += yspeed;
break;
case 2:
posx += xspeed;
posy += yspeed;
if(posx < 0 || posx > SrcWidth - width) { xspeed = -xspeed;posx += xspeed; }
if(posy < 0 || posy > SrcHeight - height ) { yspeed = -yspeed;posy += yspeed; }
break;
case 3:
posx += xspeed;
posy += yspeed;
if(posx < 0 || posx > SrcWidth - width) { xspeed = -xspeed;posx += xspeed; }
if(posy < 0 || posy > SrcHeight - height ) { yspeed = -yspeed;posy += yspeed; }
break;
}
}
void CEnemyPlane::Fire()
{
if (timeGetTime() - firetime > 100)
{
firetime = timeGetTime();
switch(enemyType)
{
case 0:
if (bulletNum <= 4)
{
new CEnemyBullet(m_win,
m_ObList,
posx+8,
posy+60,
0,
5,
1);
new CEnemyBullet(m_win,
m_ObList,
posx+26,
posy+60,
0,
5,
1);
bulletNum++;
}
else
{
if(timeGetTime() - firetime1 > 3000)
{
firetime1 = timeGetTime();
bulletNum = 0;
}
}
break;
case 1:
if(timeGetTime() - firetime1 > 100)
{
int spdx,spdy;
do { spdx = rand()%9 - 4;} while( 0 == spdx );
do { spdy = rand()%9 - 4;} while( 0 == spdy );
firetime1 = timeGetTime();
new CEnemyBullet(m_win,
m_ObList,
posx+17,
posy+60,
spdx,
spdy,
1);
}
break;
case 2:
if(timeGetTime() - firetime1 > 2000)
{
firetime1 = timeGetTime();
new CEnemyBullet(m_win,
m_ObList,
posx,
posy,
-2,
-2,
4);
new CEnemyBullet(m_win,
m_ObList,
posx+66,
posy,
2,
-2,
4);
new CEnemyBullet(m_win,
m_ObList,
posx+33,
posy,
0,
-3,
4);
new CEnemyBullet(m_win,
m_ObList,
posx,
posy+38,
-3,
0,
4);
new CEnemyBullet(m_win,
m_ObList,
posx+66,
posy+38,
3,
0,
4);
new CEnemyBullet(m_win,
m_ObList,
posx,
posy+76,
-2,
2,
4);
new CEnemyBullet(m_win,
m_ObList,
posx+33,
posy+76,
0,
3,
4);
new CEnemyBullet(m_win,
m_ObList,
posx+66,
posy+76,
2,
2,
4);
}
break;
case 3:
if (bulletNum <= 10)
{
new CEnemyBullet(m_win,
m_ObList,
posx+52,
posy+120,
0,
8,
0);
bulletNum++;
}
else
{
if(timeGetTime() - firetime1 > 3000)
{
firetime1 = timeGetTime();
bulletNum = 0;
}
}
if (timeGetTime() - firetime2 > 1000)
{
firetime2 = timeGetTime();
new CEnemyBullet(m_win,
m_ObList,
posx+52,
posy+120,
-3,
3,
4);
new CEnemyBullet(m_win,
m_ObList,
posx+52,
posy+120,
-4,
0,
4);
new CEnemyBullet(m_win,
m_ObList,
posx+52,
posy+120,
0,
4,
4);
new CEnemyBullet(m_win,
m_ObList,
posx+52,
posy+120,
3,
3,
4);
new CEnemyBullet(m_win,
m_ObList,
posx+52,
posy+120,
4,
0,
4);
}
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -