11 C++¿Î³ÌÉè¼Æ_Ì«¿ÕÕ½»ú ÏÂÔØ±¾ÎÄ

{

((CEnemyFighter *)pSprite)->LoopTick(fDeltaTime); }}

17¡¢ÔÚGameEndÖÐÌí¼Ó´úÂ룬Çå¿ÕËùÓо«Á飬ÏÔʾ¿Õ¸ñ¿ªÊ¼¡£

m_pBeginSprite->SetSpriteVisible(true); m_SpriteList.DeleteAllSprite(true); m_pMyFighter->SetSpriteVisible(false); delete m_pMyFighter; m_pMyFighter = NULL;

ʵÑéÎå Ìí¼ÓÅöײ¼ì²â

¡¾ÊµÑéÄÚÈÝ¡¿

1¡¢´´½¨Ò»¸ö¾«Á鸸ÀàCGameSprite£»

2¡¢½«Õ½»úÀàºÍ×Óµ¯Àà¸ÄΪ¼Ì³ÐÓÚCGameSpriteÀࣻ

3¡¢ÎªÓÎÏ·Öеľ«ÁéÌí¼ÓHPÊôÐÔ£¬²¢Îª×Óµ¯Ìí¼ÓÆÆ»µÁ¦µÄÊôÐÔ¡£ 4¡¢CGameSpriteÀàÌí¼Ó¼ì²âÅöײµÄÐ麯Êý£¬²¢ÔÚ¸÷×ÓÀàÖÐʵÏÖ£» 5¡¢µ±Íæ¼ÒÕ½»úµÄHPֵСÓÚ0ÊÇÓÎÏ·½áÊø¡£

¡¾ÊµÑé˼·¡¿

¼ì²âÅöײʱ£¬ÎÒÃÇÏÈ»ñÈ¡ÅöײµÄË«·½£¬È»ºóÔÙ½«Æä¸÷×Ô×öÅöײ¼ì²â¡£²¢ÇÒ²úÉúÅö×²ÌØÐ§£¬ÊÇÓÎÏ·¿´ÆðÀ´¸ü¼Ó±ÆÕæ¡£ÓÃÐ麯ÊýµÄ·½Ê½ÊµÏÖ¶à̬¡£

¡¾ÊµÑéÖ¸µ¼¡¿

1¡¢·ÖÎöÎÒ·½Õ½»úÀà¡¢µÐ·½Õ½»úÀà¡¢×Óµ¯ÀàµÄ¹²Í¬ÌØÐÔ£¬ÎÒÃÇÌáÈ¡ËüÃǵÄÕâЩ¹²ÐÔ£¬´´

½¨ËüÃǵĸ¸ÀàCGameSpriteÀ࣬ʹµÃÎÒ·½Õ½»ú¡¢µÐ·½Õ½»úºÍ×Óµ¯Àà¶¼¼Ì³ÐÓÚCGameSpriteÀà¡£·ÂÕÕÉϱ߷½·¨´´½¨CGameSpriteÀࣺ

class CGameSprite : public CSprite { private: public:

CGameSprite( const char *szName ); virtual ~CGameSprite() { };

};

×¢ÒâÐ޸Ĺ¹Ô캯Êý¡£

2¡¢ÎªCGameSpriteÀàÌí¼ÓÉúÃüÖµ¡¢ÅöÉϵз½£¬¸øµÐ·½Ôì³ÉµÄÉ˺¦ÖµºÍ»÷»Ù±¾Sprite½«

»ñµÃµÄ»ý·ÖÖµÒÔ¼°¾«ÁéÀàÐÍ¡£²¢ÎªÕâËĸö¸öÊôÐÔÌí¼ÓSetºÍGet·½·¨

int m_iHp; int m_iDamage; int m_iScore; int m_iType;

3¡¢Ìí¼ÓIsDead·½·¨¡£µ±m_iHpСÓÚµÈÓÚ0ʱ£¬¾«ÁéΪËÀÍö״̬¡£

boolIsDead(){ return ( GetHp() <= 0 ); }

4¡¢Ìí¼ÓIsMyBullet£¬·½·¨ÅжÏ×Óµ¯ÊÇË­·¢ÉäµÄ¡£

// ×Óµ¯ÀàרÓú¯Êý.ÅжÏ×Óµ¯ÊÇÄÄ·½·¢ÉäµÄ

16

ÉϺ£Èñ¸ñÈí¼þÓÐÏÞ¹«Ë¾ virtual boolIsMyBullet() { return false; } 5¡¢Ìí¼ÓIsMyFighter£¬ÅжÏÊÇ·ñΪÎÒ·½Õ½»ú¡£

virtual boolIsMyFighter(){ return false; }

6¡¢Ìí¼ÓÐ麯ÊýOnColOtherSprite£¬´¦Àí¾«ÁéÖ®¼äµÄÅöײ¡£

virtual voidOnColOtherSprite( CGameSprite *pOther );

7¡¢½«CBullet¡¢CMyFighterºÍCEnemyFighterÈý¸öÀàµÄ¸¸Àà¸ÄΪCGameSprite¡£ ×¢ÒâÐèÒªÐ޸ĸ÷×ԵĹ¹Ô캯Êý²¢°üº¬Í·Îļþ: #include\8¡¢ÐÞ¸ÄCSpriteListÀàÖеĺ¯Êý²ÎÊýÒÔ¼°·µ»ØÖµ£¬½«Ô­ÏÈËùÓеÄCSprite * ¸ü¸ÄΪ

CGameSprite *£»²¢½«½á¹¹ÌåÖеÄCSprite * pSprite£» ¸ÄΪCGameSprite * pSprite; 9¡¢ÔÚCMyFightÖÐÌí¼Óº¯Êý£º

bool IsMyFighter(){ return true; }

ÔÚCGameMainµÄGameInitº¯ÊýÖÐÌí¼Ó´úÂë³õʼ»¯Êý¾Ý£¬ÔÚGameInitº¯Êý×îºóÌí¼Ó´úÂ룺

m_pControlSprite->SetHp( 500 ); m_pControlSprite->SetScore( 0 );

m_pControlSprite->SetCanFire( true );

10¡¢ÔÚCGameMainÖÐÌí¼Óͨ¹ýË÷ÒýÖµ»òÕßÃû×Ö»ñÈ¡¾«ÁéµÄÁ½¸öº¯Êý£¬£º

CGameSprite *CGameMain::GetSprite( const int iIndex ) {

return m_SpriteList.GetSprite(iIndex); }

CGameSprite *CGameMain::GetSprite( const char *szName ) {

return m_SpriteList.GetSprite(szName); } 11¡¢ÎªCBulletÌí¼ÓOnColOtherSprite·½·¨£¬²¢ÊµÏÖ´Ë·½·¨¡£

void CBullet::OnColOtherSprite( CGameSprite *pOther )

{

if( NULL == pOther ) return; if(IsMyBullet () ) {

if( pOther->IsMyFighter () ) return;

SetHp( GetHp() - pOther->GetDamage() ); } else {

if( pOther->IsMyFighter () || pOther->IsMyBullet () ) {

SetHp( GetHp() - pOther->GetDamage() ); }

17

} }

×¢ÒâÒòΪÓõ½È«¾Ö¶ÔÏóg_GameMain£¬ËùÒÔÐèÒªÉùÃ÷Í·Îļþ£¬µÚ10²½Í¬£º #include\

12¡¢ÔÚCGameMainÖÐÌí¼Óº¯Êý£¬»ñÈ¡¿ØÖƵľ«Áé¶ÔÏó¡£

ÔÚLessonX.hÖÐÉùÃ÷£º CMyFight * GetMyFight(); ÔÚLessonX.cppÖÐÌí¼Ó¶¨Ò壺

CMyFight * CGameMain::GetMyFight() {

if (NULL != m_pMyFighter) {

return m_pMyFighter; } }

13¡¢ÎªCMyFightrÌí¼ÓOnColOtherSprite·½·¨£¬²¢ÊµÏÖ´Ë·½·¨¡£

void CMyFight::OnColOtherSprite( CGameSprite *pOther ) {

if( NULL == pOther ) return;

if( pOther-> IsMyBullet () ) return;

SetHp( GetHp() - pOther->GetDamage() ); if( GetHp() <= 200 ) {

SetSpriteColorGreen( 0 ); SetSpriteColorBlue( 0 ); }

else if( GetHp() <= 500 ) {

SetSpriteColorGreen( 128 ); SetSpriteColorBlue( 128 ); } else {

SetSpriteColorGreen( 255 ); SetSpriteColorBlue( 255 ); }

//¸üлý·ÖÏÔʾ

g_GameMain.GetMyFight()->SetScore( g_GameMain.GetMyFighter()->GetScore() +

pOther->GetScore() );

}

14¡¢ÎªCEnemyFighterÌí¼ÓOnColOtherSprite·½·¨£¬²¢ÊµÏÖ´Ë·½·¨¡£

18

ÉϺ£Èñ¸ñÈí¼þÓÐÏÞ¹«Ë¾ void CEnemyFighter::OnColOtherSprite( CGameSprite *pOther ) {

if( NULL == pOther ) return;

if( pOther-> IsMyFighter () || pOther-> IsMyBullet () ) {

SetHp( GetHp() - pOther->GetDamage() ); if (IsDead()) {

g_GameMain.GetMyFight()->SetScore(g_GameMain.GetMyFight()->GetScore() GetScore());

} } }

+

15¡¢ÔÚCGameMainÀàÖÐÌí¼Óº¯Êý£¬Í¨¹ýÃû×ÖÅжÏÊÇ·ñÊÇÎÒ·½Ì¹¿Ë£º

bool CGameMain::IsMyFighter( const char *szName ) {

return (strcmp( m_ pMyFighter ->GetName(), szName ) == 0); }

16¡¢µÄOnSpriteColSprite·½·¨ÖÐÌí¼ÓÅöײ¼ì²â¡£

voidCGameMain::OnSpriteColSprite( const char *szSrcName, const char *szTarName ) {

if( 2 != GetGameState() ) return;

CGameSprite*pSrcSprite =IsMyFighter

GetSprite( szSrcName );

CGameSprite *pTarSprite=IsMyFighter

GetSprite( szTarName );

if( NULL == pSrcSprite || NULL == pTarSprite ) return;

pSrcSprite->OnColOtherSprite( pTarSprite ); pTarSprite->OnColOtherSprite( pSrcSprite );

if( !pSrcSprite-> IsMyFighter () ) {

if( pSrcSprite->IsDead() )

g_GameMain.DeleteSprite( pSrcSprite, true ); }

if( !pTarSprite-> IsMyFighter () ) {

if( pTarSprite->IsDead() )

19

(szSrcName (szTarName

) )

? ?

m_pMyFighter m_pMyFighter

::