完成 CanMoveDown 函数 完成函数6 根据函数顺序 重新组织TODO List

This commit is contained in:
2026-04-23 20:09:40 +08:00
parent 88ae3f6496
commit 3d8d63929c
4 changed files with 68 additions and 32 deletions
+33 -31
View File
@@ -1,51 +1,53 @@
# 函数 TODO 分阶段清单 # 函数 TODO 分阶段清单
说明:项目整体仍划分为 6 个阶段,便于按模块推进;每个阶段内的函数顺序尽量与源码实现顺序和依赖关系保持一致。
## 第一阶段:窗口创建与程序框架搭建 ## 第一阶段:窗口创建与程序框架搭建
简要说明:完成程序入口、主窗口创建、消息循环基础对话框处理。 简要说明:完成程序入口、窗口类注册、主窗口创建、消息循环以及基础对话框处理。
- [x] `_tWinMain` - `src/source/Tetris.cpp` - [x] `1. _tWinMain` - `src/source/Tetris.cpp`
- [x] `MyRegisterClass` - `src/source/Tetris.cpp` - [x] `2. MyRegisterClass` - `src/source/Tetris.cpp`
- [x] `InitInstance` - `src/source/Tetris.cpp` - [x] `3. InitInstance` - `src/source/Tetris.cpp`
- [x] `WndProc` - `src/source/Tetris.cpp` - [x] `4. WndProc` - `src/source/Tetris.cpp`
- [x] `About` - `src/source/Tetris.cpp` - [x] `5. About` - `src/source/Tetris.cpp`
## 第二阶段:游戏区域与状态初始化 ## 第二阶段:基础碰撞判断
简要说明:完成游戏初始状态建立和重新开始相关逻辑 简要说明:完成活动方块的基础移动可行性判断,为后续移动、旋转和落地逻辑提供前置条件
- [ ] `Restart` - `src/source/TetrisLogic.cpp` - [x] `6. CanMoveDown` - `src/source/TetrisLogic.cpp`
- [ ] `7. CanMoveLeft` - `src/source/TetrisLogic.cpp`
- [ ] `8. CanMoveRight` - `src/source/TetrisLogic.cpp`
## 第三阶段:方块生成、移动与旋转 ## 第三阶段:方块移动与旋转
简要说明:完成方块的基础操作,包括下落、左右移、旋转和快速到底 简要说明:在可移动判断完成后,实现方块的下移、左移、右移、旋转和一键到底操作
- [ ] `MoveDown` - `src/source/TetrisLogic.cpp` - [ ] `9. MoveDown` - `src/source/TetrisLogic.cpp`
- [ ] `MoveLeft` - `src/source/TetrisLogic.cpp` - [ ] `10. MoveLeft` - `src/source/TetrisLogic.cpp`
- [ ] `MoveRight` - `src/source/TetrisLogic.cpp` - [ ] `11. MoveRight` - `src/source/TetrisLogic.cpp`
- [ ] `Rotate` - `src/source/TetrisLogic.cpp` - [ ] `12. Rotate` - `src/source/TetrisLogic.cpp`
- [ ] `DropDown` - `src/source/TetrisLogic.cpp` - [ ] `13. DropDown` - `src/source/TetrisLogic.cpp`
## 第四阶段:碰撞检测与方块固定 ## 第四阶段:方块固定与游戏状态
简要说明:完成越界判断、碰撞检测、方块落地固定和结束判定 简要说明:完成方块落地后的固定、游戏结束判断、预测落点与重新开始等状态控制逻辑
- [ ] `CanMoveDown` - `src/source/TetrisLogic.cpp` - [ ] `14. Fixing` - `src/source/TetrisLogic.cpp`
- [ ] `CanMoveLeft` - `src/source/TetrisLogic.cpp` - [ ] `17. GameOver` - `src/source/TetrisLogic.cpp`
- [ ] `CanMoveRight` - `src/source/TetrisLogic.cpp` - [ ] `18. ComputeTarget` - `src/source/TetrisLogic.cpp`
- [ ] `Fixing` - `src/source/TetrisLogic.cpp` - [ ] `19. Restart` - `src/source/TetrisLogic.cpp`
- [ ] `GameOver` - `src/source/TetrisLogic.cpp`
## 第五阶段:消除逻辑与分数系统 ## 第五阶段:消行与得分逻辑
简要说明:完成消行、行下移和得分更新等核心反馈机制 简要说明:完成删除单行、批量消行以及相关分数更新逻辑
- [ ] `DeleteOneLine` - `src/source/TetrisLogic.cpp` - [ ] `15. DeleteOneLine` - `src/source/TetrisLogic.cpp`
- [ ] `DeleteLines` - `src/source/TetrisLogic.cpp` - [ ] `16. DeleteLines` - `src/source/TetrisLogic.cpp`
## 第六阶段:界面绘制与扩展功能 ## 第六阶段:界面绘制与整体完善
简要说明:完成游戏界面绘制,并实现落点预测等增强功能 简要说明:完成最终游戏界面绘制,并与前面的逻辑配合形成可运行的完整项目
- [ ] `ComputeTarget` - `src/source/TetrisLogic.cpp` - [ ] `20. TDrawScreen` - `src/source/TetrisRender.cpp`
- [ ] `TDrawScreen` - `src/source/TetrisRender.cpp`
Binary file not shown.

After

Width:  |  Height:  |  Size: 208 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

+35 -1
View File
@@ -69,9 +69,43 @@ COLORREF BrickColor[7] =
RGB(168, 0, 168) RGB(168, 0, 168)
}; };
/**
* @brief 判断当前方块是否可以继续向下移动。
*
* 遍历当前处于活动状态下方块的 4x4 矩阵,计算其下落一步(Y 坐标加 1)后的位置,
* 并检查每个非空方块单元:
* 1. 是否超出了游戏工作区的底部边界(对应数组索引 >= 20)。
* 2. 是否与工作区下方已经固定的其他方块发生碰撞(即对应位置的值不为 0)。
* 如果遇到以上任意一种情况,则认为方块受到阻挡,无法继续下落。
*
* @return bool 如果可以继续安全下落返回 true,否则返回 false。
*/
bool CanMoveDown() bool CanMoveDown()
{ {
// TODO(作业6): 判断当前方块是否可以继续下落。 for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
if (bricks[type][state][i][j] != 0)
{
int nextY = point.y + i + 1;
int nextX = point.x + j;
// 检查是否到达底部边界
if (nextY >= nGameHeight)
{
return false;
}
// 检查下方是否有其他固定方块
if (workRegion[nextY][nextX] != 0)
{
return false;
}
}
}
}
return true; return true;
} }