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

📄 csplash.cpp

📁 我在资源网上发布的一个brickshorterjr的代码
💻 CPP
字号:
#include	"CSplash.h"
#include	"g_info.h"

static	const	char	BrickName[][256] = {	"Red",
												"Blue",
												"Green",
												"Skyyellow",
												"Yellow",
												"Gray",
												"Cyan",
												"Pink"
											};


CSplashBrick::CSplashBrick( HGE *hgeEngine , hgeResourceManager *resMgr )
{
	m_hgeEngine    =  hgeEngine;
	m_resMgr       =  resMgr;
	m_SplashBrick  =  NULL;
		
	m_x            =  0;
	m_y            =  0;
	m_vx           =  0;
	m_vy           =  0;
	m_color        =  0;
	m_state        =  0;
	m_direction    =  0;
	m_exist        =  false;
}

bool    CSplashBrick::Init()
{
	m_direction  =  rand()%4;
	m_color  =  rand()%SplashBrickTypeCount;
	m_state  =  rand()%SplashBrickStateCount;
	
	switch( m_direction )
	{
	case SPLASH_RIGHT:
		m_x   =  0;
		m_vx  =  rand()%300 + 300;
		
		m_y   =  rand()%WINDOW_HEIGHT;
		m_vy  =  0;
		break;

	case SPLASH_LEFT:
		m_x   =  WINDOW_WIDTH;
		m_vx  =  -(rand()%300 + 300);
		
		m_y   =  rand()%WINDOW_HEIGHT;
		m_vy  =  0;
		break;	
	
	case SPLASH_UP:
		m_x   =  rand()%WINDOW_WIDTH;
		m_vx  =  0;
		
		m_y   =  WINDOW_HEIGHT;
		m_vy  =  -(rand()%300 + 300);
		break;		
	
	case SPLASH_DOWN:
		m_x   =  rand()%WINDOW_WIDTH;
		m_vx  =  0;
		
		m_y   =  WINDOW_HEIGHT;
		m_vy  =  rand()%300 + 300;
		break;				
	}

	char	name[64] = {0};
	sprintf( name, "%s%d", BrickName[m_color], m_state );
	m_SplashBrick  =  m_resMgr->GetSprite( name );

	return true;
}

void    CSplashBrick::Release()
{
	
}

bool    CSplashBrick::Update()
{
	if( !m_exist )
		return false;

	float dt = m_hgeEngine->Timer_GetDelta();

	m_x += m_vx * dt;
	m_y += m_vy * dt;
	
	switch( m_direction )
	{
	case SPLASH_RIGHT:
		if( m_x > WINDOW_WIDTH )
		{
			m_exist  =  false;
			return true;
		}
		break;
	case SPLASH_LEFT:
		if( m_x < 0 )
		{
			m_exist  =  false;
			return true;
		}
		break;
	case SPLASH_UP:
		if( m_y < 0 )
		{
			m_exist  =  false;
			return true;
		}
		break;
	case SPLASH_DOWN:
		if( m_y > WINDOW_HEIGHT )
		{
			m_exist  =  false;
			return true;
		}
		break;			
	}

	return false;
}

void    CSplashBrick::Render()
{
	m_SplashBrick->Render( m_x, m_y );	
}






//=========================================================================
//	Name:CSplash
//	Desc:Constructors
//
//=========================================================================
CSplash::CSplash( HGE *hgeEngine , hgeResourceManager *resMgr )
{
	m_hgeEngine  =  hgeEngine;
	m_resMgr     =  resMgr;
	m_render     =  NULL;

	m_SplashBrick.clear();

	m_ExplState  =  false;
	m_beginTime  =  m_hgeEngine->Timer_GetTime();

	m_SplashBomb   =  NULL;
	m_SplashExpl   =  NULL;

	m_SplashchlBomb = NULL;
}


//=========================================================================
//	Name:Init
//	Desc:Init the Splash's data
//
//=========================================================================
bool    CSplash::Init()
{		
	m_render     =  new  CRender( m_hgeEngine , m_resMgr );
	m_render->Init();

	m_render->AddSplashPar( SPLASH_BOMB );

	m_SplashBomb  =  m_resMgr->GetEffect( "splashSndBomb" );
	m_SplashExpl  =  m_resMgr->GetEffect( "splashSndExpl" );
	
	m_SplashchlBomb = m_hgeEngine->Effect_PlayEx( m_SplashBomb, 50, 0, 1, true );

	return true;
}

//=========================================================================
//	Name:Release
//	Desc:
//
//=========================================================================
void    CSplash::Release()
{
	//delete the render
	if( m_render != NULL )
		m_render->Release();
	SAFE_DELETE( m_render );
	
	if( !m_SplashBrick.empty() )
	{
		for( list<CSplashBrick*>::iterator i = m_SplashBrick.begin();  i != m_SplashBrick.end(); i++ )
		{
			(*i)->Release();
			SAFE_DELETE( (*i) );
			i = m_SplashBrick.erase( i );
		}
	}
}


//=========================================================================
//	Name:Update
//	Desc:Update the Splash's data
//
//=========================================================================
bool    CSplash::Update()
{
	if( !m_ExplState && m_hgeEngine->Input_GetKey() != 0 )
	{
		m_ExplState = true;
		m_beginTime = m_hgeEngine->Timer_GetTime();
		m_render->AddSplashPar( SPLASH_EXPL );

		m_hgeEngine->Channel_Stop( m_SplashchlBomb );
		
		m_hgeEngine->Effect_PlayEx( m_SplashExpl, 80, 0, 1 );

	}

	if( m_ExplState && m_hgeEngine->Timer_GetTime() - m_beginTime > 2 )
	{
		this->Render( *m_render->GetSaveTargetSave() );
		m_render->SaveToTextureSave();
		return true;
	}

	if( rand()%100 > 93  && m_SplashBrick.size() < 20 )
	{
		CSplashBrick *splashBrick  =  new  CSplashBrick( m_hgeEngine , m_resMgr );
		splashBrick->Init();
		splashBrick->Play();
		m_SplashBrick.push_back(splashBrick);
	}

	if( !m_SplashBrick.empty() )
	{
		for( list<CSplashBrick*>::iterator i = m_SplashBrick.begin();  i != m_SplashBrick.end(); i++ )
		{
			if( (*i)->IsAlive() )
			{
				(*i)->Update();
			}
			else
			{
				(*i)->Release();
				SAFE_DELETE( (*i) );
				i = m_SplashBrick.erase( i );
			}
		}
	}

	return false;
}

//=========================================================================
//	Name:Render
//	Desc:Render the Splash
//
//=========================================================================
void    CSplash::Render( HTARGET target )
{
	if( target == 0 )
	{
		m_hgeEngine->Gfx_BeginScene();
	}
	else
	{
		m_hgeEngine->Gfx_BeginScene( target );
	}

	m_hgeEngine->Gfx_Clear( 0 );
	
	m_render->RenderSplashBack();
	
	if( !m_SplashBrick.empty() )
	{
		for( list<CSplashBrick*>::iterator i = m_SplashBrick.begin();  i != m_SplashBrick.end(); i++ )
		{
			(*i)->Render();
		}
	}
	
	m_render->RenderSplashWord();
	m_render->RenderPar();
	
	m_hgeEngine->Gfx_EndScene();
}

⌨️ 快捷键说明

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