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

📄 saintfighter.cpp

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


////////////////////////////////////////////////////////////////////////
//Cbackground:
////////////////////////////////////////////////////////////////////////
CBackground::CBackground()
{
m_bActive=true;
m_bAtPalace=false;

m_nLoopTime=1;//循环使用楼梯地图5次;

m_nPace=1;
m_nHeight=SCREEN_HEIGHT;
m_nWidth=SCREEN_WIDTH;

m_nX=0;//START_X;
m_nY=0;//START_Y;

m_nX2=0;//START_X;
m_nY2=0-SCREEN_HEIGHT;//START_Y;

m_rcSource.top=START_Y;
m_rcSource.bottom=m_rcSource.top+m_nHeight;
m_rcSource.left=START_X;
m_rcSource.right=m_rcSource.left+m_nWidth;

m_rcSource2.top=START_Y-SCREEN_HEIGHT;
m_rcSource2.bottom=m_rcSource2.top+m_nHeight;
m_rcSource2.left=START_X;
m_rcSource2.right=m_rcSource2.left+m_nWidth;
}

////////////////////////////////////////////////////////////////////////////////////////// 
void CBackground::Trace(long unsigned int luTime,CPalaceGate PalaceGate)
{
	if(m_bActive)
	{
		if(m_nLoopTime>0)
		{
		if(m_nY<SCREEN_HEIGHT)m_nY+=m_nPace;
		else 
		{
		m_nY=0-SCREEN_HEIGHT;
		}

		if(m_nY2<SCREEN_HEIGHT)m_nY2+=m_nPace;
		else
		{ 
		m_nY2=0-SCREEN_HEIGHT;
		m_nLoopTime--;
		}
		
		}
		else	//最后一个行走循环了:
		{	m_nY+=m_nPace;
			m_nY2+=m_nPace;
			if(m_nY2>=0)//进门
			{
			m_bAtPalace=true;
			}
			
			if(m_nY2>=SCREEN_HEIGHT)//完全进门
			{
			m_bActive=false;
			}
		}
	}
return;
}

/////////////////////////////////////////////////////////////////////////////////
//
bool CBackground::Show(CDD* pDD)
{
if(!m_bActive)return true;

if(!pDD->BlitSourceToBack	(m_nX,
							m_nY,
							m_rcSource,
							DDBLTFAST_NOCOLORKEY))return false;
if(!pDD->BlitSourceToBack(	m_nX2,
							m_nY2,
							m_rcSource2,
							DDBLTFAST_NOCOLORKEY))return false;

return true;
}

/////////////////////////////////////////////////////////////////////////////////
//CPalaceGate:
/////////////////////////////////////////////////////////////////////////////////
CPalaceGate::CPalaceGate()
{
m_bActive=false;

m_nPace=1;
m_nHeight=SPIRIT_HEIGHT;//SCREEN_HEIGHT/2;
m_nWidth=SPIRIT_WIDTH_2;//SCREEN_WIDTH/2;

m_nXGate=0;
m_nYGate=0-SCREEN_HEIGHT;

m_rcGate.top=0;//
m_rcGate.bottom=m_rcGate.top+SCREEN_HEIGHT;
m_rcGate.left=0;//
m_rcGate.right=m_rcGate.left+SCREEN_WIDTH;

m_rcSource.top=2240;
m_rcSource.bottom=m_rcSource.top+m_nHeight-1;
m_rcSource.left=START_X+SPIRIT_WIDTH*9;
m_rcSource.right=m_rcSource.left+m_nWidth-1;

m_nX=(SCREEN_WIDTH-m_nWidth)/2;    //START_X;
m_nY=(SCREEN_HEIGHT-m_nHeight)/2;  //START_Y;

m_rcDestination.top=m_nY;
m_rcDestination.bottom=m_rcDestination.top+m_nHeight-1;
m_rcDestination.left=m_nX;
m_rcDestination.right=m_rcDestination.left+m_nWidth-1;
}

//////////////////////////////////////////////////////////////////////////////////////
void CPalaceGate::Trace(unsigned long luTime,CBackground Background)
{
if(!Background.m_bAtPalace)return;
else m_bActive=true;

int dx=1,//m_nX/8,
    dy=1;//m_nY/8; 

	if(m_nYGate<0)
	{
	m_nYGate+=m_nPace;
	return;
	}

	if(m_bActive&&m_nX>0)
	{
	m_nHeight+=dx<<1;  //m_nX/8;
	m_nWidth+=dy<<1;  //m_nY/8;

	if(m_nX>0)m_nX-=dx;   //m_nX/8;
	if(m_nY>0)m_nY-=dy;  //m_nY/8;

	m_rcDestination.top=m_nY;
	m_rcDestination.bottom=m_rcDestination.top+m_nHeight-1;
	m_rcDestination.left=m_nX;
	m_rcDestination.right=m_rcDestination.left+m_nWidth-1;
	}
return; 
}
/////////////////////////////////////////////////////////////////////////////////
//
bool CPalaceGate::Show(CDD* pDD)
{
if(!m_bActive)return true;

if(!pDD->BlitSourceToBack	(m_nXGate,
							m_nYGate,
							m_rcGate,
							DDBLTFAST_NOCOLORKEY))return false;

if(m_nYGate>=0)
if(!pDD->StretchBlitSourceToBack(m_rcDestination,
								   m_rcSource,
							       //DDBLT_NOCOLORKEY
								   NULL))return false;
return true;
}


/////////////////////////////////////////////////////////////////////////////////
//CCosmos
/////////////////////////////////////////////////////////////////////////////////
CCosmos::CCosmos()
{
m_bActive=false;
m_bAlive=false;
}

//////////////////////////////////////////////////////////////////////////	    
void CCosmos::Activate(int nSrcLeft,int nSrcTop,int nY)
{
m_bActive=true;
m_bAlive=true;

m_nHeight=SPIRIT_HEIGHT_4;

m_rcSource.top=nSrcTop;
m_rcSource.bottom=m_rcSource.top+m_nHeight;

m_rcSource.left=nSrcLeft;
m_rcSource.right=m_rcSource.left+20;
m_nX=10;
m_nY=nY;

return;
}

//////////////////////////////////////////////////////////////////////////
void CCosmos::Trace(CSpirit spirit)
{
	m_nWidth=spirit.m_nCosmos/15+20;
	
	if(spirit.m_bAlive)
	{
	//if(m_nX==10)m_nX=11;
	//else m_nX=10;
    m_rcSource.right=m_rcSource.left+20+m_nWidth;
	}
	else
	{
	m_bAlive=false;
	m_bActive=false;
	}

return;
}


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

m_nPace=1;
m_nCosmos=37;

m_nHeight=SPIRIT_HEIGHT;
m_nWidth=SPIRIT_WIDTH;

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

m_nY=-m_nHeight;
}

////////////////////////////////////////////////////////////////////////////////
void CStone::Trace(int i)
{
	if(m_bActive&&m_bAlive)
	{
    m_nX=SCREEN_WIDTH/MAX_STONE_COLUMN*i;
	
	if(i%2==0)m_nPace=2;
	else      m_nPace=3;

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



////////////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

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