完成第五阶段消行与得分逻辑 完成函数15 16
This commit is contained in:
@@ -43,8 +43,8 @@
|
|||||||
|
|
||||||
简要说明:完成删除单行、批量消行以及相关分数更新逻辑。
|
简要说明:完成删除单行、批量消行以及相关分数更新逻辑。
|
||||||
|
|
||||||
- [ ] `15. DeleteOneLine` - `src/source/TetrisLogic.cpp`
|
- [x] `15. DeleteOneLine` - `src/source/TetrisLogic.cpp`
|
||||||
- [ ] `16. DeleteLines` - `src/source/TetrisLogic.cpp`
|
- [x] `16. DeleteLines` - `src/source/TetrisLogic.cpp`
|
||||||
|
|
||||||
## 第六阶段:界面绘制与整体完善
|
## 第六阶段:界面绘制与整体完善
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 67 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 49 KiB |
@@ -288,15 +288,61 @@ void Fixing()
|
|||||||
point.y = 0;
|
point.y = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 删除指定行,并让其上方所有行整体下移一格。
|
||||||
|
*
|
||||||
|
* 该函数会先将目标行上方的所有数据逐行向下复制,
|
||||||
|
* 再把最顶端一行清空,从而完成一次标准的消行下移操作。
|
||||||
|
*
|
||||||
|
* @param number 需要被删除的目标行号。
|
||||||
|
*/
|
||||||
void DeleteOneLine(int number)
|
void DeleteOneLine(int number)
|
||||||
{
|
{
|
||||||
// TODO(作业15): 删除指定行,并让其上方所有行整体下移。
|
for (int i = number; i > 0; i--)
|
||||||
UNREFERENCED_PARAMETER(number);
|
{
|
||||||
|
for (int j = 0; j < nGameWidth; j++)
|
||||||
|
{
|
||||||
|
workRegion[i][j] = workRegion[i - 1][j];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 清空最顶端一行
|
||||||
|
for (int j = 0; j < nGameWidth; j++)
|
||||||
|
{
|
||||||
|
workRegion[0][j] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 检查并删除所有已满的行,同时更新当前得分。
|
||||||
|
*
|
||||||
|
* 该函数会从底部向上遍历工作区,判断每一行是否被完全填满。
|
||||||
|
* 如果某一行全部非 0,则调用 DeleteOneLine 删除该行,
|
||||||
|
* 并将该行上方的内容整体下移。为了避免连续满行被漏检,
|
||||||
|
* 删除后会继续检查当前行号。每成功消除 1 行,当前得分增加 100 分。
|
||||||
|
*/
|
||||||
void DeleteLines()
|
void DeleteLines()
|
||||||
{
|
{
|
||||||
// TODO(作业16): 完成消行与计分逻辑。
|
for (int i = nGameHeight - 1; i >= 0; i--)
|
||||||
|
{
|
||||||
|
bool fullLine = true;
|
||||||
|
|
||||||
|
for (int j = 0; j < nGameWidth; j++)
|
||||||
|
{
|
||||||
|
if (workRegion[i][j] == 0)
|
||||||
|
{
|
||||||
|
fullLine = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fullLine)
|
||||||
|
{
|
||||||
|
DeleteOneLine(i);
|
||||||
|
tScore += 100;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user