📄 cfruitmgr.cpp
字号:
#include "stdafx.h"
CFruitMgr::CFruitMgr( void )
{
//获取接口
m_pResMgr = (IResManage*)FOXRENDERSYSTEM::GetInstance( CLD_IRESMANAGE );
m_pSoundMgr = (ISoundManage*) FOXMEDIASYSTEM::GetInstance( CLD_ISOUNDMANAGE );
//创建资源
m_pFruit = m_pResMgr->CreateSprite( "fruit.spr","SprRes/SprRes.pack" );
//读取音乐
m_pSoundMgr->LoadAudio( "SoundRes/bomb.wav",SOUND_BOMB );
m_pSoundMgr->LoadAudio( "SoundRes/viny.wav",SOUND_ADD );
m_pSoundMgr->LoadAudio( "SoundRes/hurry.wav",SOUND_HURRY );
}
CFruitMgr::~CFruitMgr( void )
{
//释放资源
SafeRelease( m_pFruit );
m_pSoundMgr->ReleaseAudio( SOUND_BOMB );
m_pSoundMgr->ReleaseAudio( SOUND_ADD );
//释放接口
SafeRelease( m_pResMgr );
SafeRelease( m_pSoundMgr );
}
void CFruitMgr::Init( void )
{
m_dwScore = 0;//分数为0
//初始化
srand( timeGetTime() );
for( int x=0;x<8;x++ )
{
for( int y=0;y<13;y++ )
{
m_dwFruitState[y][x].m_dwFruitID = -1;
m_dwFruitState[y][x].m_dwState = FRUIT_STATE_NULL;
m_dwFruitState[y][x].m_dwX = 0;
m_dwFruitState[y][x].m_dwY = 0;
m_dwFruitState[y][x].m_dwDestY = 0;
m_dwFruitState[y][x].m_dwAlpha = 255;
}
}
for( x=0;x<8;x++ )
{
for( int y=0;y<5;y++ )
{
m_dwFruitState[y][x].m_dwFruitID = rand() % 5;
m_dwFruitState[y][x].m_dwState = FRUIT_STATE_NEW;
m_dwFruitState[y][x].m_dwX = 45 + x*36;
m_dwFruitState[y][x].m_dwY = 80 + y*24;
m_dwFruitState[y][x].m_dwDestY = 80 + y*24;
m_dwFruitState[y][x].m_dwAlpha = 0;
}
}
}
bool CFruitMgr::Updata( void )
{
//检测状态
if( this->Test() == false )
{
return false;//GAME OVER
}
//水果状态变化
for( int x=0;x<8;x++ )
{
for( int y=0;y<13;y++ )
{
//新的水果
if( m_dwFruitState[y][x].m_dwState == FRUIT_STATE_NEW )
{
m_dwFruitState[y][x].m_dwAlpha += 5;
if( m_dwFruitState[y][x].m_dwAlpha > 254 )
{
m_dwFruitState[y][x].m_dwAlpha = 255;
//状态改成常态
m_dwFruitState[y][x].m_dwState = FRUIT_STATE_OLD;
}
}
//向上
if( m_dwFruitState[y][x].m_dwState == FRUIT_STATE_UP )
{
m_dwFruitState[y][x].m_dwY -= 400;
if( m_dwFruitState[y][x].m_dwY <= m_dwFruitState[y][x].m_dwDestY ||
m_dwFruitState[y][x].m_dwY > 1000 )
{
m_dwFruitState[y][x].m_dwY = m_dwFruitState[y][x].m_dwDestY;
//状态改成需要检测的状态
m_dwFruitState[y][x].m_dwState = FRUIT_STATE_TEST;
}
}
//向下
if( m_dwFruitState[y][x].m_dwState == FRUIT_STATE_DOWN )
{
m_dwFruitState[y][x].m_dwY += 250;
if( m_dwFruitState[y][x].m_dwY >= m_dwFruitState[y][x].m_dwDestY )
{
m_dwFruitState[y][x].m_dwY = m_dwFruitState[y][x].m_dwDestY;
//状态改成空
m_dwFruitState[y][x].m_dwState = FRUIT_STATE_NULL;
}
}
//死亡状态
if( m_dwFruitState[y][x].m_dwState == FRUIT_STATE_END )
{
m_dwFruitState[y][x].m_dwAlpha -= 5;
if( m_dwFruitState[y][x].m_dwAlpha > 255 )
{
m_dwFruitState[y][x].m_dwAlpha = 0;
//状态改成空
m_dwFruitState[y][x].m_dwState = FRUIT_STATE_NULL;
}
}
}
}
return true;
}
void CFruitMgr::Draw( void )
{
//渲染
for( int x=0;x<8;x++ )
{
for( int y=0;y<13;y++ )
{
if( m_dwFruitState[y][x].m_dwState != FRUIT_STATE_NULL )
{
m_pFruit->SetCurrentNum( m_dwFruitState[y][x].m_dwFruitID );
m_pFruit->SetAlpha( m_dwFruitState[y][x].m_dwAlpha );
m_pFruit->SetPostion( m_dwFruitState[y][x].m_dwX,m_dwFruitState[y][x].m_dwY );
m_pFruit->Draw( true );
}
}
}
}
FruitState* CFruitMgr::GetState( DWORD a_dwX,DWORD a_dwY )
{
return &m_dwFruitState[a_dwY][a_dwX];
}
bool CFruitMgr::Test( void )
{
//销毁处理
int x,y,yy;
DWORD dwNum;//连续的数量
for( x=0;x<8;x++ )
{
dwNum = 0;
DWORD dwFruitID = -1;
for( y=12;y>=0;y-- )
{
if( (m_dwFruitState[y][x].m_dwState != FRUIT_STATE_TEST) &&
(m_dwFruitState[y][x].m_dwState != FRUIT_STATE_NULL) )
{
break;
}
if( m_dwFruitState[y][x].m_dwState == FRUIT_STATE_TEST )
{
dwNum++;
dwFruitID = m_dwFruitState[y][x].m_dwFruitID;
for( yy=y-1;yy>=0;yy-- )
{
if( (m_dwFruitState[yy][x].m_dwState != FRUIT_STATE_END) &&
(m_dwFruitState[yy][x].m_dwState != FRUIT_STATE_NULL) &&
(m_dwFruitState[yy][x].m_dwFruitID == dwFruitID) )
{
dwNum++;
}
else
{
break;
}
}
if( dwNum > 2 )
{
this->DealWith( dwNum,x,y-dwNum+1 );
}
break;
}
}
}
//把仍旧是test标签的,改成old
for( x=0;x<8;x++ )
{
for( y=12;y>=0;y-- )
{
if( m_dwFruitState[y][x].m_dwState == FRUIT_STATE_TEST )
{
m_dwFruitState[y][x].m_dwState = FRUIT_STATE_OLD;
}
}
}
//检验是否GAME OVER,条件为13楼是否已经占有
for( x=0;x<8;x++ )
{
if( (m_dwFruitState[12][x].m_dwState == FRUIT_STATE_OLD ||
m_dwFruitState[12][x].m_dwState == FRUIT_STATE_NEW) &&
m_dwFruitState[0][x].m_dwState != FRUIT_STATE_NEW )
{
m_pSoundMgr->StopAudio( SOUND_HURRY );
return false;//宣布GAME OVER
}
}
//检验是否处于危险阶段,条件为11楼时候为危险状态
for( x=0;x<8;x++ )
{
if( m_dwFruitState[10][x].m_dwState == FRUIT_STATE_OLD ||
m_dwFruitState[10][x].m_dwState == FRUIT_STATE_NEW )
{
if( !m_pSoundMgr->GetIsPlay( SOUND_HURRY ) )
{
m_pSoundMgr->PlayAudio( SOUND_HURRY );
}
break;//宣布危险状态
}
}
return true;
}
bool CFruitMgr::DealWith( DWORD a_dwNum,DWORD a_dwX,DWORD a_dwY )
{
DWORD dwFruitID = m_dwFruitState[a_dwY][a_dwX].m_dwFruitID;
for( int y=a_dwY;y<a_dwNum + a_dwY;y++ )
{
//销毁水果
m_dwFruitState[y][a_dwX].m_dwState = FRUIT_STATE_END;
m_dwFruitState[y][a_dwX].m_dwAlpha = 255;
//计算分数
m_dwScore ++ ;
//声音播放
m_pSoundMgr->PlayAudio( SOUND_BOMB );
//检测左边
if( a_dwX > 0 )
{
for( int x=a_dwX-1;x>=0;x-- )
{
//寻找到点
if( (m_dwFruitState[y][x].m_dwFruitID == dwFruitID) &&
(m_dwFruitState[y][x].m_dwState != FRUIT_STATE_NULL ) )
{
for( int yy=y;yy<13;yy++ )
{
//消除
if( m_dwFruitState[yy][x].m_dwState != FRUIT_STATE_NULL )
{
m_dwFruitState[yy][x].m_dwState = FRUIT_STATE_END;
m_dwFruitState[yy][x].m_dwAlpha = 255;
//计算分数
m_dwScore ++;
}
}
}
//碰到不相同点
else
{
//退出
break;
}
}
}
//检测右边
if( a_dwX < 8 )
{
for( int x=a_dwX+1;x<8;x++ )
{
//寻找到点
if( m_dwFruitState[y][x].m_dwFruitID == dwFruitID &&
( m_dwFruitState[y][x].m_dwState != FRUIT_STATE_NULL) )
{
for( int yy=y;yy<13;yy++ )
{
//消除
if( m_dwFruitState[yy][x].m_dwState != FRUIT_STATE_NULL )
{
m_dwFruitState[yy][x].m_dwState = FRUIT_STATE_END;
m_dwFruitState[yy][x].m_dwAlpha = 255;
//计算分数
m_dwScore ++;
}
}
}
//碰到不相同点
else
{
//退出
break;
}
}
}
}
return true;
}
void CFruitMgr::AddStageFruit( void )
{
for( int x=0;x<8;x++ )
{
for( int y=12;y>0;y-- )
{
m_dwFruitState[y][x].m_dwFruitID = m_dwFruitState[y-1][x].m_dwFruitID;
m_dwFruitState[y][x].m_dwState = m_dwFruitState[y-1][x].m_dwState;
m_dwFruitState[y][x].m_dwX = 45 + x*36;
m_dwFruitState[y][x].m_dwY = 80 + y*24;
m_dwFruitState[y][x].m_dwDestY = 80 + y*24;
m_dwFruitState[y][x].m_dwAlpha = m_dwFruitState[y-1][x].m_dwAlpha;
}
}
for( x=0;x<8;x++ )
{
m_dwFruitState[0][x].m_dwFruitID = rand() % 5;
m_dwFruitState[0][x].m_dwState = FRUIT_STATE_NEW;
m_dwFruitState[0][x].m_dwX = 45 + x*36;
m_dwFruitState[0][x].m_dwY = 80;
m_dwFruitState[0][x].m_dwDestY = 80;
m_dwFruitState[0][x].m_dwAlpha = 0;
}
//播放声音
m_pSoundMgr->PlayAudio( SOUND_ADD );
}
DWORD CFruitMgr::GetScore( void )
{
return m_dwScore;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -