MFC俄罗斯方块增加多彩方块,闪烁消行

2023-08-24 12:55:56 浏览数 (2)

当满一行要发生消行的消息,首先定义一个每行消行消息的数组。

代码语言: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();//Ò»µ©ËùÓеķ½¿éÈ«²¿²úÉúÍ꣬Ҫ½øÐвúÉúеķ½¿éµÄ´¦Àí
		}
	}
}

实现效果

点击打开链接

0 人点赞