ÔÆÌ⺣ - רҵÎÄÕ·¶ÀýÎĵµ×ÊÁÏ·ÖÏíÆ½Ì¨

µ±Ç°Î»ÖãºÊ×Ò³ > 03FunCodeÓÎÏ·Éè¼Æ+C++¿Î³ÌÉè¼Æ - ƴͼÓÎÏ·

03FunCodeÓÎÏ·Éè¼Æ+C++¿Î³ÌÉè¼Æ - ƴͼÓÎÏ·

  • 62 ´ÎÔĶÁ
  • 3 ´ÎÏÂÔØ
  • 2025/6/5 2:41:34

µô¡°¿Õ¸ñ¿ªÊ¼¡±¾«Áé¡£ÔÚ²½Öè2µÄº¯ÊýÀïÃæÌí¼ÓÏÂÃæµÄ´úÂ룺

if( KEY_SPACE == iKey && 0 == m_iGameState ) {

}

m_iGameState =

1;

// Òþ²ØÌáʾ¿ªÊ¼ÎÄ×Ö

m_spGameBegin->SetSpriteVisible(0);

4¡¢ ½øÈëMain.cppº¯ÊýÀïÃæ£¬½«ÏµÍ³²¶»ñµ½µÄ¼üÅ̰´ÏÂÏûÏ¢µÄ²ÎÊý´«¸øÎÒÃÇ×Ô¶¨ÒåµÄº¯

Êý£¬ÐèÒªÔÚOnKeyDownº¯ÊýÀïÃæÌí¼ÓÏÂÃæÒ»ÐдúÂ룺

g_GameMain.OnKeyDown(iKey,bAltPress,bShiftPress,bCtrlPress);

ÖÁ´Ë£¬±¾ÊµÑé½áÊø¡£

ʵÑéÈý ³õʼ»¯Ëæ»úÏÔʾ·½¿é

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

²½ÖèÒ»¡¢Ìí¼ÓÒ»¸ö4x4µÄ¶þάÊý×飬½«Í¼°¸·Ö³É15·Ý£¬Ëæ»ú°Ú·Å£¬Ê£ÏÂÒ»¸öλÖÃÁô¿Õ£¬ÓÃÓÚÒÆ¶¯·½¿é¡£

¡¾ÊµÑé˼·¡¿

ÓÎÏ·µÄÔ­ÀíÊÇÔÚÒ»¸ö4 * 4µÄ·½¿é¾ØÕó(¶þάÊý×é)£¬Ç°15¸öµÄÖµ°´Ë³Ðò´Ó1-15ÒÀ´ÎµÝÔö£¬µÚ16¸öÁô¿Õ£¬ÎÒÃÇÉèÖÃΪһ¸öÃû³ÆÎª¡°NULL¡±µÄ¾«Áé¡£°´ÕÕÕâ¸ö˳ÐòÅÅÁеľØÕóÖµ´ú±íÓÎϷʤÀû¡£

¾«ÁéÃû³ÆÒÀ´ÎÊÇPictureBlock1£¬PictureBlock2¡­PictureBlock15¡£Òò´Ë£¬³õʼ»¯µÄʱºò£¬ÓÃÒ»¸öÊý×éiRandData˳Ðò±£´æ1µ½15£¬¶ÔÓ¦±íʾ15¸ö·½¿é¾«Áé¡£ÔÙÓÃÒ»¸ö¶þάÊý×ém_iBlockState[4][4]±íʾÕâ16¸öλÖá£

ÿ´ÎËæ»ú´ÓiRandDataÖÐȡһ¸öÖµ£¬¸³¸øm_iBlockState£¬±íʾij¸öλÖ÷ÅÖÃÄÄÕÅ·½¿éͼƬ¡£

ΪÁ˱£Ö¤Í¬Ò»ÕÅ·½¿éͼƬ²»»á±»Öظ´Ê¹Óã¬Ã¿´Î´ÓiRandDataËæ»úȡһ¸öÖµÒԺ󣬽«¸ÃËæ»úÊýºóÃæµÄÊý×éÖµÍùÇ°ÒÆÒ»Î»£¬²¢ÇÒÊý×é´óС¼õ1¡£

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

1¡¢ ½øÈëLessonX.hÀïÃæ£¬Ìí¼ÓÈçϵıäÁ¿ÉùÃ÷£º

1£© Ìí¼Ó³ÉÔ±±äÁ¿ÉùÃ÷£º

static const float µÄÆðÊ¼×ø±ê static const float static const float int

m_fBlockStartY m_fBlockSize ;

;

// ÆÁÄ»¸ß¶È75 / 4¿é = 18.75ÿ¿éµÄ´óС.

//

¶þάÊý×飬´æ´¢N*NµÄ

m_fBlockStartX;// °´·½¿é´óС£¬Ôڱ༭Æ÷Àï°Ú·ÅµÄµÚÒ»¿é·½¿é

±à¼­Æ÷ÀïÔ¤ÏȰڷźõķ½¿é¿íºÍ¸ß±ØÐëÓë´ËÖµÒ»ÖÂ

m_iBlockState[BLOCK_COUNT][BLOCK_COUNT]; ¾ØÕ󷽿éÐÅÏ¢

CSprite* m_spBlock[BLOCK_COUNT*BLOCK_COUNT];//·½¿é¾«Áé

×¢Ò⣬m_fBlockStartX£¬m_fBlockStartY£¬m_fBlockSizeÈý¸ö±äÁ¿ÊDz»ÄܸıäµÄ£¬

Òò´ËÎÒÃÇÐèÒª½«ËüÃÇÉèÖÃΪconstÀàÐÍ£¬constÔÚc++ÀïÃæ±íʾֻ¶Á£¬¼´ºóÃæ³Ì

ÐòÖ»ÄܶÁȡʹÓÃËüµÄÖµ¶ø²»ÄÜ¶ÔÆä½øÐи³Öµ¸Ä±ä¡£C++ÀàÖеijÉÔ±±äÁ¿Èç¹ûÊÇconstÀàÐÍ£¬ÔòÐèÒªÔÚÆäÇ°Ãæ¼ÓÉÏÒ»¸östaticµÄÉùÃ÷£¬¼´¾²Ì¬±äÁ¿µÄÉùÃ÷£¬ÕâÑù£¬ÎÒÃDzÅÄÜÔÚcppÎļþÀïÃæÊ¹ÓÃÕâ¸ö±äÁ¿¡£ 2£© Ìí¼ÓBLOCK_COUNTµÄ#defineÉùÃ÷£º

ÔÚLessonX.hµÄ#includeºóÃæÌí¼ÓÏÂÃæÒ»ÐУº

#define BLOCK_COUNT

4

// N * N µÄ¾ØÕ󷽿é,Ò»¸öNµÄ´óС

#defineÏ൱ÓÚ¸æËß±àÒëÆ÷£¬Èç¹ûÓöµ½BLOCK_COUNTÔòËüÏ൱ÓëÒ»¸öintÀàÐ͵ıäÁ¿£¬ÇÒֵΪ4¡£Ê¹ÓÃ#define¿ÉÒÔ·½±ã¸Ä±äÎÒÃÇÐèÒªµÄÖµ¡£

2¡¢ ½øÈëLessonX.cppÖÐÔÚ×îºóÃæÌí¼ÓÏÂÃæµÄ³ÉÔ±±äÁ¿µÄÉùÃ÷£º

const float CGameMain::m_fBlockSize=18.75f; const float CGameMain::m_fBlockStartX=-40.625f; const float CGameMain::m_fBlockStartY=-28.125f;

ÒòΪÕâÈý¸ö±äÁ¿µÄÀàÐÍÊÇconstÀàÐÍ£¬Òò´ËÎÒÃDz»ÄÜÔÚ¹¹Ô캯ÊýÀïÃæ¶¨ÒåËü£¬ÐèÒªµ¥¶ÀÄóöÀ´½øÐж¨Òå¡£Ï൱ÓÚcÀïÃæµÄÈ«¾Ö±äÁ¿µÄ¶¨Òå¡£

3¡¢ ½øÈëLessonX.cppÖеÄGameInitº¯ÊýÀïÃæÌîд³õʼ»¯´úÂë¡£

1£© ÌîдÏÂÃæ¼¸ÐбäÁ¿µÄ¶¨Ò壺

int int

iLoopX

= 0, iLoopY

= 0, iLoop = 0;

iOneIndex = 0, iRandIndex = 0;

// ÓÃ×öËæ»úµÄÊý×飬µ±Ëæ»ú³éÈ¡µ½´ËÊý×éÖеÄÒ»¸öʱ£¬±ÈÈçËæ»úµ½µÚÎå¸ö£¬Ôò½«µÚÎå¸öÈ¡³öÀ´ÓÃ

// µÚÎå¸öºóÃæµÄÊý×é¶¼ÍùÇ°ÒÆ¶¯Ò»Î»,½«µÚÎå¸ö¸²¸Çµô£¬Êý×é×ÜÊý¼õÒ»£¬Ï´ÎÔÙÔÚÕâÊ£ÓàµÄ14¸öÊýÖµÀïËæ»ú³éÈ¡

int iDataCount 12, 13, 14, 15};

=

BLOCK_COUNT * BLOCK_COUNT - 1;

int iRandData[BLOCK_COUNT * BLOCK_COUNT - 1] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,

iDataCountÓÃÓڼǼ·½¿éµÄÊýÄ¿£¬iRandDataÊÇÒ»¸ö¶þάÊý×飬ÀïÃæ´æ·ÅÁË1ÖÁ15µÄintÖµ£¬¶ÔÓ¦±íʾ1-15¸ö·½¿é¾«Á飬ÓÃÓÚºóÃæ¶Ô·½¿é½øÐÐËæ»úÉú³É¡£Ã¿´ÎËæ»ú´Ó´ËÊý×éÖгéȡһ¸öÖµ£¬±ÈÈçËæ»úµ½µÚÎå¸ö£¬Ôò½«µÚÎå¸öÈ¡³öÀ´Ó㬵ÚÎå¸öºóÃæµÄÊý×é¶¼ÍùÇ°ÒÆ¶¯Ò»Î»,½«µÚÎå¸ö¸²¸Çµô£¬Êý×é×ÜÊý¼õÒ»£¬Ï´ÎÔÙÔÚÕâÊ£ÓàµÄ14¸öÊýÖµÀïËæ»ú³éÈ¡¡£ÕâÑù×öµÄºÃ´¦ÊÇÈ·±£²»»áÖØ¸´Á½´ÎÒÔÉÏʹÓÃͬһ¸ö·½¿é¡£

2£© ÓÉÓÚÎÒÃÇÓÃÓڼǼ·½¿éλÖõijÉÔ±±äÁ¿ÊÇÒ»¸ö¶þάÊý×ém_iBlockState£¬¶øÎÒÃÇ

ÓÃÓÚ±£´æËùÓз½¿é¾«ÁéµÄÊý×éÊÇÒ»¸öһάÊý×飬ËùÒÔÏÂÃæÎÒÃÇÐèÒªÓõ½Ò»Ð©×Ô¶¨ÒåµÄº¯ÊýÓÃÓÚ´Ó¶þάÊý×éת»»µ½Ò»Î¬Êý×é¡£Æäʵ¶þάÊý×éµÄ´æ·ÅÔÚÄÚ´æÀïÃæÒ²ÊÇÁ¬Ðø´æ·ÅµÄ£¬ÎÒÃÇÔÚ¶ÁÈ¡ËûÃǵÄÖµµÃʱºòµ±È»¿ÉÒÔʹÓÃһάÊý×éµÄ·½·¨À´¶ÁÈ¡Ëü£¬Ö»²»¹ýÕâÀïÐèÒª½øÐÐÊý×éϱêÊýÖµµÄÏàÓ¦¸Ä±ä¡£Àý£º¶þάÊý×éa[x][y]ת»»ÎªÒ»Î¬Êý×éµÄ¼ÆËã·½·¨ÊÇ£ºx* ¶þάÊý×éÖÐÿÐеÄÔªËØÊý+y¡£

½øÈëLessonX.hÖÐÌí¼ÓÎÒÃÇ×Ô¶¨ÒåµÄ¶þάÊý×éË÷Òýת»»³ÉһάÊý×éË÷ÒýµÄº¯ÊýXYToOneIndexÉùÃ÷£º

int XYToOneIndex( const int iIndexX, const int iIndexY );

½øÈëLessonX.cppÖÐÌí¼ÓÉÏÃæº¯ÊýµÄ¶¨Ò壺

int CGameMain::XYToOneIndex( const int iIndexX, const int iIndexY ) {

return (iIndexY * BLOCK_COUNT + iIndexX);

}

4¡¢ ÎÒÃÇʹÓÃÁ½¸öforÑ­»·À´±éÀú¶þάÊý×飬µÚÒ»¸öforÑ­»·±éÀú¶þάÊý×ém_iBlockState

µÄµÚ¶þ¸öϱ꣬µÚ¶þ¸öforÑ­»·±éÀú¶þάÊý×ém_iBlockStateµÄµÚÒ»¸öϱꡣÔÚGameIintº¯ÊýÀïÃæÌí¼ÓÏÂÃæµÄ´úÂ룺

for( iLoopY = 0; iLoopY < BLOCK_COUNT; iLoopY++ )

{

}

for( iLoopX = 0; iLoopX < BLOCK_COUNT; iLoopX++ ) { }

5¡¢ ÎÒÃÇÊ×ÏÈÓøոÕÎÒÃÇ×Ô¶¨ÒåµÄÊý×éϱêת»»º¯ÊýXYToOneIndex½«¶þάÊý×éϱêת

»»³ÉһάÊý×éµÄϱꡣÔÚfor( iLoopX = 0; iLoopX < BLOCK_COUNT; iLoopX++ )ÀïÃæÌîдÏÂÃæµÄ´úÂ룺

iOneIndex =

XYToOneIndex( iLoopX, iLoopY );

iOneIndex¼´ÊǶþάÊý×éÔÚһάÊý×éÀïÃæµÄϱêÖµ¡£

1£© Èç¹û±éÀúµ½Êý×éµÄ×îºóÒ»¸ö£¬ÎÒÃǾͽ«ÆäÉ趨Ϊ¿Õλ¾«Á飬ËüµÄÃû³ÆÎªNULL¡±£¬

ºóÃæÎÒÃÇÖ»ÒªÅжÏÒ»¸ö¾«ÁéµÄÖÜΧÓÐûÓÐÃû³ÆÎª¡±NULL¡±µÄ¾«Áé¾Í¿ÉÒÔÖªµÀËûÖÜΧÊÇ·ñÓпÕ룬ËüÔÚ¶þάÊý×éÖеÄÖµÒÔ0À´´úÌæ¡£Ìí¼ÓÏÂÃæµÄ´úÂ룺 // Êý×éµÄ×îºóÒ»¸ö if( BLOCK_COUNT - 1 == iLoopX && BLOCK_COUNT - 1 == iLoopY )

{ }

m_iBlockState[iLoopY][iLoopX] = 0;

m_spBlock[iOneIndex] = new CSprite(\

2£© Èç¹ûûÓбéÀúµ½×îºóÒ»¸öλÖã¬ÎÒÃÇËæ»ú´ÓiRandDataȡһ¸öÖµ¸³¸ø

m_iBlockState£¬²¢ÇÒ¸ø¶ÔÓ¦Ãû×ֵľ«ÁéÊý×ém_spBlock³õʼ»¯£¬Í¬Ê±½«¸Ã¾«ÁéÒÆ¶¯µ½¶ÔÓ¦µÄλÖá£Ìí¼ÓÏÂÃæ´úÂ룺

else

{

// ÔÚµ±Ç°Ê£ÓàδʹÓõ½µÄÊýÖµÀïËæ»úÒ»¸ö³öÀ´,¸³Öµ¸ø¶þάÊý×é iRandIndex

=

CSystem::RandomRange( 0, iDataCount - 1 );

m_iBlockState[iLoopY][iLoopX] = iRandData[iRandIndex]; }

m_spBlock[iOneIndex]=new CSprite(tmpName); // ½«¸Ã¾«ÁéÒÆ¶¯µ½¶ÔÓ¦µÄλÖÃ

MoveSpriteToBlock( m_spBlock[iOneIndex], iLoopX, iLoopY );

char* tmpName=CSystem::MakeSpriteName(\

ÔÚÕâÀïÎÒÃÇÐèÒªÌí¼ÓÒ»¸öÒÆ¶¯¾«Áéµ½ÌØ¶¨Î»Öõĺ¯ÊýMoveSpriteToBlock¡£½øÈëLessonX.hÖÐÌí¼Óº¯ÊýµÄÉùÃ÷£º

void MoveSpriteToBlock( CSprite *tmpSprite, const int iIndexX, const int iIndexY ); ½øÈëLessonX.cppÖÐÌí¼Ó¸Ãº¯ÊýµÄ¶¨Ò壺

void CGameMain::MoveSpriteToBlock( CSprite *tmpSprite, const int iIndexX, const int iIndexY )

{

float fPosX float fPosY }

= =

m_fBlockStartX + iIndexX * m_fBlockSize; m_fBlockStartY + iIndexY * m_fBlockSize;

tmpSprite->SetSpritePosition(fPosX, fPosY );

3£© ÓÉÓÚÊÇËæ»ú´ÓiRandDataÊý×éÀïÃæÈ¡Ò»¸öÊý¸³¸øm_iBlockState£¬ËùÒÔÎÒÃÇÿ´Î

¸³Ò»¸öÐèÒª½«iRandDataÊý×éºóÃæµÄÖµÍùÇ°ÃæÒÆ¶¯¸²¸Çµô¸ÄÖµ¡£Òò´ËÎÒÃÇÐèÒªÓÃforÑ­»·£¬½«³éÈ¡µ½µÄË÷ÒýiRandIndexºóÃæµÄÊý×éÖµÒÀ´ÎÍùÇ°ÒÆ¶¯Ò»Î»£¬Í¬Ê±·½¿é×ÜÊýÄ¿¼õÒ»¡£´úÂëÈçÏ£º

for( iLoop = iRandIndex; iLoop < iDataCount - 1; iLoop++ )

{ }

// Ê£ÓàÓÐЧֵ×ÜÊý¼õÒ» iDataCount--;

iRandData[iLoop] = iRandData[iLoop + 1];

ÖÁ´Ë£¬±¾ÊµÑé½áÊø¡£

ʵÑéËÄ ÒÆ¶¯·½¿é

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

²½ÖèÒ»¡¢»ñÈ¡Êó±êµ¥»÷ÏûÏ¢ ²½Öè¶þ¡¢ÅжÏÊó±êµã»÷µÄ·½¿é

²½ÖèÈý¡¢ÅжÏÖÜΧÊÇ·ñÓпÕ룬Òƶ¯·½¿é ¡¾ÊµÑé˼·¡¿

±éÀúһάÊý×ém_spBlock£¬Ê¹ÓÃIsPointInSprite º¯ÊýÅжϵ±Ç°Êó±ê×ø±êÊÇ·ñλÓÚij¸öÃû×ֵľ«ÁéÄÚ²¿¡£Èç¹ûÕÒµ½Ä³¸öÃû×ֵľ«Áé±»µã»÷ÖУ¬Ç뽫µ±Ç°Ñ­»·±äÁ¿iLoop¸³Öµ¸øiClickIndex¡£ÔÙÅжϸ÷½¿é¾«ÁéÖÜΧÓÐûÓÐÃû³ÆÎª¡°NULL¡±µÄ¾«Á飬ÓеÄÓеϰÒƶ¯µ½¸ÃλÖᣠ¡¾ÊµÑéÖ¸µ¼¡¿

1¡¢ ½øÈëLessonX.hÖÐÌí¼ÓÎÒÃÇ×Ô¶¨ÒåµÄ´¦ÀíÊó±êµ¥»÷µÄº¯ÊýÉùÃ÷£º

void OnMouseClick( const int iMouseType, const float fMouseX, const float fMouseY ); 2¡¢ ½øÈëLessonX.cppÖÐÌí¼Ó¸Ãº¯ÊýµÄ¶¨Òå:

void CGameMain::OnMouseClick( const int iMouseType, const float fMouseX, const float fMouseY ) { }

3¡¢ ÅжÏÓÎÏ·ÊÇ·ñÕýÔÚ½øÐУ¬ÔÚÉÏÃæµÄº¯ÊýÀïÃæÌí¼ÓÏÂÃæµÄ´úÂ룺

// Ö»´¦ÀíÓÎÏ·½øÐÐÖеÄÊó±êÏìÓ¦ if( 2 != m_iGameState )

return;

4¡¢ »ñÈ¡Êó±êµã»÷µÄ×ø±ê£¬Ê¹ÓÃÒ»¸öforÑ­»·±éÀú´æ´¢ËùÒÔ·½¿é¾«ÁéµÄһάÊý×é

m_spBlock£¬ÅжϸÃ×ø±êÊÇ·ñÔÚijһ¸ö·½¿é¾«ÁéÖУ¬ÊǵϰµÃµ½¸Ã¾«ÁéµÄϱêÖµ¡£

Ìí¼ÓÏÂÃæµÄ´úÂ룺

int iClickIndex int iLoop

= =

-1; 0;

for( iLoop = 0; iLoop < BLOCK_COUNT * BLOCK_COUNT; iLoop++ )

  • ÊÕ²Ø
  • Î¥¹æ¾Ù±¨
  • °æÈ¨ÈÏÁì
ÏÂÔØÎĵµ10.00 Ôª ¼ÓÈëVIPÃâ·ÑÏÂÔØ
ÍÆ¼öÏÂÔØ
±¾ÎÄ×÷Õߣº...

¹²·ÖÏí92ƪÏà¹ØÎĵµ

Îĵµ¼ò½é£º

µô¡°¿Õ¸ñ¿ªÊ¼¡±¾«Áé¡£ÔÚ²½Öè2µÄº¯ÊýÀïÃæÌí¼ÓÏÂÃæµÄ´úÂ룺 if( KEY_SPACE == iKey && 0 == m_iGameState ) { } m_iGameState = 1; // Òþ²ØÌáʾ¿ªÊ¼ÎÄ×Ö m_spGameBegin->SetSpriteVisible(0); 4¡¢ ½øÈëMain.cppº¯ÊýÀïÃæ£¬½«ÏµÍ³²¶»ñµ½µÄ¼üÅ̰´ÏÂÏûÏ¢µÄ²ÎÊý´«¸øÎÒÃÇ×Ô¶¨ÒåµÄº¯Êý£¬ÐèÒªÔÚOnKeyDownº¯ÊýÀïÃæÌí¼ÓÏÂÃæÒ»ÐдúÂ룺 g_GameMain.OnKeyDown(iKey,bAltPress,bShiftPress,bCtrlPress); ÖÁ´Ë£¬±¾ÊµÑé½áÊø¡£ ʵÑéÈý ³õʼ»¯Ëæ»úÏÔʾ·½¿é

¡Á ÓοͿì½ÝÏÂÔØÍ¨µÀ£¨ÏÂÔØºó¿ÉÒÔ×ÔÓɸ´ÖƺÍÅŰ棩
µ¥Æª¸¶·ÑÏÂÔØ
ÏÞÊ±ÌØ¼Û£º10 Ôª/·Ý Ô­¼Û:20Ôª
VIP°üÔÂÏÂÔØ
ÌØ¼Û£º29 Ôª/Ô ԭ¼Û:99Ôª
µÍÖÁ 0.3 Ôª/·Ý ÿÔÂÏÂÔØ150·Ý
ȫվÄÚÈÝÃâ·Ñ×ÔÓɸ´ÖÆ
VIP°üÔÂÏÂÔØ
ÌØ¼Û£º29 Ôª/Ô ԭ¼Û:99Ôª
µÍÖÁ 0.3 Ôª/·Ý ÿÔÂÏÂÔØ150·Ý
ȫվÄÚÈÝÃâ·Ñ×ÔÓɸ´ÖÆ
×¢£ºÏÂÔØÎĵµÓпÉÄÜ¡°Ö»ÓÐĿ¼»òÕßÄÚÈݲ»È«¡±µÈÇé¿ö£¬ÇëÏÂÔØÖ®Ç°×¢Òâ±æ±ð£¬Èç¹ûÄúÒѸ¶·ÑÇÒÎÞ·¨ÏÂÔØ»òÄÚÈÝÓÐÎÊÌ⣬ÇëÁªÏµÎÒÃÇЭÖúÄã´¦Àí¡£
΢ÐÅ£ºfanwen365 QQ£º370150219
Copyright © ÔÆÌ⺣ All Rights Reserved. ËÕICP±¸16052595ºÅ-3 ÍøÕ¾µØÍ¼ ¿Í·þQQ£º370150219 ÓÊÏ䣺370150219@qq.com