实现 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
+1 -1
View File
@@ -34,7 +34,7 @@
简要说明:完成方块落地后的固定、游戏结束判断、预测落点与重新开始等状态控制逻辑。
- [ ] `14. Fixing` - `src/source/TetrisLogic.cpp`
- [x] `14. Fixing` - `src/source/TetrisLogic.cpp`
- [ ] `17. GameOver` - `src/source/TetrisLogic.cpp`
- [ ] `18. ComputeTarget` - `src/source/TetrisLogic.cpp`
- [ ] `19. Restart` - `src/source/TetrisLogic.cpp`
Binary file not shown.

After

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

+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)