diff --git a/list.md b/list.md new file mode 100644 index 0000000..f2f223c --- /dev/null +++ b/list.md @@ -0,0 +1,110 @@ +# 项目开发阶段划分 + +本项目可以按开发过程拆分为 6 个阶段完成,符合“分阶段实现程序”的写法,也便于后续直接写入实验报告。 + +## 第一阶段:窗口创建与程序框架搭建 + +本阶段需要完成的内容: + +- 创建 Windows 程序入口。 +- 注册窗口类并创建主窗口。 +- 建立消息循环和基础消息处理机制。 +- 完成程序启动、关闭、重绘等基础框架。 +- 为后续游戏逻辑和绘图模块提供运行环境。 + +本阶段目标: + +- 程序能够成功启动。 +- 能显示游戏主窗口。 +- 窗口能正常响应关闭和刷新操作。 + +## 第二阶段:游戏区域与方块数据结构设计 + +本阶段需要完成的内容: + +- 定义游戏区域的宽度、高度和网格大小。 +- 设计方块坐标结构和不同类型方块的数据表示方式。 +- 建立游戏地图数组,用于保存已落地方块状态。 +- 定义当前方块、下一方块、分数、暂停、结束标志等全局状态。 +- 准备颜色数据和基础常量。 + +本阶段目标: + +- 程序内部具备完整的游戏状态表示能力。 +- 可以为后续方块运动和碰撞判断提供数据基础。 + +## 第三阶段:方块生成、移动与旋转功能 + +本阶段需要完成的内容: + +- 实现新方块生成。 +- 实现方块自动下落。 +- 实现左移、右移操作。 +- 实现方块旋转。 +- 实现快速下落或直接落到底部的功能。 +- 保证键盘输入可以正确控制当前方块。 + +本阶段目标: + +- 方块可以正常出现。 +- 玩家可以通过键盘控制方块移动和旋转。 +- 方块运动过程符合基本游戏规则。 + +## 第四阶段:碰撞检测与方块固定逻辑 + +本阶段需要完成的内容: + +- 判断方块是否可以继续下落。 +- 判断方块左右移动时是否越界或与已有方块冲突。 +- 判断旋转后是否发生重叠或越界。 +- 当方块落到底部或接触已有方块时,将其固定到游戏区域中。 +- 实现游戏结束判定。 + +本阶段目标: + +- 方块不会穿过边界。 +- 方块不会与已固定方块错误重叠。 +- 游戏在堆叠到顶部时能够正确结束。 + +## 第五阶段:消除逻辑与分数系统 + +本阶段需要完成的内容: + +- 检测某一行是否已被填满。 +- 实现整行消除。 +- 在消除后更新上方方块数据。 +- 设计分数统计规则。 +- 在界面中显示当前分数或游戏状态。 + +本阶段目标: + +- 玩家完成满行后可以正确消除。 +- 分数能够随着游戏进展更新。 +- 游戏具备基本反馈机制。 + +## 第六阶段:界面完善与创新功能扩展 + +本阶段需要完成的内容: + +- 完善游戏界面绘制效果。 +- 显示下一个方块、暂停状态、结束提示等信息。 +- 加入资源文件,如图标、菜单、关于框。 +- 优化构建脚本和工程配置,确保项目可稳定运行。 +- 根据课程设计要求加入创新功能。 + +可选创新功能示例: + +- 预览下一方块 +- 阴影落点提示 +- 暂停与继续 +- 重新开始 +- 难度提升 +- 背景图或界面美化 +- 音效或动画效果 + +本阶段目标: + +- 程序界面更加完整。 +- 功能更加接近完整游戏。 +- 项目达到课程大作业展示要求。 + diff --git a/report/README.md b/report/README.md new file mode 100644 index 0000000..5fed20b --- /dev/null +++ b/report/README.md @@ -0,0 +1,20 @@ +# 实验报告目录 + +本目录用于整理《大学计算》程序设计大作业实验报告材料。 + +建议工作流程: + +1. 先在 `report.md` 中撰写正文。 +2. 截图放到 `images/`。 +3. 需要引用的代码片段整理到 `code-snippets/`。 +4. 最终再同步到 Word 模板,导出到 `submission/`。 + +目录说明: + +- `report.md`:实验报告正文草稿 +- `outline.md`:按模板拆好的章节提纲 +- `notes.md`:写作要点和待补充内容 +- `images/`:界面截图、流程图、结果图 +- `code-snippets/`:准备放入报告的关键代码 +- `submission/`:最终提交版文档 + diff --git a/report/code-snippets/.gitkeep b/report/code-snippets/.gitkeep new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/report/code-snippets/.gitkeep @@ -0,0 +1 @@ + diff --git a/report/images/.gitkeep b/report/images/.gitkeep new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/report/images/.gitkeep @@ -0,0 +1 @@ + diff --git a/report/notes.md b/report/notes.md new file mode 100644 index 0000000..737db54 --- /dev/null +++ b/report/notes.md @@ -0,0 +1,20 @@ +# 写作备注 + +后续补充这些内容: + +- 封面姓名、学号、教师、学院 +- 摘要压缩到 500 字以内 +- 依据实际代码把第 3、4 章的小节标题改成更准确的模块名 +- 插入总体框架流程图 +- 插入程序运行截图 +- 插入关键代码片段并配说明 +- 补充完整系统测试结果与分析 +- 最终同步到 Word 模板并更新目录 + +建议可改成的模块标题: + +- 窗口创建与消息处理 +- 游戏逻辑设计与实现 +- 图形绘制与界面显示 +- 工程构建与资源配置 + diff --git a/report/outline.md b/report/outline.md new file mode 100644 index 0000000..69c0a39 --- /dev/null +++ b/report/outline.md @@ -0,0 +1,81 @@ +# 实验报告提纲 + +## 封面信息 + +- 课程:大学计算 +- 实验名称:程序设计大作业 +- 姓名: +- 学号: +- 授课教员: +- 所属学院: + +## 摘要 + +- 背景和意义 +- 实验对象或目标 +- 实验方法 +- 实验结果 + +## 关键词 + +- 关键词 1 +- 关键词 2 +- 关键词 3 + +## 1 引言 + +- 项目背景和意义 +- 相关工作或同类实现概况 +- 本实验要解决的问题 +- 本实验的主要内容与结果 + +## 2 总体框架 + +- 技术选型 +- 项目整体结构 +- 主要模块划分 +- 开发进度安排 +- 总体流程图 + +## 3 功能模块一 + +### 3.1 实验内容 + +- 实验思路 +- 实验代码 +- 实验结果 + +### 3.2 实验内容 + +- 实验思路 +- 实验代码 +- 实验结果 + +## 4 功能模块二 + +### 4.1 实验内容 + +- 实验思路 +- 实验代码 +- 实验结果 + +### 4.2 实验内容 + +- 实验思路 +- 实验代码 +- 实验结果 + +## 5 实验结果与分析 + +- 完整系统测试结果 +- 性能或功能达成度分析 +- 图表与现象说明 +- 影响因素与改进方向 + +## 6 结论 + +- 方法总结 +- 结果总结 +- 收获与体会 +- 问题与建议 + diff --git a/report/report.md b/report/report.md new file mode 100644 index 0000000..f16f235 --- /dev/null +++ b/report/report.md @@ -0,0 +1,110 @@ +# 大学计算实验报告 + +## 封面信息 + +- 姓名: +- 学号: +- 授课教员: +- 所属学院: + +## 摘要 + +本文围绕 `Tereis` 项目的设计与实现展开。项目目标是实现一个基于 Windows API 与 C++ 的俄罗斯方块程序,完成基础游戏逻辑、界面绘制、输入响应与结果展示等功能。实验过程中,采用模块化设计方式,将程序拆分为窗口管理、游戏逻辑、渲染绘制和资源配置等部分,并通过 MinGW 构建脚本完成编译与运行验证。最终实现了程序的基本运行,并能够完成方块生成、移动、旋转、消行与结束判定等核心功能。后续可继续在资源管理、界面表现与可维护性方面进行优化。 + +## 关键词 + +俄罗斯方块;C++;Windows API;MinGW;程序设计 + +## 1 引言 + +本实验的目标是完成一个桌面端俄罗斯方块程序,并通过实际编码过程加深对 C++ 程序结构设计、Windows 图形界面开发以及模块化实现方式的理解。俄罗斯方块作为经典游戏,具有规则明确、逻辑完整、适合分模块实现等特点,适合作为程序设计综合实验项目。 + +在本项目中,程序以 Windows API 为基础,结合消息循环、图形绘制和键盘输入处理完成交互式游戏窗口。实验重点不仅在于实现游戏功能本身,也在于梳理一个完整程序从工程组织、编译运行到功能验证的开发过程。 + +## 2 总体框架 + +项目源码位于 `src/` 目录,整体上可分为以下几个部分: + +- `Tetris.cpp`:程序入口、窗口创建与消息处理 +- `TetrisLogic.cpp`:核心游戏逻辑,如移动、旋转、消行和结束判定 +- `TetrisRender.cpp`:界面绘制 +- `Tetris.h`:全局常量、结构体与函数声明 +- `build-mingw.ps1`:MinGW 构建脚本 + +整体流程可以概括为:程序启动后创建窗口并初始化数据,随后在消息循环中响应用户输入和定时事件,驱动游戏状态更新,再由绘图模块将当前状态显示到窗口中。 + +## 3 功能模块一:游戏主体框架 + +### 3.1 窗口创建与消息处理 + +#### 实验思路 + +本部分负责创建主窗口、注册窗口类并处理 Windows 消息。通过消息循环机制,程序能够持续响应键盘输入、绘制请求以及定时器事件,从而构成游戏运行的基础框架。 + +#### 实验代码 + +此处后续补充 `Tetris.cpp` 中的窗口初始化和消息分发关键代码。 + +#### 实验结果 + +完成本部分后,程序能够正常创建游戏窗口,并具备基础的事件响应能力,为后续游戏逻辑实现提供运行环境。 + +### 3.2 游戏逻辑实现 + +#### 实验思路 + +本部分围绕俄罗斯方块的核心规则展开,实现方块生成、左右移动、下落、旋转、到底固定、消除整行以及游戏结束判定等逻辑。通过二维数组表示游戏区域,并结合方块数据结构管理当前状态。 + +#### 实验代码 + +此处后续补充 `TetrisLogic.cpp` 中的关键数据结构和函数实现。 + +#### 实验结果 + +完成本部分后,程序能够正确处理方块运动与碰撞逻辑,并在满足条件时完成消行和结束判定,达成游戏基本要求。 + +## 4 功能模块二:界面绘制与工程构建 + +### 4.1 界面绘制 + +#### 实验思路 + +绘图部分负责根据当前游戏状态刷新窗口内容,包括游戏区域、方块显示和必要的界面元素。该部分通过 Windows GDI 接口完成图形绘制。 + +#### 实验代码 + +此处后续补充 `TetrisRender.cpp` 中的绘图代码片段。 + +#### 实验结果 + +完成本部分后,程序可以将逻辑状态直观显示在窗口中,使用户能够观察游戏过程与结果。 + +### 4.2 工程构建与运行验证 + +#### 实验思路 + +为了适应当前开发环境,项目使用 `build-mingw.ps1` 作为构建脚本,统一处理源文件编译、资源文件转换与链接流程,从而保证项目能够在新的目录位置下稳定构建。 + +#### 实验代码 + +此处后续补充构建脚本中的关键步骤,如编译器定位、资源文件处理和链接流程。 + +#### 实验结果 + +完成本部分后,项目可以通过脚本一键完成构建,并生成可执行文件,说明工程配置已经满足当前实验环境要求。 + +## 5 实验结果与分析 + +从当前实验结果看,项目已经能够完成基本编译与运行,核心游戏逻辑与图形界面具备基础可用性。通过构建脚本适配和资源文件处理,项目在迁移目录后仍能保持正常构建,说明工程组织具有一定的稳定性。 + +后续在正式报告中,可以加入以下内容: + +- 程序运行截图 +- 不同操作下的界面表现 +- 消行、结束判定等测试结果 +- 可能存在的问题与改进方向 + +## 6 结论 + +本实验完成了一个基于 C++ 和 Windows API 的俄罗斯方块程序的整理与验证工作。通过对源码结构、功能模块和构建流程的分析,可以看出该项目已经具备较完整的程序框架和基础功能。实验过程中,不仅实现了游戏核心逻辑,也进一步理解了图形界面程序的组织方式和工程调试方法。后续若继续完善,可从界面效果、资源管理、可维护性和测试完整性等方面进一步优化。 + diff --git a/report/submission/.gitkeep b/report/submission/.gitkeep new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/report/submission/.gitkeep @@ -0,0 +1 @@ +