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

📄 cloud.cpp

📁 网络游戏魔域源代码 测试可以完整变异
💻 CPP
字号:
#include "cloud.h"
#include "3dgamemap.h"
#include "gamedataset.h"
 
BOOL CCloud::Create(int nCloud0,int nCloud1,int nCloud2,int nCloud3)
{

	m_nCloudResource[0]	= nCloud0;
	m_nCloudResource[1]	= nCloud1;
	m_nCloudResource[2]	= nCloud2;
	m_nCloudResource[3]	= nCloud3;
	m_bCount			= 0;
	g_objGameMap.Screen2World(-200-rand()%600,rand()%_SCR_HEIGHT,m_infoCloud[0].nWorldX,m_infoCloud[0].nWorldY);

	if(m_nCloudResource[0])
	{
		m_infoCloud[0].nCurSport=0;	
		m_infoCloud[0].nSportDirX = 1;	
		m_infoCloud[0].nSportDirY = 0;		
		m_infoCloud[0].nSportRadian = 160+_SCR_WIDTH;
		m_infoCloud[0].nCurAlpha = 1;
		m_infoCloud[0].AlphaChange = 1;
		m_infoCloud[0].nCurFrame = 0;
	}	
	if(m_nCloudResource[1])
	{
		m_infoCloud[1].nCurSport=0;
		if(rand()%2)
		{
			m_infoCloud[1].nSportDirX = 1;	
			m_infoCloud[1].nSportDirY = 0;
			m_infoCloud[1].nSportRadian = rand()%10+20;
		}
		else
		{
			m_infoCloud[1].nSportDirY = 1;	
			m_infoCloud[1].nSportDirX = 0;
			m_infoCloud[1].nSportRadian = rand()%10+5;
		}
		m_infoCloud[1].nCurAlpha = 1;
		m_infoCloud[1].AlphaChange = 1;
		m_infoCloud[1].nCurFrame = 0;
		m_infoCloud[1].nWorldX = m_infoCloud[0].nWorldX+28;
		m_infoCloud[1].nWorldY = m_infoCloud[0].nWorldY+10;
	}

	if(m_nCloudResource[2])
	{
		m_infoCloud[2].nCurSport=0;	 
		if(rand()%2)
		{
			m_infoCloud[2].nSportDirX = 1;	
			m_infoCloud[2].nSportDirY = 0;
			m_infoCloud[2].nSportRadian = rand()%10+30;
		}
		else
		{
			m_infoCloud[2].nSportDirY = 1;	
			m_infoCloud[2].nSportDirX = 0;
			m_infoCloud[2].nSportRadian = rand()%10+10;
		}
		m_infoCloud[2].nCurAlpha = 1;
		m_infoCloud[2].AlphaChange = 1;
		m_infoCloud[2].nCurFrame = 0;
		m_infoCloud[2].nWorldX = m_infoCloud[0].nWorldX-25;
		m_infoCloud[2].nWorldY = m_infoCloud[0].nWorldY+5;
	}

	if(m_nCloudResource[3])
	{
		m_infoCloud[3].nCurSport=0;
		if(rand()%2)
		{
			m_infoCloud[3].nSportDirX = 1;	
			m_infoCloud[3].nSportDirY = 0;
			m_infoCloud[3].nSportRadian = rand()%20+20;
		}
		else
		{
			m_infoCloud[3].nSportDirY = 1;	
			m_infoCloud[3].nSportDirX = 0;
			m_infoCloud[3].nSportRadian = rand()%10+10;
		}
		m_infoCloud[3].nCurAlpha = 1;
		m_infoCloud[3].AlphaChange = 1;
		m_infoCloud[3].nCurFrame = 0;
		m_infoCloud[3].nWorldX = m_infoCloud[0].nWorldX-10;
		m_infoCloud[3].nWorldY = m_infoCloud[0].nWorldY-8;
	}
	return 1;
}


void CCloud::Process()
{
	char szTitle[256];
	int i;
	for(i=0;i<4;i++)
	{ 
		if(m_nCloudResource[i])
		{
			sprintf(szTitle,"Cloud%d",m_nCloudResource[i]);
			CAni * pAni = g_objGameDataSet.GetDataAni("ani/weather.ani",szTitle);	
			
			if(pAni)	
			{			 
				int nX,nY;
				g_objGameMap.World2Screen(m_infoCloud[i].nWorldX, m_infoCloud[i].nWorldY,nX, nY);
				if( nX < -800 || nY < - 300 || nX > _SCR_WIDTH + 200 || nY > _SCR_HEIGHT + 100)
				{				 
					g_objGameMap.Screen2World( -200 - rand()%600 ,rand()%_SCR_HEIGHT-100,m_infoCloud[i].nWorldX, m_infoCloud[i].nWorldY);
					m_infoCloud[0].nCurAlpha = 1;
					m_infoCloud[0].AlphaChange = 1;
					m_infoCloud[0].nCurSport = 0;
					m_infoCloud[0].nSportRadian = rand()%200 + _SCR_WIDTH;
					m_infoCloud[0].nSportDirX = 1;
					m_infoCloud[0].nSportDirY = 0; 
					for(int n=1;n<4;n++)
					{
						m_infoCloud[n].nCurSport = 0;
						m_infoCloud[n].nSportDirX *= -1;
						m_infoCloud[n].nSportDirY *= -1;
						m_infoCloud[n].nCurAlpha = 1;
						m_infoCloud[n].AlphaChange = 1;
						m_infoCloud[n].nCurFrame = 0;
						m_infoCloud[n].nWorldX = m_infoCloud[0].nWorldX+rand()%50;
						m_infoCloud[n].nWorldY = m_infoCloud[0].nWorldY+rand()%20;

						if(m_infoCloud[n].nSportDirY )
							m_infoCloud[n].nSportRadian = rand()%10+8;
						else
							m_infoCloud[n].nSportRadian = rand()%20+20;
					}					 
				}					
				pAni->Show(	m_infoCloud[i].nCurFrame,nX, nY, m_infoCloud[i].nCurAlpha, _SHOWWAY_NORMAL);
				
			}
		}
	}

	m_bCount ++;
	if(m_bCount  > 2) 
	{
		m_bCount = 0;	
		for(i=0;i<4;i++)
		{
			if(m_nCloudResource[i])
			{
					sprintf(szTitle,"Cloud%d",m_nCloudResource[i]);
					CAni * pAni = g_objGameDataSet.GetDataAni("ani/weather.ani",szTitle);	
					if(pAni)
					{
						if(++m_infoCloud[i].nCurFrame >= pAni->GetFrameAmount())
							m_infoCloud[i].nCurFrame = 0;
					}
					if(rand()%8==0)			
						m_infoCloud[i].nCurAlpha += m_infoCloud[i].AlphaChange;
					if(m_infoCloud[i].nCurAlpha >= 255)
					{
						m_infoCloud[i].nCurAlpha = 255;
						m_infoCloud[i].AlphaChange = -1 ;
					}
					if(m_infoCloud[i].nCurAlpha <100)
					{
						m_infoCloud[i].nCurAlpha = 100;
						m_infoCloud[i].AlphaChange = 1;
					}
					m_infoCloud[i].nCurSport++;					 
					if(m_infoCloud[0].nSportDirX)				 
							m_infoCloud[i].nWorldX+= m_infoCloud[0].nSportDirX;						 
					if(m_infoCloud[0].nSportDirY)				 
						m_infoCloud[i].nWorldY+=  m_infoCloud[0].nSportDirY;
		 			
					if(i>0)
					{
						if(m_infoCloud[i].nCurSport > m_infoCloud[i].nSportRadian)
						{
							m_infoCloud[i].nCurSport = 0;
							m_infoCloud[i].nSportDirX *= -1;
							m_infoCloud[i].nSportDirY *= -1;						
							if(m_infoCloud[i].nSportDirY )
								m_infoCloud[i].nSportRadian = rand()%10+8;
							else
								m_infoCloud[i].nSportRadian = rand()%20+20;
						
						}
						if(m_infoCloud[i].nSportDirX)					
							m_infoCloud[i].nWorldX+=  m_infoCloud[i].nSportDirX;
						if(m_infoCloud[i].nSportDirY)
							if(rand()%3==0)
								m_infoCloud[i].nWorldY+=  m_infoCloud[i].nSportDirY;								
					}
			}			
		}//endof for
	}

}







//================================================================================
//       cloudsystem
//
//==============================================================================



BOOL CCloudSys::Create(int nCloudNum)
{
	Destroy();
	if(nCloudNum > MAXCLOUD)
		nCloudNum = MAXCLOUD;
	int i;
	for(i=0;i<MAXCLOUD;i++)
	{
	CCloud * pCloud = new CCloud;
	pCloud->Create(rand()%9+1,rand()%9+1,rand()%9+1,rand()%9+1);
	this->m_dequeCloud.push_back(pCloud);
	}
	m_nCurAmound = 1;
	m_nTargetAmound = nCloudNum;
	m_bStatus = CLOUD_CREATE;
	return 1;
}

 
void CCloudSys::Process(int & nStatus)
{
	if(	m_bStatus == CLOUD_NONE || m_bStatus == CLOUD_PAUSE)
		return;
	int i;
	if(m_bStatus == CLOUD_CREATE )
	{
		if(m_nCurAmound < m_nTargetAmound)
		{
			int nAlternation = m_nCurAmound* 10;
			nAlternation = 199 - nAlternation;
			if(rand()%nAlternation == 0)
				m_nCurAmound ++;
		}
	}
	else
	{
		if(m_bStatus == CLOUD_STOP)
		{
			if(m_nCurAmound > 1)
			{
				int nAlternation = m_nCurAmound* 10;
				nAlternation = 199 - nAlternation;
				if(rand()%nAlternation == 0)
					m_nCurAmound --;

			}
			else
			{
				Destroy();	
				nStatus = 0;
				return;
			}
		}
		else
		{//reset
				int nAlternation = m_nCurAmound* 10;
				nAlternation = 199 - nAlternation;
				if(rand()%nAlternation == 0)
				{
					if(m_nCurAmound > m_nTargetAmound)
						m_nCurAmound--;
					else
						if(m_nCurAmound < m_nTargetAmound)
							m_nCurAmound++;
				}
		}
				
	}
	for(i=0;i< m_nCurAmound ;i++)
	{
		m_dequeCloud[i]->Process();
	}

}

void CCloudSys::Destroy()
{
	m_bStatus = CLOUD_NONE;
	int i;
	for(i=0;i<m_dequeCloud.size();i++)
	{
		if(m_dequeCloud[i])
			delete m_dequeCloud[i];
	}
	m_dequeCloud.clear();
}

void CCloudSys::Stop()
{
	m_bStatus = CLOUD_STOP;
}

void CCloudSys::ReSet(int nnum)
{
	if(nnum > MAXCLOUD)
		nnum = MAXCLOUD;
	m_bStatus = CLOUD_RESET;
	m_nTargetAmound = nnum;
}

void CCloudSys::Pause()
{
	m_bStatus = CLOUD_PAUSE;
}

void CCloudSys::Continue()
{
	m_bStatus = CLOUD_CREATE;
}

⌨️ 快捷键说明

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