📄 gamewnd.c
字号:
if (disCounter > 0)
{
// 先对disY[]从小到大排序
for (i = 0; i < disCounter; i++)
{
for (j = i + 1; j < disCounter; j++)
{
if (disY[i] > disY[j])
{
x = disY[i];
disY[i] = disY[j];
disY[j] = x;
}
}
}
// 将被消除行之上的方块移动到合适的位置
for (i = 0; i < disCounter; i++)
{
for (j = disY[i] + 1; j < disY[i + 1]; j++)
{
// 将第j行下移i+1行
MEMCPY( pthis->m_pContainerData + ((j - i - 1) * pthis->m_nContainerWidth),
pthis->m_pContainerData + (j * pthis->m_nContainerWidth),
pthis->m_nContainerWidth);
}
}
// 将剩余的行数全部下移disCounter行
MEMCPY( pthis->m_pContainerData + (disY[disCounter - 1] + 1 - disCounter) * pthis->m_nContainerWidth,
pthis->m_pContainerData + (disY[disCounter - 1] + 1) * pthis->m_nContainerWidth,
pthis->m_nContainerWidth * (pthis->m_nContainerHeight - disY[disCounter - 1] - 1));
// 将下移后留出的空位清空
MEMSET( pthis->m_pContainerData + (pthis->m_nContainerHeight - disCounter) * pthis->m_nContainerWidth,
0,
disCounter * pthis->m_nContainerWidth);
}
return disCounter;
}
void GameWnd_DefineBlock(GameWnd* pthis)
{
/* 7种活动块的初始化
* 记录其相对坐标
*/
// ----------------------------------------------------------------------
// 第一套方块
// ----------------------------------------------------------------------
/*第1种:
□
□
□
□
*/
DefineBlock(eBlockType_LINE, eDir_DOWN, 0, 0, -1);
DefineBlock(eBlockType_LINE, eDir_DOWN, 1, 0, 0);
DefineBlock(eBlockType_LINE, eDir_DOWN, 2, 0, 1);
DefineBlock(eBlockType_LINE, eDir_DOWN, 3, 0, 2);
/*第2种: □□
□
□
*/
DefineBlock(eBlockType_L, eDir_DOWN, 0, -1, 0);
DefineBlock(eBlockType_L, eDir_DOWN, 1, 0, 0);
DefineBlock(eBlockType_L, eDir_DOWN, 2, 0, 1);
DefineBlock(eBlockType_L, eDir_DOWN, 3, 0, 2);
/*第3种: □□
□
□
*/
DefineBlock(eBlockType_MIRRORL, eDir_DOWN, 0, 0, 0);
DefineBlock(eBlockType_MIRRORL, eDir_DOWN, 1, 1, 0);
DefineBlock(eBlockType_MIRRORL, eDir_DOWN, 2, 0, 1);
DefineBlock(eBlockType_MIRRORL, eDir_DOWN, 3, 0, 2);
/*第4种: □□
□□ */
DefineBlock(eBlockType_Z, eDir_DOWN, 0, -1, -1);
DefineBlock(eBlockType_Z, eDir_DOWN, 1, 0, -1);
DefineBlock(eBlockType_Z, eDir_DOWN, 2, 0, 0);
DefineBlock(eBlockType_Z, eDir_DOWN, 3, 1, 0);
/*第5种: □□
□□ */
DefineBlock(eBlockType_MIRRORZ, eDir_DOWN, 0, -1, 0);
DefineBlock(eBlockType_MIRRORZ, eDir_DOWN, 1, 0, 0);
DefineBlock(eBlockType_MIRRORZ, eDir_DOWN, 2, 0, -1);
DefineBlock(eBlockType_MIRRORZ, eDir_DOWN, 3, 1, -1);
/*第6种: □□
□□
*/
DefineBlock(eBlockType_SQUARE, eDir_DOWN, 0, 0, 0);
DefineBlock(eBlockType_SQUARE, eDir_DOWN, 1, 1, 0);
DefineBlock(eBlockType_SQUARE, eDir_DOWN, 2, 0, 1);
DefineBlock(eBlockType_SQUARE, eDir_DOWN, 3, 1, 1);
/*第7种: □
□□□
*/
DefineBlock(eBlockType_T, eDir_DOWN, 0, 0, -1);
DefineBlock(eBlockType_T, eDir_DOWN, 1, -1, 0);
DefineBlock(eBlockType_T, eDir_DOWN, 2, 0, 0);
DefineBlock(eBlockType_T, eDir_DOWN, 3, 1, 0);
//////////////////////////////////////////////////////////////////////////
//第2套方块的特征矩阵
//////////////////////////////////////////////////////////////////////////
/* 1:
□□□□
*/
DefineBlock(eBlockType_LINE, eDir_RIGHT, 0, -2, 0);
DefineBlock(eBlockType_LINE, eDir_RIGHT, 1, -1, 0);
DefineBlock(eBlockType_LINE, eDir_RIGHT, 2, 0, 0);
DefineBlock(eBlockType_LINE, eDir_RIGHT, 3, 1, 0);
/* 2:
□
□□□
*/
DefineBlock(eBlockType_L, eDir_RIGHT, 0, 0, -1);
DefineBlock(eBlockType_L, eDir_RIGHT, 1, -2, 0);
DefineBlock(eBlockType_L, eDir_RIGHT, 2, -1, 0);
DefineBlock(eBlockType_L, eDir_RIGHT, 3, 0, 0);
/* 3:
□□□
□
*/
DefineBlock(eBlockType_MIRRORL, eDir_RIGHT, 0, -2, 0);
DefineBlock(eBlockType_MIRRORL, eDir_RIGHT, 1, -1, 0);
DefineBlock(eBlockType_MIRRORL, eDir_RIGHT, 2, 0, 0);
DefineBlock(eBlockType_MIRRORL, eDir_RIGHT, 3, 0, 1);
/* 4:
□
□□
□
*/
DefineBlock(eBlockType_Z, eDir_RIGHT, 0, 1, -1);
DefineBlock(eBlockType_Z, eDir_RIGHT, 1, 1, 0);
DefineBlock(eBlockType_Z, eDir_RIGHT, 2, 0, 0);
DefineBlock(eBlockType_Z, eDir_RIGHT, 3, 0, 1);
/* 5:
□
□□
□
*/
DefineBlock(eBlockType_MIRRORZ, eDir_RIGHT, 0, 0, -1);
DefineBlock(eBlockType_MIRRORZ, eDir_RIGHT, 1, 0, 0);
DefineBlock(eBlockType_MIRRORZ, eDir_RIGHT, 2, 1, 0);
DefineBlock(eBlockType_MIRRORZ, eDir_RIGHT, 3, 1, 1);
/* 6:
□□
□□
*/
DefineBlock(eBlockType_SQUARE, eDir_RIGHT, 0, 0, 0);
DefineBlock(eBlockType_SQUARE, eDir_RIGHT, 1, 1, 0);
DefineBlock(eBlockType_SQUARE, eDir_RIGHT, 2, 0, 1);
DefineBlock(eBlockType_SQUARE, eDir_RIGHT, 3, 1, 1);
/* 7:
□
□□
□
*/
DefineBlock(eBlockType_T, eDir_RIGHT, 0, 0, -1);
DefineBlock(eBlockType_T, eDir_RIGHT, 1, 0, 0);
DefineBlock(eBlockType_T, eDir_RIGHT, 2, 1, 0);
DefineBlock(eBlockType_T, eDir_RIGHT, 3, 0, 1);
//////////////////////////////////////////////////////////////////////////
//第3套方块
//////////////////////////////////////////////////////////////////////////
/* 1:
□
□
□
□
*/
DefineBlock(eBlockType_LINE, eDir_UP, 0, 0, -1);
DefineBlock(eBlockType_LINE, eDir_UP, 1, 0, 0);
DefineBlock(eBlockType_LINE, eDir_UP, 2, 0, 1);
DefineBlock(eBlockType_LINE, eDir_UP, 3, 0, 2);
/* 2:
□
□
□□
*/
DefineBlock(eBlockType_L, eDir_UP, 0, 0, -2);
DefineBlock(eBlockType_L, eDir_UP, 1, 0, -1);
DefineBlock(eBlockType_L, eDir_UP, 2, 0, 0);
DefineBlock(eBlockType_L, eDir_UP, 3, 1, 0);
/* 3:
□
□
□□
*/
DefineBlock(eBlockType_MIRRORL, eDir_UP, 0, 0, -2);
DefineBlock(eBlockType_MIRRORL, eDir_UP, 1, 0, -1);
DefineBlock(eBlockType_MIRRORL, eDir_UP, 2, 0, 0);
DefineBlock(eBlockType_MIRRORL, eDir_UP, 3, -1, 0);
/*4:
□□
□□ */
DefineBlock(eBlockType_Z, eDir_UP, 0, -1, -1);
DefineBlock(eBlockType_Z, eDir_UP, 1, 0, -1);
DefineBlock(eBlockType_Z, eDir_UP, 2, 0, 0);
DefineBlock(eBlockType_Z, eDir_UP, 3, 1, 0);
/*5:
□□
□□ */
DefineBlock(eBlockType_MIRRORZ, eDir_UP, 0, -1, 0);
DefineBlock(eBlockType_MIRRORZ, eDir_UP, 1, 0, 0);
DefineBlock(eBlockType_MIRRORZ, eDir_UP, 2, 0, -1);
DefineBlock(eBlockType_MIRRORZ, eDir_UP, 3, 1, -1);
/*6:
□□
□□
*/
DefineBlock(eBlockType_SQUARE, eDir_UP, 0, 0, 0);
DefineBlock(eBlockType_SQUARE, eDir_UP, 1, 1, 0);
DefineBlock(eBlockType_SQUARE, eDir_UP, 2, 0, 1);
DefineBlock(eBlockType_SQUARE, eDir_UP, 3, 1, 1);
/* 7:
□□□
□
*/
DefineBlock(eBlockType_T, eDir_UP, 0, -1, 0);
DefineBlock(eBlockType_T, eDir_UP, 1, 0, 0);
DefineBlock(eBlockType_T, eDir_UP, 2, 1, 0);
DefineBlock(eBlockType_T, eDir_UP, 3, 0, 1);
//////////////////////////////////////////////////////////////////////////
//第4套:方块
//////////////////////////////////////////////////////////////////////////
/* 1:
□□□□
*/
DefineBlock(eBlockType_LINE, eDir_LEFT, 0, -2, 0);
DefineBlock(eBlockType_LINE, eDir_LEFT, 1, -1, 0);
DefineBlock(eBlockType_LINE, eDir_LEFT, 2, 0, 0);
DefineBlock(eBlockType_LINE, eDir_LEFT, 3, 1, 0);
/* 2:
□□□
□
*/
DefineBlock(eBlockType_L, eDir_LEFT, 0, 0, 0);
DefineBlock(eBlockType_L, eDir_LEFT, 1, 1, 0);
DefineBlock(eBlockType_L, eDir_LEFT, 2, 2, 0);
DefineBlock(eBlockType_L, eDir_LEFT, 3, 0, 1);
/* 3:
□
□□□
*/
DefineBlock(eBlockType_MIRRORL, eDir_LEFT, 0, 0, -1);
DefineBlock(eBlockType_MIRRORL, eDir_LEFT, 1, 0, 0);
DefineBlock(eBlockType_MIRRORL, eDir_LEFT, 2, 1, 0);
DefineBlock(eBlockType_MIRRORL, eDir_LEFT, 3, 2, 0);
/* 4:
□
□□
□
*/
DefineBlock(eBlockType_Z, eDir_LEFT, 0, 0, -1);
DefineBlock(eBlockType_Z, eDir_LEFT, 1, 0, 0);
DefineBlock(eBlockType_Z, eDir_LEFT, 2, -1, 0);
DefineBlock(eBlockType_Z, eDir_LEFT, 3, -1, 1);
/* 5:
□
□□
□
*/
DefineBlock(eBlockType_MIRRORZ, eDir_LEFT, 0, 0, -1);
DefineBlock(eBlockType_MIRRORZ, eDir_LEFT, 1, 0, 0);
DefineBlock(eBlockType_MIRRORZ, eDir_LEFT, 2, 1, 0);
DefineBlock(eBlockType_MIRRORZ, eDir_LEFT, 3, 1, 1);
/* 6:
□□
□□
*/
DefineBlock(eBlockType_SQUARE, eDir_LEFT, 0, 0, 0);
DefineBlock(eBlockType_SQUARE, eDir_LEFT, 1, 1, 0);
DefineBlock(eBlockType_SQUARE, eDir_LEFT, 2, 0, 1);
DefineBlock(eBlockType_SQUARE, eDir_LEFT, 3, 1, 1);
/* 7:
□
□□
□
*/
DefineBlock(eBlockType_T, eDir_LEFT, 0, 0, -1);
DefineBlock(eBlockType_T, eDir_LEFT, 1, 0, 0);
DefineBlock(eBlockType_T, eDir_LEFT, 2, 0, 1);
DefineBlock(eBlockType_T, eDir_LEFT, 3, -1, 0);
//4套方块定义结束
//////////////////////////////////////////////////////////////////////////
}
#ifdef ENABLE_MUSIC
void GameWnd_CreateMusic(GameWnd *pthis)
{
if (pthis->m_pBgSound)
GameWnd_ReleaseMusic(pthis);
if (pthis->m_bMusicOn)
{
// 创建音乐接口
pthis->m_BgSndData.dwSize = 0;
pthis->m_BgSndData.clsData = MMD_FILE_NAME;
pthis->m_BgSndData.pData = MIDI_FILE;
ISHELL_CreateInstance(pthis->pMe->a.m_pIShell, AEECLSID_MEDIAMIDI,(void**)&pthis->m_pBgSound);
IMEDIA_SetMediaData(pthis->m_pBgSound, &pthis->m_BgSndData);
}
}
void GameWnd_PlayMusic(GameWnd *pthis)
{
if (pthis->m_bMusicOn)
{
// 播放音乐啦
pthis->m_bMute = FALSE;
IMEDIA_Play(pthis->m_pBgSound);
IMEDIA_RegisterNotify(pthis->m_pBgSound,(PFNMEDIANOTIFY)GameWnd_PlaySoundCB, pthis);
}
}
void GameWnd_ReleaseMusic(GameWnd *pthis)
{
if (pthis->m_pBgSound)
{
IMEDIA_Release(pthis->m_pBgSound);
pthis->m_pBgSound = NULL;
}
}
void GameWnd_CloseMusic(GameWnd *pthis)
{
pthis->m_bMute = TRUE;
if (pthis->m_pBgSound)
{
IMEDIA_Stop(pthis->m_pBgSound);
}
}
void GameWnd_PlaySoundCB(GameWnd* pthis, AEEMediaCmdNotify* pMedia)
{
//DBGPRINTF("%d",pMedia->nCmd);
//DBGPRINTF("%d",pMedia->nStatus);
if(pthis->m_pBgSound != NULL && pthis->m_bMusicOn && pthis->m_bMute == FALSE)
{
if(pMedia->nCmd == MM_CMD_PLAY && (pMedia->nStatus == MM_STATUS_DONE || pMedia->nStatus == MM_STATUS_ABORT))
{
IMEDIA_Play(pMedia->pIMedia);
}
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -