实现 Fixing 方块固定与生成下一个方块逻辑 完成函数14

This commit is contained in:
2026-04-24 08:55:05 +08:00
parent daea5bd843
commit 329cf4c5c2
4 changed files with 33 additions and 2 deletions
+32 -1
View File
@@ -252,9 +252,40 @@ void DropDown()
}
}
/**
* @brief 将当前活动方块固定到工作区,并生成下一个活动方块。
*
* 遍历当前方块 4x4 形状矩阵,把其中所有非空单元写入工作区数组,
* 表示该方块已经落地并转为固定状态。
* 随后将“下一方块”切换为新的当前方块,重置旋转状态,
* 并把新方块生成到工作区上方的初始位置。
*/
void Fixing()
{
// TODO(作业14): 将当前方块固定到工作区,并生成下一个方块。
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
if (bricks[type][state][i][j] != 0)
{
int fixY = point.y + i;
int fixX = point.x + j;
// 将当前方块的非空单元写入工作区
if (fixY >= 0 && fixY < nGameHeight && fixX >= 0 && fixX < nGameWidth)
{
workRegion[fixY][fixX] = bricks[type][state][i][j];
}
}
}
}
// 生成下一个活动方块
type = nType;
nType = rand() % 7;
state = 0;
point.x = 3;
point.y = 0;
}
void DeleteOneLine(int number)