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

📄 enemy.cpp

📁 一个完整的2D滚屏游戏示例
💻 CPP
字号:
#include <math.h>
#include "stdafx.h"
#include "define.h"
#include "Spirit.h"
#include "Enemy.h"

////////////////////////////////////////////////////////////////////////////////////
//CMOFire
////////////////////////////////////////////////////////////////////////////////////
CMOFire::CMOFire()
{
m_bActive=false;
m_bAlive=false;
m_nPace=8;

m_nAngle=45;
m_nFireNum=3;

m_nCosmos=7777;
m_nHeight=SPIRIT_HEIGHT_4;
m_nWidth=SPIRIT_WIDTH_4;

m_rcSource.top   =START_Y+SCREEN_HEIGHT+SPIRIT_HEIGHT*2+SPIRIT_HEIGHT_4;
m_rcSource.bottom=m_rcSource.top+m_nHeight-1;
m_rcSource.left  =START_X+SPIRIT_WIDTH_4;
m_rcSource.right =m_rcSource.left+m_nWidth-1;
}

////////////////////////////////////////////////////////////////////////////////////
void CMOFire::Initialize(int nAngle,int nFireNum,RECT rect,int nCosmos)
{
m_nAngle=nAngle;
m_nFireNum=nFireNum;
m_nCosmos=nCosmos;

m_rcSource.top   =rect.top;
m_rcSource.bottom=rect.bottom;
m_rcSource.left  =rect.left;
m_rcSource.right =rect.right;

m_nHeight=rect.bottom-rect.top+1;
m_nWidth=rect.right-rect.left+1;
return;
}

///////////////////////////////////////////////////////////////////////////////////////
void CMOFire::Activate(CSaintFighter saint)
{
if(saint.m_bFiring&&saint.m_bAlive&&(!m_bActive))//子弹初始位置;
	{
	m_nX=saint.m_nX+(saint.m_nWidth-m_nWidth)/2;
    m_nY=saint.m_nY+saint.m_nHeight-m_nHeight-m_nPace;
	m_bActive=true;
	m_bAlive=true;
	}
return;
}

//////////////////////////////////////////////////////////////////////////////////////
void CMOFire::Trace(int i)
{
int nAngle;
	
	if(m_bActive&&m_bAlive)
	{
	nAngle=m_nAngle*(i-m_nFireNum/2);
	m_nX+=(int)(m_nPace*sin(RADIAN(nAngle)));
	m_nY+=(int)(m_nPace*cos(RADIAN(nAngle)));	   
	
		if(m_nY<-m_nHeight||m_nY>SCREEN_HEIGHT||m_nX<-m_nWidth||m_nX>SCREEN_WIDTH)
		{
		m_bActive=false;
		m_bAlive=false;
		}
	}

return;
}

////////////////////////////////////////////////////////////////////////////////////
//CSmallSaint1
/////////////////////////////////////////////////////////////////////////////////////
CSmallSaint1::CSmallSaint1()
{
m_bActive=false;
m_bAlive=false;

m_nPace=5;
m_nCosmos=7;

m_nHeight=SPIRIT_HEIGHT;
m_nWidth=SPIRIT_WIDTH_2;

m_rcSource.top=START_Y+SCREEN_HEIGHT+SPIRIT_HEIGHT*5;//m_nHeight+1;
m_rcSource.bottom=m_rcSource.top+m_nHeight-1;
m_rcSource.left=START_X;
m_rcSource.right=m_rcSource.left+m_nWidth-1;

m_nX=-m_nWidth;
m_nY=m_nHeight;
}


///////////////////////////////////////////////////////////////////////////////////
void CSmallSaint1::Trace(int i)
{
	if(m_bActive&&m_bAlive)
	{
		m_nX+=m_nPace;
		m_nY+=m_nX/40;
			if(m_nY>SCREEN_HEIGHT)//自然死亡了:
			{
			m_bAlive=false;
			m_bActive=false;
			}
	}
	//switch(i)
	//{
	//case 1:m_nX=SCREEN_WIDTH-m_nX;break;
	//}		
return;
}

////////////////////////////////////////////////////////////////////////////////////
//CSmallSaint2
/////////////////////////////////////////////////////////////////////////////////////
CSmallSaint2::CSmallSaint2()
{
m_bActive=false;
m_bAlive=false;

m_nPace=3;
m_nCosmos=7;

m_nHeight=SPIRIT_HEIGHT;
m_nWidth=SPIRIT_WIDTH_2;

m_rcSource.top=START_Y+SCREEN_HEIGHT+SPIRIT_HEIGHT*5;//m_nHeight+1;
m_rcSource.bottom=m_rcSource.top+m_nHeight-1;
m_rcSource.left=START_X;
m_rcSource.right=m_rcSource.left+m_nWidth-1;

m_nX=SCREEN_WIDTH+m_nWidth;
m_nY=m_nHeight;
}


///////////////////////////////////////////////////////////////////////////////////
void CSmallSaint2::Trace(int i)
{
	if(m_bActive&&m_bAlive)
	{
		m_nX-=m_nPace;
		m_nY+=(SCREEN_WIDTH-m_nX)/30;
			if(m_nY>SCREEN_HEIGHT)//自然死亡了:
			{
			m_bAlive=false;
			m_bActive=false;
			}
	}
return;
}

//////////////////////////////////////////////////////////////////////////////////
//CsmallSaint3
//////////////////////////////////////////////////////////////////////////////////
CSmallSaint3::CSmallSaint3()
{
m_bActive=false;
m_bAlive=false;
m_bLeft=false;
m_bFiring=false;

m_nPace=6;
m_nCosmos=17;

m_nHeight=SPIRIT_HEIGHT;
m_nWidth=SPIRIT_WIDTH_2;

m_rcSource.top=START_Y+SCREEN_HEIGHT+SPIRIT_HEIGHT*5;//m_nHeight+1;
m_rcSource.bottom=m_rcSource.top+m_nHeight-1;
m_rcSource.left=START_X;
m_rcSource.right=m_rcSource.left+m_nWidth-1;

m_nX=-m_nWidth;
m_nY=-m_nHeight;
}

////////////////////////////////////////////////////////////////////////////////
void CSmallSaint3::Trace(int i,long unsigned int luTime)
{
	if(m_bActive&&m_bAlive)
	{
		if(m_bFiring==true)m_bFiring=false;//只发一次子弹;
		if((luTime+i*8-20)%100==0)m_bFiring=true;
		
		if(m_bLeft)
		{
		m_nX-=m_nPace;
        if(m_nX<=0)m_bLeft=false;
		if(m_nX==500)m_bFiring=true;
		}
		else
		{
		m_nX+=m_nPace;
		if(m_nX>=SCREEN_WIDTH)m_bLeft=true;
		if(m_nX==100)m_bFiring=true;
		}

		m_nY+=m_nPace/5;
			
		if(m_nY>SCREEN_HEIGHT)//自然死亡了:
		{
		m_bAlive=false;
		m_bActive=false;
		}
	}		
return;
}

//////////////////////////////////////////////////////////////////////////////////
//CsmallSaint4
//////////////////////////////////////////////////////////////////////////////////
CSmallSaint4::CSmallSaint4()
{
m_bActive=false;
m_bAlive=false;
m_bDown=true;
m_bFiring=false;

m_nPace=1;
m_nCosmos=277;

m_nHeight=SPIRIT_HEIGHT;
m_nWidth=SPIRIT_WIDTH_2;

m_rcSource.top=START_Y+SCREEN_HEIGHT+SPIRIT_HEIGHT*5;//m_nHeight+1;
m_rcSource.bottom=m_rcSource.top+m_nHeight-1;
m_rcSource.left=START_X;
m_rcSource.right=m_rcSource.left+m_nWidth-1;

m_nX=SCREEN_WIDTH/2+80;
m_nY=-m_nHeight;
}


/////////////////////////////////////////////////////////////////////////////////
void CSmallSaint4::Trace(int i,long unsigned int luTime)
{
	if(m_bActive&&m_bAlive)
	{
		if(m_bFiring==true)m_bFiring=false;//只发一次子弹;
		if((luTime)%100==0)m_bFiring=true;
		
		if(m_bDown)
		{
		m_nY+=m_nPace;
        if(m_nY>=SCREEN_HEIGHT/2-m_nHeight)m_bDown=false;
		//if(m_nX==500)m_bFiring=true;
		}
		else
		{
		m_nY-=m_nPace;
		if(m_nY<=SCREEN_HEIGHT/4)m_bDown=true;
		//if(m_nY==100)m_bFiring=true;
		}
	}		
return;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -