重新细分项目结构

This commit is contained in:
2026-04-23 19:08:06 +08:00
parent 35c2fab170
commit 05e9f30c15
20 changed files with 55 additions and 48 deletions
+1 -1
View File
@@ -7,7 +7,7 @@
"intelliSenseMode": "windows-gcc-x64", "intelliSenseMode": "windows-gcc-x64",
"cppStandard": "c++17", "cppStandard": "c++17",
"includePath": [ "includePath": [
"${workspaceFolder}\\src" "${workspaceFolder}\\src\\include"
], ],
"defines": [ "defines": [
"UNICODE", "UNICODE",
+1 -1
View File
@@ -8,7 +8,7 @@
"program": "${workspaceFolder}\\.vscode-build\\mingw\\Tetris.exe", "program": "${workspaceFolder}\\.vscode-build\\mingw\\Tetris.exe",
"args": [], "args": [],
"stopAtEntry": false, "stopAtEntry": false,
"cwd": "${workspaceFolder}\\src", "cwd": "${workspaceFolder}",
"environment": [], "environment": [],
"externalConsole": true, "externalConsole": true,
"MIMode": "gdb", "MIMode": "gdb",
+10 -5
View File
@@ -19,8 +19,14 @@
```text ```text
Tereis/ Tereis/
├─ src/ 源代码 ├─ src/
├─ assets/ 图标、背景等资源文件 │ ├─ include/ 头文件
│ ├─ source/ 源文件
│ └─ resources/ Windows 资源脚本
├─ assets/
│ ├─ icons/ 图标资源
│ ├─ images/ 图片资源
│ └─ audio/ 音频资源
├─ .vscode/ VS Code 配置 ├─ .vscode/ VS Code 配置
├─ .vscode-build/ 本地构建输出目录 ├─ .vscode-build/ 本地构建输出目录
├─ report/ 实验报告材料与草稿 ├─ report/ 实验报告材料与草稿
@@ -88,9 +94,9 @@ powershell -NoProfile -ExecutionPolicy Bypass -File .\build-mingw.ps1 -Run
## 资源文件说明 ## 资源文件说明
项目包含 Windows 资源文件 `src/Tetris.rc`,其中定义了图标、菜单、快捷键和关于框等内容。 项目包含 Windows 资源文件 `src/resources/Tetris.rc`,其中定义了图标、菜单、快捷键和关于框等内容。
由于原始 `Tetris.rc` 为 UTF-16 编码,当前构建脚本会在编译时临时转换资源文件编码,并将 `assets/` 中的图标文件一起编译进最终程序,因此资源不再被跳过。 由于原始 `Tetris.rc` 为 UTF-16 编码,当前构建脚本会在编译时临时转换资源文件编码,并将 `assets/icons/` 中的图标文件一起编译进最终程序,因此资源不再被跳过。
## 报告目录 ## 报告目录
@@ -119,4 +125,3 @@ powershell -NoProfile -ExecutionPolicy Bypass -File .\build-mingw.ps1 -Run
- 完善分数与状态提示 - 完善分数与状态提示
- 增加创新功能 - 增加创新功能
- 补充测试截图和实验分析 - 补充测试截图和实验分析
+3 -3
View File
@@ -1,6 +1,6 @@
# VS Code 运行说明 # VS Code 运行说明
1. 用 VS Code 打开本文件所在文件夹: `C:\Users\27282\Desktop\src_学生版` 1. 用 VS Code 打开项目根目录。
2. 安装 VS Code 扩展: `C/C++`,发布者是 `Microsoft` 2. 安装 VS Code 扩展: `C/C++`,发布者是 `Microsoft`
3.`Ctrl+Shift+B` 编译 3.`Ctrl+Shift+B` 编译
4.`F5` 调试运行,或在命令面板执行 `Tasks: Run Task` -> `run Tetris MinGW` 4.`F5` 调试运行,或在命令面板执行 `Tasks: Run Task` -> `run Tetris MinGW`
@@ -8,6 +8,6 @@
说明: 说明:
- 默认配置优先使用系统 `PATH` 中的 `g++.exe` / `gdb.exe`,也兼容 `C:\mingw64\bin\g++.exe` - 默认配置优先使用系统 `PATH` 中的 `g++.exe` / `gdb.exe`,也兼容 `C:\mingw64\bin\g++.exe`
- 源码目录`src`,资源目录 `assets` - 源码目录已按工程结构整理为 `src/include``src/source``src/resources`,资源目录已整理为 `assets/icons``assets/images``assets/audio`
- MinGW 构建输出文件在 `.vscode-build\mingw\Tetris.exe` - MinGW 构建输出文件在 `.vscode-build\mingw\Tetris.exe`
- 由于原项目的 `Tetris.rc` 是 UTF-16,MinGW 暂不编译资源文件;这只影响图标/菜单资源,不影响源码编译运行 - `Tetris.rc` 位于 `src/resources`,构建脚本会在编译时临时转换编码并编译资源文件

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Before

Width:  |  Height:  |  Size: 2.2 MiB

After

Width:  |  Height:  |  Size: 2.2 MiB

+14 -10
View File
@@ -6,10 +6,14 @@ $ErrorActionPreference = "Stop"
$Root = Split-Path -Parent $MyInvocation.MyCommand.Path $Root = Split-Path -Parent $MyInvocation.MyCommand.Path
$ProjectDir = Join-Path $Root "src" $ProjectDir = Join-Path $Root "src"
$IncludeDir = Join-Path $ProjectDir "include"
$SourceDir = Join-Path $ProjectDir "source"
$ResourceDir = Join-Path $ProjectDir "resources"
$AssetsDir = Join-Path $Root "assets" $AssetsDir = Join-Path $Root "assets"
$IconDir = Join-Path $AssetsDir "icons"
$BuildDir = Join-Path $Root ".vscode-build\mingw" $BuildDir = Join-Path $Root ".vscode-build\mingw"
$ExePath = Join-Path $BuildDir "Tetris.exe" $ExePath = Join-Path $BuildDir "Tetris.exe"
$RcPath = Join-Path $ProjectDir "Tetris.rc" $RcPath = Join-Path $ResourceDir "Tetris.rc"
$RcUtf8Path = Join-Path $BuildDir "Tetris.utf8.rc" $RcUtf8Path = Join-Path $BuildDir "Tetris.utf8.rc"
$ResObjPath = Join-Path $BuildDir "Tetris.res.o" $ResObjPath = Join-Path $BuildDir "Tetris.res.o"
@@ -58,22 +62,22 @@ foreach ($Candidate in $WindresCandidates) {
New-Item -ItemType Directory -Force -Path $BuildDir | Out-Null New-Item -ItemType Directory -Force -Path $BuildDir | Out-Null
$Sources = @( $Sources = @(
(Join-Path $ProjectDir "stdafx.cpp"), (Join-Path $SourceDir "stdafx.cpp"),
(Join-Path $ProjectDir "Tetris.cpp"), (Join-Path $SourceDir "Tetris.cpp"),
(Join-Path $ProjectDir "TetrisLogic.cpp"), (Join-Path $SourceDir "TetrisLogic.cpp"),
(Join-Path $ProjectDir "TetrisRender.cpp") (Join-Path $SourceDir "TetrisRender.cpp")
) )
$LinkInputs = @() $LinkInputs = @()
if ($Windres -and (Test-Path $RcPath)) { if ($Windres -and (Test-Path $RcPath)) {
$RcContent = Get-Content -Path $RcPath -Raw -Encoding Unicode $RcContent = Get-Content -Path $RcPath -Raw -Encoding Unicode
$RcContent = $RcContent.Replace('"Tetris.ico"', ('"' + ((Join-Path $AssetsDir "Tetris.ico") -replace '\\', '/') + '"')) $RcContent = $RcContent.Replace('"Tetris.ico"', ('"' + ((Join-Path $IconDir "Tetris.ico") -replace '\\', '/') + '"'))
$RcContent = $RcContent.Replace('"small.ico"', ('"' + ((Join-Path $AssetsDir "small.ico") -replace '\\', '/') + '"')) $RcContent = $RcContent.Replace('"small.ico"', ('"' + ((Join-Path $IconDir "small.ico") -replace '\\', '/') + '"'))
[System.IO.File]::WriteAllText($RcUtf8Path, $RcContent, [System.Text.UTF8Encoding]::new($false)) [System.IO.File]::WriteAllText($RcUtf8Path, $RcContent, [System.Text.UTF8Encoding]::new($false))
& $Windres ` & $Windres `
-I $ProjectDir ` -I $IncludeDir `
$RcUtf8Path ` $RcUtf8Path `
-O coff ` -O coff `
-o $ResObjPath -o $ResObjPath
@@ -94,7 +98,7 @@ if ($Windres -and (Test-Path $RcPath)) {
-DUNICODE ` -DUNICODE `
-D_UNICODE ` -D_UNICODE `
-D_WINDOWS ` -D_WINDOWS `
-I $ProjectDir ` -I $IncludeDir `
@Sources ` @Sources `
@LinkInputs ` @LinkInputs `
-lwinmm ` -lwinmm `
@@ -107,5 +111,5 @@ if ($LASTEXITCODE -ne 0) {
} }
if ($Run) { if ($Run) {
Start-Process -FilePath $ExePath -WorkingDirectory $ProjectDir Start-Process -FilePath $ExePath -WorkingDirectory $Root
} }
+20 -22
View File
@@ -4,50 +4,48 @@
简要说明:完成程序入口、主窗口创建、消息循环和基础对话框处理。 简要说明:完成程序入口、主窗口创建、消息循环和基础对话框处理。
- [ ] `_tWinMain` - `src/Tetris.cpp` - [ ] `_tWinMain` - `src/source/Tetris.cpp`
- [ ] `MyRegisterClass` - `src/Tetris.cpp` - [ ] `MyRegisterClass` - `src/source/Tetris.cpp`
- [ ] `InitInstance` - `src/Tetris.cpp` - [ ] `InitInstance` - `src/source/Tetris.cpp`
- [ ] `WndProc` - `src/Tetris.cpp` - [ ] `WndProc` - `src/source/Tetris.cpp`
- [ ] `About` - `src/Tetris.cpp` - [ ] `About` - `src/source/Tetris.cpp`
## 第二阶段:游戏区域与状态初始化 ## 第二阶段:游戏区域与状态初始化
简要说明:完成游戏初始状态建立和重新开始相关逻辑。 简要说明:完成游戏初始状态建立和重新开始相关逻辑。
- [ ] `Restart` - `src/TetrisLogic.cpp` - [ ] `Restart` - `src/source/TetrisLogic.cpp`
## 第三阶段:方块生成、移动与旋转 ## 第三阶段:方块生成、移动与旋转
简要说明:完成方块的基础操作,包括下落、左右移动、旋转和快速到底。 简要说明:完成方块的基础操作,包括下落、左右移动、旋转和快速到底。
- [ ] `MoveDown` - `src/TetrisLogic.cpp` - [ ] `MoveDown` - `src/source/TetrisLogic.cpp`
- [ ] `MoveLeft` - `src/TetrisLogic.cpp` - [ ] `MoveLeft` - `src/source/TetrisLogic.cpp`
- [ ] `MoveRight` - `src/TetrisLogic.cpp` - [ ] `MoveRight` - `src/source/TetrisLogic.cpp`
- [ ] `Rotate` - `src/TetrisLogic.cpp` - [ ] `Rotate` - `src/source/TetrisLogic.cpp`
- [ ] `DropDown` - `src/TetrisLogic.cpp` - [ ] `DropDown` - `src/source/TetrisLogic.cpp`
## 第四阶段:碰撞检测与方块固定 ## 第四阶段:碰撞检测与方块固定
简要说明:完成越界判断、碰撞检测、方块落地固定和结束判定。 简要说明:完成越界判断、碰撞检测、方块落地固定和结束判定。
- [ ] `CanMoveDown` - `src/TetrisLogic.cpp` - [ ] `CanMoveDown` - `src/source/TetrisLogic.cpp`
- [ ] `CanMoveLeft` - `src/TetrisLogic.cpp` - [ ] `CanMoveLeft` - `src/source/TetrisLogic.cpp`
- [ ] `CanMoveRight` - `src/TetrisLogic.cpp` - [ ] `CanMoveRight` - `src/source/TetrisLogic.cpp`
- [ ] `Fixing` - `src/TetrisLogic.cpp` - [ ] `Fixing` - `src/source/TetrisLogic.cpp`
- [ ] `GameOver` - `src/TetrisLogic.cpp` - [ ] `GameOver` - `src/source/TetrisLogic.cpp`
## 第五阶段:消除逻辑与分数系统 ## 第五阶段:消除逻辑与分数系统
简要说明:完成消行、行下移和得分更新等核心反馈机制。 简要说明:完成消行、行下移和得分更新等核心反馈机制。
- [ ] `DeleteOneLine` - `src/TetrisLogic.cpp` - [ ] `DeleteOneLine` - `src/source/TetrisLogic.cpp`
- [ ] `DeleteLines` - `src/TetrisLogic.cpp` - [ ] `DeleteLines` - `src/source/TetrisLogic.cpp`
## 第六阶段:界面绘制与扩展功能 ## 第六阶段:界面绘制与扩展功能
简要说明:完成游戏界面绘制,并实现落点预测等增强功能。 简要说明:完成游戏界面绘制,并实现落点预测等增强功能。
- [ ] `ComputeTarget` - `src/TetrisLogic.cpp` - [ ] `ComputeTarget` - `src/source/TetrisLogic.cpp`
- [ ] `TDrawScreen` - `src/TetrisRender.cpp` - [ ] `TDrawScreen` - `src/source/TetrisRender.cpp`
## 第七阶段:创新扩展
+6 -6
View File
@@ -23,12 +23,13 @@
## 2 总体框架 ## 2 总体框架
项目源码位于 `src/` 目录,整体上可分为以下几个部分: 项目源码位于 `src/` 目录,按照工程结构进一步划分为 `include``source``resources` 三个子目录,整体上可分为以下几个部分:
- `Tetris.cpp`:程序入口、窗口创建与消息处理 - `src/source/Tetris.cpp`:程序入口、窗口创建与消息处理
- `TetrisLogic.cpp`:核心游戏逻辑,如移动、旋转、消行和结束判定 - `src/source/TetrisLogic.cpp`:核心游戏逻辑,如移动、旋转、消行和结束判定
- `TetrisRender.cpp`:界面绘制 - `src/source/TetrisRender.cpp`:界面绘制
- `Tetris.h`:全局常量、结构体与函数声明 - `src/include/Tetris.h`:全局常量、结构体与函数声明
- `src/resources/Tetris.rc`:窗口图标、菜单与对话框等资源定义
- `build-mingw.ps1`MinGW 构建脚本 - `build-mingw.ps1`MinGW 构建脚本
整体流程可以概括为:程序启动后创建窗口并初始化数据,随后在消息循环中响应用户输入和定时事件,驱动游戏状态更新,再由绘图模块将当前状态显示到窗口中。 整体流程可以概括为:程序启动后创建窗口并初始化数据,随后在消息循环中响应用户输入和定时事件,驱动游戏状态更新,再由绘图模块将当前状态显示到窗口中。
@@ -107,4 +108,3 @@
## 6 结论 ## 6 结论
本实验完成了一个基于 C++ 和 Windows API 的俄罗斯方块程序的整理与验证工作。通过对源码结构、功能模块和构建流程的分析,可以看出该项目已经具备较完整的程序框架和基础功能。实验过程中,不仅实现了游戏核心逻辑,也进一步理解了图形界面程序的组织方式和工程调试方法。后续若继续完善,可从界面效果、资源管理、可维护性和测试完整性等方面进一步优化。 本实验完成了一个基于 C++ 和 Windows API 的俄罗斯方块程序的整理与验证工作。通过对源码结构、功能模块和构建流程的分析,可以看出该项目已经具备较完整的程序框架和基础功能。实验过程中,不仅实现了游戏核心逻辑,也进一步理解了图形界面程序的组织方式和工程调试方法。后续若继续完善,可从界面效果、资源管理、可维护性和测试完整性等方面进一步优化。