首先我们先贴上代码
bool checkErasing(TetrisManager *manager, TetrisControl *control)
{
char count = 0;
char k = 0, y = manager->y + 3; // 从下往上检测
do {
if (y < ROW_END && manager->pool[y] == 0xFFFFU) // 有效区域内且一行已填满
{
++count;
// 消除一行方块
memmove(manager->pool + 1, manager->pool, sizeof(unsigned short) * y);
}
else
{
--y;
++k;
}
} while (y >= manager->y && k < 4);
manager->erasedTotal += count; // 消行总数
manager->score += (1*count);
if (count > 0)
{
++manager->erasedCount[count - 1]; // 消行
}
giveTetris(manager); // 给下一个方块
return (count > 0);
}
主要实现的难点在于我们如何判断游戏池中是否为满行,其实就是判断每个格子是否为F,然后对其清除,下面是清除函数
<