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

📄 cgamecontent.cpp

📁 fruitwar and engine
💻 CPP
字号:
#include "stdafx.h"

CGameContent::CGameContent( void )
{
	//获取接口
	m_pRS		= (IRenderSystem*)FOXRENDERSYSTEM::GetInstance( CLD_IRENDERSYSTEM );
	m_pResMgr	= (IResManage*)FOXRENDERSYSTEM::GetInstance( CLD_IRESMANAGE );
	m_pSoundMgr	= (ISoundManage*) FOXMEDIASYSTEM::GetInstance( CLD_ISOUNDMANAGE );

	//创建资源
	m_pBg		= m_pResMgr->CreateSprite( "gamebg.spr","SprRes/SprRes.pack" );
	m_pAlpha	= m_pResMgr->CreateSprite( "alpha.spr","SprRes/SprRes.pack" );
	m_pFont		= m_pResMgr->CreateSprite( "font.spr","SprRes/SprRes.pack" );
	m_pScore	= m_pResMgr->CreateSprite( "score.spr","SprRes/SprRes.pack" );

	m_pSoundMgr->LoadMp3( "SoundRes/bg.mp3",SOUND_BG );
	m_pSoundMgr->LoadAudio( "SoundRes/ding.wav",SOUND_DING );
	m_pSoundMgr->LoadAudio( "SoundRes/leaveup.wav",SOUND_LEAVEUP );

	//设置状态,设置为需要初始化状态
	m_dwState	= SCENE_READY;

	//创建精灵角色
	m_pPlayer	= new CPlayer;

	//创建水果管理器
	m_pFruitMgr	= new CFruitMgr;
}

CGameContent::~CGameContent( void )
{
	//释放资源
	m_pSoundMgr->StopAudio( SOUND_BG );
	m_pSoundMgr->StopAudio( SOUND_DING );
	m_pSoundMgr->ReleaseAudio( SOUND_BG );
	m_pSoundMgr->ReleaseAudio( SOUND_DING );
	
	SafeRelease( m_pBg );
	SafeRelease( m_pAlpha );
	SafeRelease( m_pFont );

	//释放精灵
	SafeDelete( m_pPlayer );
	
	//释放接口
	SafeRelease( m_pRS );
	SafeRelease( m_pResMgr );
	SafeRelease( m_pSoundMgr );
}

void CGameContent::Init( void )
{	
	//PLAYER位置
	m_dwTheNum = 3;
	
	//角色初始化
	m_pPlayer->Init( m_pFruitMgr );

	//水果管理器初始化
	m_pFruitMgr->Init();

	//播放背景音乐
	m_pSoundMgr->PlayAudio( SOUND_BG );	

	//设置最后时间
	m_dwLastTime	 = timeGetTime();

	m_dwLastAddTime	 = timeGetTime();

	m_dwLastScore	 = 0;

	m_dwLimitTime	 = 5000;
}

bool CGameContent::Updata( void )
{
	if( m_dwState == SCENE_READY )
	{
		//进行初始化
		m_dwState = SCENE_LOOP;
		this->Init();
	}

	while( m_dwState == SCENE_LOOP )
	{
		//检查是否为退出消息
		if( CScene::Updata() == false )
		{
			return false;
		}
		//逻辑层更新
		if( timeGetTime() - m_dwLastTime > GAME_FPSLIMIT )
		{
			//检验是否播放结束
			if( !m_pSoundMgr->GetIsPlay( SOUND_BG ) )
			{
				//重新播放
				m_pSoundMgr->SetMp3Pos( SOUND_BG,0 );
			}
			if( timeGetTime() - m_dwLastAddTime > m_dwLimitTime )
			{
				//添加一层水果
				m_pFruitMgr->AddStageFruit();
				m_dwLastAddTime = timeGetTime();
			}

			//更新
			if( m_pFruitMgr->Updata() == false )
			{
				//GAME OVER
				//修改状态为准备
				CGameContent::m_dwState = SCENE_END;
				CGameOver::SetState( SCENE_READY );
				CGameOver::SetScore( m_pFruitMgr->GetScore() );
				//停止播放音乐
				m_pSoundMgr->StopAudio( SOUND_BG );
			}
			
			//重新计算时间
			m_dwLastTime = timeGetTime();
		}
		//渲染
		this->Render();
	}

	return true;
}

void CGameContent::Render( void )
{
	//场景开始
	m_pRS->BeginScene();

	//绘制背景
	m_pBg->SetPostion( 0,0 );
	m_pBg->Draw( false );

	//绘制ALPHA
	m_pAlpha->SetPostion( 29 + m_dwTheNum*36,50 );
	m_pAlpha->SetAlpha( 90 );
	m_pAlpha->Draw( false );

	//绘制水果
	m_pFruitMgr->Draw();

	//绘制人物
	m_pPlayer->Draw();
	
	//绘制分数
	this->DrawScore();

	//场景结束
	m_pRS->EndScene();
}

void CGameContent::SetState( DWORD a_dwState )
{
	m_dwState = a_dwState;
}

DWORD CGameContent::GetState( void )
{
	return m_dwState;
}

DWORD CGameContent::m_dwState;

void CGameContent::PostMessage( DWORD a_dwMsg,char a_chWORD )
{
	if( CGameContent::m_dwState != SCENE_LOOP )
	{
		return;
	}
	
	if( a_dwMsg == WM_KEYDOWN && m_dwTheNum > 0 && a_chWORD == VK_LEFT )
	{
		m_dwTheNum --;
		m_pPlayer->Left();
		//播放
		m_pSoundMgr->PlayAudio( SOUND_DING );
	}
	if( a_dwMsg == WM_KEYDOWN && m_dwTheNum < 7 && a_chWORD == VK_RIGHT )
	{
		m_dwTheNum ++;
		m_pPlayer->Right();
		//播放
		m_pSoundMgr->PlayAudio( SOUND_DING );
	}
	if( a_dwMsg == WM_KEYDOWN && a_chWORD == VK_DOWN )
	{
		m_pPlayer->AddFruit();
	}
	if( a_dwMsg == WM_KEYDOWN && a_chWORD == VK_UP )
	{
		m_pPlayer->ReleaseFruit();
	}
}

void CGameContent::DrawScore( void )
{
	DWORD dwScore = m_pFruitMgr->GetScore();

	if( dwScore - m_dwLastScore > 100 )
	{
		//每增加100分,下降速度上升0.25
		m_dwLimitTime = m_dwLimitTime - 250;
		m_dwLastScore = dwScore;
		m_pSoundMgr->PlayAudio( SOUND_LEAVEUP );
	}
	
	char chScore[8];
	memset( chScore,'a',sizeof(char)*8 );
	sprintf( chScore,"%d",dwScore );
	
	//绘制标签
	m_pScore->Draw( false );
	//绘制数字
	for( int i=7;i>=0;i-- )
	{
		if( chScore[i] != 'a' && chScore[i] != '\0')
		{
			char ch = chScore[i];
			m_pFont->SetCurrentNum( atoi(&ch) );
			m_pFont->SetPostion( i*18+78,2 );
			m_pFont->Draw( false );
		}
	}
}

⌨️ 快捷键说明

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