当满一行要发生消行的消息,首先定义一个每行消行消息的数组。
代码语言:javascript复制int m_bufBlink[MAX_ROW];//消行数组
初始化每个数组置零。
当某一行满行后,相应的数组某位置一。然后在定时器里实现闪烁数组位值的自加,对应的那行进行奇偶闪烁的处理。
代码语言:javascript复制//消行闪烁的特效的处理
void CTetrisGame::blinkEffects()
{
for (int iRow = 0; iRow < MAX_ROW; iRow )//闪烁数组位值自加,从1加到MAX_BLINK,奇偶闪烁的原理
{
if (m_bufBlink[iRow] >= 1 && m_bufBlink[iRow]<MAX_BLINK)
m_bufBlink[iRow] ;
}
blinkDeal();//奇偶闪烁
rectDrop();//闪烁完,要上面的方块掉落,并且产生新的方块
}
代码语言:javascript复制//»æÖÆÏûÐÐʱµÄÉÁ˸Ч¹û
void CTetrisGame::blinkDeal()
{
int iRow = 0;
int iCol = 0;
for ( iRow = 0; iRow < MAX_ROW; iRow )
{
if (m_bufBlink[iRow]%2 == 0 && m_bufBlink[iRow]>0)//µ±ÉÁ˸Êý×éλֵÊÇżÊýʱ£¬ÏÔʾ¿Õ°×
{
for( iCol = 0; iCol < MAX_COL; iCol )
{
m_bufMap[iRow][iCol].bHaveRect = FALSE;
}
}
if (m_bufBlink[iRow]%2 == 1)//µ±ÉÁ˸Êý×éλֵÊÇÆæÊýʱ£¬ÏÔʾԱ¾µÄ·½¿é£¬ÒÔ´ËʵÏÖÉÁ˸
{
for( iCol = 0; iCol < MAX_COL; iCol )
{
m_bufMap[iRow][iCol].bHaveRect = TRUE;
}
}
}
}
代码语言:javascript复制//ÉÁ˸Í꣬Ҫ½øÐз½¿éµÄÕûÌåµÄÏÂÂä
void CTetrisGame::rectDrop()
{
int iRow = 0;
int iCol = 0;
int iRowTmp = 0;
int iColTmp = 0;
for (iRow = 0; iRow < MAX_ROW; iRow )
{
if ( m_bufBlink[iRow] == MAX_BLINK)
{
for ( iRowTmp = iRow; iRowTmp > 0; iRowTmp--)
{
for (iColTmp = 0; iColTmp < MAX_COL; iColTmp )
{
m_bufMap[iRowTmp][iColTmp].bHaveRect = m_bufMap[iRowTmp-1][iColTmp].bHaveRect;
}
}
m_bufBlink[iRow] = 0;//λֵҪ½øÐÐÖÃÁã´¦Àí
willRectProduce();//Ò»µ©ËùÓеķ½¿éÈ«²¿²úÉúÍ꣬Ҫ½øÐвúÉúеķ½¿éµÄ´¦Àí
}
}
}
实现效果
点击打开链接