实现 GameOver 游戏结束判断逻辑 实现函数17

This commit is contained in:
2026-04-24 09:06:04 +08:00
parent 329cf4c5c2
commit 6e038f39ed
4 changed files with 31 additions and 2 deletions
+1 -1
View File
@@ -35,7 +35,7 @@
简要说明:完成方块落地后的固定、游戏结束判断、预测落点与重新开始等状态控制逻辑。
- [x] `14. Fixing` - `src/source/TetrisLogic.cpp`
- [ ] `17. GameOver` - `src/source/TetrisLogic.cpp`
- [x] `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: 164 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

+30 -1
View File
@@ -299,9 +299,38 @@ void DeleteLines()
// TODO(作业16): 完成消行与计分逻辑。
}
/**
* @brief 判断游戏是否结束。
*
* 当新的活动方块生成到初始位置后,如果它的任意一个非空单元
* 与工作区中已经固定的方块发生重叠,则说明顶部已被占满,
* 当前局面无法继续生成新方块,游戏结束。
*
* @return bool 若游戏结束返回 true,否则返回 false。
*/
bool GameOver()
{
// TODO(作业17): 判断游戏是否结束。
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
if (bricks[type][state][i][j] != 0)
{
int checkY = point.y + i;
int checkX = point.x + j;
// 检查新方块生成位置是否与固定方块重叠
if (checkY >= 0 && checkY < nGameHeight && checkX >= 0 && checkX < nGameWidth)
{
if (workRegion[checkY][checkX] != 0)
{
return true;
}
}
}
}
}
return false;
}