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

📄 weather.cpp

📁 网络游戏魔域源代码 测试可以完整变异
💻 CPP
📖 第 1 页 / 共 5 页
字号:
					b = m_dwColor & 0xff;
					pBmp->SetColor(200,r,g,b);
					pBmp->Show(iScreenX,iScreenY);
				}
				else
					if(pAni->Show(m_iRippleFrameIndex++,iScreenX,iScreenY))			
						m_iStatus	=_RAINSTATUS_NONE;
			}
			
		}
		
	}
	
	return;
}

//--------------------------------------------------------------
void CRain::Destroy(void)
{
	return;
}

void CRain::Process()
{
	Show();
	return;
}

//--------------------------------------------------------------

CRainSys::CRainSys()
{
	m_iStatu =_RAIN_NONE; 
}

void CRainSys::Pause()
{
	DXSetVolume("sound/rain.wav",0,0,0); 
	m_iStatu =  _RAIN_PAUSE;
	m_dwPauseTime = TimeGet();
	
}
void CRainSys::Continue()
{
	int nSelfVolume = m_iTargetAmount *4* 100 / _MAX_AMOUNT;
	if(nSelfVolume >140)
		nSelfVolume = 140;
	else
		if(nSelfVolume < 65)
			nSelfVolume = 65;
		DXSetVolume("sound/rain.wav",nSelfVolume,0,0); 
		if(m_iStatu !=  _RAIN_PAUSE)
			return;
		DWORD dwElapseTime = TimeGet() -  m_dwPauseTime;
		DWORD i;
		for(i = 0 ;i<this->m_Rain.size();i++)
			m_Rain[i]->m_dwLifeBeginTime += dwElapseTime;
		m_iStatu = _RAIN_BEGIN;
}


void CRainSys::SetColor(DWORD dwColor)
{
	
	for(DWORD i=0;i<m_Rain.size();i++)			  
		m_Rain[i]->m_dwColor=dwColor;	
	
}

void CRainSys::SetRain(int nWindDir,int nLevel)
{
	
	if(m_iRainAmount != nLevel)
	{
		m_iStatu = _RAIN_RESET;
		m_iTargetAmount = nLevel;
	}
	for(DWORD i=0;i<m_Rain.size();i++)
	{	
		m_Rain[i]->m_fSinA				= SIN[(abs(nWindDir) + rand()%10)/10];
		if(nWindDir < 0)
			m_Rain[i]->m_fSinA = - m_Rain[i]->m_fSinA;
		m_Rain[i]->m_fCosA				= COS[(abs(nWindDir) + rand()%10)/10];
		
	}
	m_nWindDirection = nWindDir; 
}


int CRainSys::RendBMP(DWORD dwColor)
{ 
	return 1;
}
BOOL CRainSys::Create(int nWindDir= 30 ,int nLevel = 200,DWORD dwColor=0x00ffffff)
{
	
	if(nLevel > _MAX_AMOUNT )
		nLevel = _MAX_AMOUNT;
	m_iStatu		= _RAIN_BEGIN;
	m_iRainAmount	= 4;
	m_dwPauseTime	= 0;
	m_dwColor		= dwColor;	
	m_iTargetAmount = nLevel; 	
	m_nWindDirection = nWindDir;	
	for(int i = 0;i<  _MAX_AMOUNT ;i++)
	{
		CRain * rain = new CRain();
		m_Rain.push_back(rain);
	}
	strcpy(m_szFileName[0],"Ripple");
	strcpy(m_szFileName[1],"RippleWater");	
	int nSelfVolume = m_iRainAmount*4 * 100 / _MAX_AMOUNT;
	if(nSelfVolume >140)
		nSelfVolume = 140;
	else
		if(nSelfVolume < 35)
			nSelfVolume = 35;
		DXPlaySound("sound/rain.wav",0,0,0,-1,nSelfVolume); 
		return TRUE;
}

//----------------------------------------------------------------
void CRainSys::Reset(void)
{
	m_iStatu = _RAIN_BEGIN;
	m_iRainAmount	= 4;
	for(DWORD i=0;i<m_Rain.size();i++)
		m_Rain[i]->Reset();
	int nSelfVolume = m_iRainAmount * 4 *100 / _MAX_AMOUNT;
	if(nSelfVolume >140)
		nSelfVolume = 140;
	else
		if(nSelfVolume < 35)
			nSelfVolume = 35;
		DXSetVolume("sound/rain.wav",nSelfVolume,0,0); 
}

//--------------------------------------------------------------

void CRainSys::Process(int & nStatus)
{
	if(m_iStatu == _RAIN_NONE)
		return;
	if(m_iStatu == _RAIN_PAUSE)
		return; 
	for (int i=0;i<this->m_iRainAmount ; i++)
	{
		
		if(this->m_iStatu == _RAIN_BEGIN && m_iRainAmount< m_iTargetAmount)
		{
			int nInternal = m_iRainAmount ;
			if(nInternal >199)
				nInternal = 199;
			nInternal = 200 - nInternal;
			if(nInternal < 100)
				nInternal = 100;
			if(rand()%nInternal == 0)
			{
				m_iRainAmount	+=1;
				int nSelfVolume = m_iRainAmount * 3 *100 / _MAX_AMOUNT;
				if(nSelfVolume >140)
					nSelfVolume = 140;
				else
					if(nSelfVolume < 55)
						nSelfVolume = 55;
					DXSetVolume("sound/rain.wav",nSelfVolume,0,0); 
			}
		}
		else
			if(this->m_iStatu == _RAIN_STOP )
			{
				if(m_iRainAmount >1)
				{
					int nInternal = m_iRainAmount ;
					if(nInternal >199)
						nInternal = 199;
					nInternal = 200 - nInternal;
					if(nInternal < 100)
						nInternal = 100;
					if(rand()%nInternal == 0)
					{
						m_iRainAmount -=1;
						int nSelfVolume = m_iRainAmount *3 *100 / _MAX_AMOUNT;
						if(nSelfVolume >140)
							nSelfVolume = 140;
						else
							if(nSelfVolume < 55)
								nSelfVolume = 55;
							DXSetVolume("sound/rain.wav",nSelfVolume,0,0); 
					}
				}
				else
				{
					Destroy();
					nStatus = 0;
					return ;
				}
			}
			else
			{
				if(this->m_iStatu == _RAIN_RESET)
					if(this->m_iTargetAmount > m_iRainAmount)
					{
							int nInternal = m_iRainAmount ;
							if(nInternal >199)
								nInternal = 199;
							nInternal = 200 - nInternal;
							if(nInternal < 100)
								nInternal = 100;
							if(rand()%nInternal == 0)
							{
								m_iRainAmount	+=1;
								int nSelfVolume = m_iRainAmount * 3 *100 / _MAX_AMOUNT;
								if(nSelfVolume >140)
									nSelfVolume = 140;
								else
									if(nSelfVolume < 55)
										nSelfVolume = 55;
									DXSetVolume("sound/rain.wav",nSelfVolume,0,0); 
							}					 
					}
					else
						if(m_iRainAmount > 2 && this->m_iTargetAmount < m_iRainAmount)
						{
							int nInternal = m_iRainAmount ;
							if(nInternal >199)
								nInternal = 199;
							nInternal = 200 - nInternal;
							if(nInternal < 100)
								nInternal = 100;
							if(rand()%nInternal == 0)
							{
								m_iRainAmount -=1;
								int nSelfVolume = m_iRainAmount * 3 *100 / _MAX_AMOUNT;
								if(nSelfVolume >140)
									nSelfVolume = 140;
								else
									if(nSelfVolume < 55)
										nSelfVolume = 55;
									DXSetVolume("sound/rain.wav",nSelfVolume,0,0); 
							}
						}
			}
						
			if(m_iRainAmount > _MAX_AMOUNT)
				m_iRainAmount = _MAX_AMOUNT;
			if(m_iRainAmount < 0 )
			{
				Destroy();
				nStatus = 0;
				return ;
			}
			
			if(!m_Rain[i]->IsCreated())
			{
				int iPosX;
				if(this->m_nWindDirection >= 0)			 
					iPosX	= rand() % (_SCR_WIDTH +  12* this->m_nWindDirection)  - 12 * this->m_nWindDirection;
				else
					iPosX	= rand() % (_SCR_WIDTH - 12* this->m_nWindDirection)+10; 
				
				int iSceneDeepth;
				if(rand()%2==1)
					iSceneDeepth = rand()%16 + 20;
				else
					iSceneDeepth = rand()%35 + 1 ;
				
				int iPosY		=-10; 
				
				m_Rain[i]->Create(iPosX,iPosY,iSceneDeepth,this->m_nWindDirection ,1,this->m_iTargetAmount,m_dwColor);	
				m_Rain[i]->SetRipple(m_szFileName);
			}
			m_Rain[i]->Process( );						
	}
	return;
}

void CRainSys::RainStop()
{
//	DXCloseSound("sound/rain.wav",0,0);
	this->m_iStatu = _RAIN_STOP;
}

void CRainSys::Destroy()
{
	DXCloseSound("sound/rain.wav",0,0);
	for(DWORD i = 0 ;i<m_Rain.size();i++)	 
		SAFE_DELETE(m_Rain[i]);	
	m_Rain.clear(); 
	this->m_iStatu = _RAIN_NONE;
	
}

//--------------------------------------------------------------








//--------------------------------------------------------------
//沙
//--------------------------------------------------------------

//--------------------------------------------------------------
CSand::CSand(void)
{
	m_iStatus		=_SANDSTATUS_NONE;
	return;
}

//--------------------------------------------------------------
void CSand::Reset(void)
{
	m_iStatus		=_SANDSTATUS_NONE;
}

//--------------------------------------------------------------
int	CSand::GetInt(double dValue)
{
	if((int)(dValue+0.5) > (int)dValue)
		return int(dValue)+1;
	else
		return int(dValue);
}

//--------------------------------------------------------------
BOOL CSand::Create(int iPosX,int iPosY,int iSceneDeepth,int fWind,int fGravity,int nLevel)
{
	
	if(m_iStatus!=_RAINSTATUS_NONE)
		return FALSE;
	
	m_iStatus			=_SANDSTATUS_CREATE;
	m_iStartX			= iPosX;
	m_iStartY			= iPosY;
	m_iSceneDeepth		= iSceneDeepth;
	m_fWind				= fWind;
	
	m_dwLifeBeginTime	=TimeGet();
	m_dwElapseTime		=0;
	m_iSceneDeepth	   %=36;
	
	m_iSize				=4+2*(36-m_iSceneDeepth)/36 ; 
	m_fSpeed			=4+36*m_iSceneDeepth/36; 
	m_fGravity			= 1;
	
	this->m_nLevel = nLevel; 
	
	m_fSinA				= SIN[(abs(m_fWind) + rand()%10)/10];
	if(m_fWind < 0)
		m_fSinA = - m_fSinA;
	
	m_fCosA				= COS[(abs(m_fWind) + rand()%10)/10];
	
	m_dwLifeTime		= 2000 + 10 *abs(m_fSinA)/1000 +rand()%8 ; 
	return TRUE;
}

//--------------------------------------------------------------



void CSand::Show()
{
	if(m_iStatus==_SANDSTATUS_NONE)
		return;
	
	m_dwElapseTime	=TimeGet()-m_dwLifeBeginTime;
	if(m_dwElapseTime >= m_dwLifeTime)
	{			
		m_iStatus			=_SANDSTATUS_NONE;	 
	}
	
	if(m_iStatus==_SANDSTATUS_CREATE)
	{	
		int dOffset		= (m_fSpeed * m_dwElapseTime * 1000  *  10 / 60/1000 ) + (m_fGravity* m_dwElapseTime * 1000/60   * m_dwElapseTime * 1000/60 * 10 /1000 / 1000 /2)  ;// *10
		
		if(dOffset<=0 && m_dwElapseTime)
		{
			m_iStatus	=_SANDSTATUS_NONE;
		}
		else
		{	
			int iX0	=m_iStartX + dOffset*m_fCosA * m_iSize/2 * m_nDir/10/1000 +rand()%50;
			int iY0	=m_iStartY + dOffset*m_fSinA * m_iSize/20/10/1000   - rand()%50;
			int iX1 = iX0 + m_fCosA * m_iSize/2 /1000* m_nDir;
			int iY1 = iY0 - m_fSinA * m_iSize/2/1000 ;
			
			if(this->m_nLevel / (_MAX_AMOUNT/3) <1)
			{			 
				CMyBitmap::ShowLine(iX0,iY0,iX1,iY1, 0xffffff00);
				
				DWORD dwColor = ((150 + m_iSceneDeepth * 2)<< 24) |(225<<16)|(225<<8)|0;
				CMyBitmap::ShowLine(iX0+15* m_nDir,iY0+12,iX1+15* m_nDir,iY1+12, dwColor);
				
				dwColor = ((120 + m_iSceneDeepth * 2)<< 24) |(205<<16)|(205<<8)|0;
				CMyBitmap::ShowLine(iX0+10* m_nDir,iY0+5,iX1+10* m_nDir,iY1+5, dwColor);
				
				dwColor = ((100 + m_iSceneDeepth * 2)<< 24) |(205<<16)|(205<<8)|0;
				CMyBitmap::ShowLine(iX0 + 60 * m_nDir,iY0+10, iX0 + 60 * m_nDir,iY1+11, dwColor);				 
			}
			
			else if(this->m_nLevel /(_MAX_AMOUNT/3)<2)
			{	
				
				CMyBitmap::PrepareLine();
				DWORD dwColor = (120 + m_iSceneDeepth * 2)<< 24;
				dwColor |= 0x00ffad00;
				CMyBitmap::ShowRect(iX0, iY0, iX0 + 1, iY0+1,dwColor );	
				int nOff = rand()% 10 * m_nDir;
				dwColor = (150 + m_iSceneDeepth * 2)<<24 | 0x00ffad00;
				CMyBitmap::ShowRect(iX0 + nOff,  iY0 + nOff, iX0 + 1 + nOff, iY0 + 1 + nOff, dwColor );
				
				CMyBitmap::ShowLine(iX0,iY0,iX1,iY1, 0xffffff00);
				
				dwColor = ((150 + m_iSceneDeepth * 2)<< 24) |(225<<16)|(225<<8)|0;
				CMyBitmap::ShowLine(iX0+15* m_nDir,iY0+12,iX1+15* m_nDir,iY1+12, dwColor);
				
				dwColor = ((120 + m_iSceneDeepth * 2)<< 24) |(205<<16)|(205<<8)|0;
				CMyBitmap::ShowLine(iX0+10* m_nDir,iY0+5,iX1+10* m_nDir,iY1+5, dwColor);
				
				dwColor = ((100 + m_iSceneDeepth * 2)<< 24) |(205<<16)|(205<<8)|0;
				CMyBitmap::ShowLine(iX0 + 60 * m_nDir,iY0+10, iX0 + 60 * m_nDir,iY1+11, dwColor);		
				
			}
			
			
			m_iSplashX	=iX0;
			m_iSplashY	=iY0;
			
		}
	}
	
	
	return;
}
//--------------------------------------------------------------
void CSand::Destroy(void)
{
	return;
}

//--------------------------------------------------------------

void CSand::Process()
{
	Show();
	return;
}


//--------------------------------------------------------------



void CSandSys::Pause()
{
	DXSetVolume("sound/sand.wav",0,0,0); 
	m_iStatu =  _SAND_PAUSE;
	m_dwPauseTime = TimeGet();
	
}
void CSandSys::Continue()
{
	if(m_iStatu !=  _SAND_PAUSE)
		return;
	DWORD dwElapseTime = TimeGet() -  m_dwPauseTime;
	DWORD i;
	for(i = 0 ;i<this->m_Sand.size();i++)
		m_Sand[i]->m_dwLifeBeginTime += dwElapseTime;
	
	int nSelfVolume = m_nLevel * 4 *100 / _MAX_AMOUNT;
	if(nSelfVolume >140)
		nSelfVolume = 140;
	else
		if(nSelfVolume < 20)
			nSelfVolume = 20;
		DXSetVolume("sound/sand.wav",nSelfVolume,0,0); 
		m_iStatu = _SAND_BEGIN;
}

void CSandSys::SetSand(int nWindDir,int nLevel)
{
	if(m_nLevel != nLevel)
	{
		m_iStatu = _SAND_RESET;
		m_nLevel = nLevel;	
	}
	for(DWORD i=0;i<m_Sand.size();i++)
	{	
		
		m_Sand[i]->m_fSinA				= SIN[(abs(nWindDir) + rand()%10)/10];
		if(nWindDir < 0)
			m_Sand[i]->m_fSinA = - m_Sand[i]->m_fSinA;
		m_Sand[i]->m_fCosA				= COS[(abs(nWindDir) + rand()%10)/10];
		
	}
	m_nWindDirection = nWindDir;
}

BOOL CSandSys::Create(int nWindDir= -30 ,int nLevel = 200)
{ 
	
	
	m_dwPauseTime = 0;
	m_iStatu = _SAND_BEGIN;
	m_iSandAmount	= 10;
	if(nLevel > _MAX_AMOUNT)
		nLevel = _MAX_AMOUNT;
	m_nLevel = nLevel;
	
	m_iTargetAmount = m_nLevel; 
	m_nWindDirection = nWindDir;	
	for(int i = 0;i<  _MAX_AMOUNT ;i++)

⌨️ 快捷键说明

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