⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 enemy.cpp

📁 射击小游戏
💻 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 + -