www.gusucode.com > VC++游戏雷霆战机源代码-源码程序 > VC++游戏雷霆战机源代码-源码程序\code\EnemyPlane.cpp

    // EnemyPlane.cpp: implementation of the CEnemyPlane class.
// Download by http://www.NewXing.com
//////////////////////////////////////////////////////////////////////

#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;
		}
	}
}