📄 enemy.cpp
字号:
//**********************************************************************
//敌人战斗机的函数实现
//**********************************************************************
#include "stdafx.h"
#include "Enemy.h"
#include "ShootView.h"
#include "shoot.h"
extern CShootApp theApp;
//**********************************************************************
//战斗机基类函数实现
//**********************************************************************
//构造函数
Enermy::Enermy(int x_value, int y_value)
:FighterPlane(x_value, y_value)
{
m_bUsed = true;//屏幕显示状态:开启
m_vx = 0;//初始化速度为0
m_vy = 0;
}
//更新函数
void Enermy::Update()
{
CShootView * pView = (CShootView*)((CFrameWnd*)(theApp.m_pMainWnd))->GetActiveView();
FighterPlane::Update();//调用其父类的构造函数
//如果离开舞台,就让它消失。屏幕显示状态:关闭
if( OutOfSight() && m_y>=pView->GetClientHeight())
m_bUsed = false;
}
//发火函数
void Enermy::Fire()
{
CShootView * pView = (CShootView*)((CFrameWnd*)(theApp.m_pMainWnd))->GetActiveView();//->GetActiveView();
//发火要有一定的间隔,如果两次发射时间达到FireInterval则可以发射子弹,否则返回,不做任何事
if( GetTickCount() - m_iLastFireTime < Bullet::GetFireInterval( BulletType ) )
return;
pView->EnermyFire(this);
m_iLastFireTime = GetTickCount();//记录本次发火时间
}
// Tom战斗机的构造函数
Enermy_Tom::Enermy_Tom(int x_value, int y_value)
:Enermy(x_value, y_value)
{
CShootView * pView = (CShootView*)((CFrameWnd*)(theApp.m_pMainWnd))->GetActiveView();//->GetActiveView();
//初始化贴图坐标和贴图尺寸
m_isx = 0;
m_isy = 33;
m_w = 62;
m_h = 50;
//用于碰撞检测的矩形
cx = 16;
cy = 12;
cw = 31;
ch = 29;
//生命值初始化
m_iLife = 10+pView->GetLevel();
//初始速度和子弹类型
m_vy = 2;
Direction = DIR_FORWARD;//初始化运动方向:一直向前
BulletType = ENEMY_B1;
//设置上次发火时间
SetLastFireTime();
//调整显示的坐标
AdjustPosition();
}
//改变方向的函数
void Enermy_Tom::ChangeDirection()
{
Direction = ( DIRECTION ) ( rand() % 3 );
}
//TOM战斗机有自己的更新函数
void Enermy_Tom::Update()
{
CShootView * pView = (CShootView*)((CFrameWnd*)(theApp.m_pMainWnd))->GetActiveView();
Enermy::Update();
if(m_iLife<=0) return;
switch( Direction )
{
case DIR_LEFT://向左运动
m_x--;
if( m_x<0 )//碰到左边框就直接向前
{
m_x = 0;
Direction = DIR_FORWARD;
}
break;
case DIR_RIGHT://向右运动
m_x++;
if( m_x + m_w > pView->GetClientWidth())//碰到右边框就直接向前
{
m_x = pView->GetClientWidth() - m_w;
Direction = DIR_FORWARD;
}
break;
}
if( rand() < 300 )//随机改变运动方向
ChangeDirection();
}
// Mimi战斗机的构造函数
Enermy_Mimi::Enermy_Mimi(int x_value, int y_value)
:Enermy(x_value, y_value)
{
CShootView * pView = (CShootView*)((CFrameWnd*)(theApp.m_pMainWnd))->GetActiveView();//->GetActiveView();
//初始化贴图坐标和贴图尺寸
m_isx = 41;
m_isy = 0;
m_w = 33;
m_h = 28;
//用于碰撞检测的矩形
cx = 7;
cy = 4;
cw = 20;
ch = 21;
//生命值初始化
m_iLife = rand()%10+pView->GetLevel();
//初始速度和子弹类型
m_vy = 5;
BulletType = ENEMY_B2;
//设置上次发火时间
SetLastFireTime();
//调整显示的坐标
AdjustPosition();
}
// Jack战斗机的构造函数
Enermy_Jack::Enermy_Jack(int x_value, int y_value)
:Enermy(x_value, y_value)
{
CShootView * pView = (CShootView*)((CFrameWnd*)(theApp.m_pMainWnd))->GetActiveView();
//初始化贴图坐标和贴图尺寸
m_isx = 74;
m_isy = 0;
m_w = 43;
m_h = 42;
//用于碰撞检测的矩形
cx = 12;
cy = 5;
cw = 19;
ch = 25;
//生命值初始化
m_iLife = rand()%5+pView->GetLevel();
//初始速度和子弹类型
m_vy = 3;
BulletType = ENEMY_B3;
//设置上次发火时间
SetLastFireTime();
//调整显示的坐标
AdjustPosition();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -