重新细分项目结构
This commit is contained in:
Vendored
+1
-1
@@ -7,7 +7,7 @@
|
||||
"intelliSenseMode": "windows-gcc-x64",
|
||||
"cppStandard": "c++17",
|
||||
"includePath": [
|
||||
"${workspaceFolder}\\src"
|
||||
"${workspaceFolder}\\src\\include"
|
||||
],
|
||||
"defines": [
|
||||
"UNICODE",
|
||||
|
||||
Vendored
+1
-1
@@ -8,7 +8,7 @@
|
||||
"program": "${workspaceFolder}\\.vscode-build\\mingw\\Tetris.exe",
|
||||
"args": [],
|
||||
"stopAtEntry": false,
|
||||
"cwd": "${workspaceFolder}\\src",
|
||||
"cwd": "${workspaceFolder}",
|
||||
"environment": [],
|
||||
"externalConsole": true,
|
||||
"MIMode": "gdb",
|
||||
|
||||
@@ -19,8 +19,14 @@
|
||||
|
||||
```text
|
||||
Tereis/
|
||||
├─ src/ 源代码
|
||||
├─ assets/ 图标、背景等资源文件
|
||||
├─ src/
|
||||
│ ├─ include/ 头文件
|
||||
│ ├─ source/ 源文件
|
||||
│ └─ resources/ Windows 资源脚本
|
||||
├─ assets/
|
||||
│ ├─ icons/ 图标资源
|
||||
│ ├─ images/ 图片资源
|
||||
│ └─ audio/ 音频资源
|
||||
├─ .vscode/ VS Code 配置
|
||||
├─ .vscode-build/ 本地构建输出目录
|
||||
├─ 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
@@ -1,6 +1,6 @@
|
||||
# VS Code 运行说明
|
||||
|
||||
1. 用 VS Code 打开本文件所在文件夹: `C:\Users\27282\Desktop\src_学生版`
|
||||
1. 用 VS Code 打开项目根目录。
|
||||
2. 安装 VS Code 扩展: `C/C++`,发布者是 `Microsoft`
|
||||
3. 按 `Ctrl+Shift+B` 编译
|
||||
4. 按 `F5` 调试运行,或在命令面板执行 `Tasks: Run Task` -> `run Tetris MinGW`
|
||||
@@ -8,6 +8,6 @@
|
||||
说明:
|
||||
|
||||
- 默认配置优先使用系统 `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`。
|
||||
- 由于原项目的 `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
@@ -6,10 +6,14 @@ $ErrorActionPreference = "Stop"
|
||||
|
||||
$Root = Split-Path -Parent $MyInvocation.MyCommand.Path
|
||||
$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"
|
||||
$IconDir = Join-Path $AssetsDir "icons"
|
||||
$BuildDir = Join-Path $Root ".vscode-build\mingw"
|
||||
$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"
|
||||
$ResObjPath = Join-Path $BuildDir "Tetris.res.o"
|
||||
|
||||
@@ -58,22 +62,22 @@ foreach ($Candidate in $WindresCandidates) {
|
||||
New-Item -ItemType Directory -Force -Path $BuildDir | Out-Null
|
||||
|
||||
$Sources = @(
|
||||
(Join-Path $ProjectDir "stdafx.cpp"),
|
||||
(Join-Path $ProjectDir "Tetris.cpp"),
|
||||
(Join-Path $ProjectDir "TetrisLogic.cpp"),
|
||||
(Join-Path $ProjectDir "TetrisRender.cpp")
|
||||
(Join-Path $SourceDir "stdafx.cpp"),
|
||||
(Join-Path $SourceDir "Tetris.cpp"),
|
||||
(Join-Path $SourceDir "TetrisLogic.cpp"),
|
||||
(Join-Path $SourceDir "TetrisRender.cpp")
|
||||
)
|
||||
|
||||
$LinkInputs = @()
|
||||
|
||||
if ($Windres -and (Test-Path $RcPath)) {
|
||||
$RcContent = Get-Content -Path $RcPath -Raw -Encoding Unicode
|
||||
$RcContent = $RcContent.Replace('"Tetris.ico"', ('"' + ((Join-Path $AssetsDir "Tetris.ico") -replace '\\', '/') + '"'))
|
||||
$RcContent = $RcContent.Replace('"small.ico"', ('"' + ((Join-Path $AssetsDir "small.ico") -replace '\\', '/') + '"'))
|
||||
$RcContent = $RcContent.Replace('"Tetris.ico"', ('"' + ((Join-Path $IconDir "Tetris.ico") -replace '\\', '/') + '"'))
|
||||
$RcContent = $RcContent.Replace('"small.ico"', ('"' + ((Join-Path $IconDir "small.ico") -replace '\\', '/') + '"'))
|
||||
[System.IO.File]::WriteAllText($RcUtf8Path, $RcContent, [System.Text.UTF8Encoding]::new($false))
|
||||
|
||||
& $Windres `
|
||||
-I $ProjectDir `
|
||||
-I $IncludeDir `
|
||||
$RcUtf8Path `
|
||||
-O coff `
|
||||
-o $ResObjPath
|
||||
@@ -94,7 +98,7 @@ if ($Windres -and (Test-Path $RcPath)) {
|
||||
-DUNICODE `
|
||||
-D_UNICODE `
|
||||
-D_WINDOWS `
|
||||
-I $ProjectDir `
|
||||
-I $IncludeDir `
|
||||
@Sources `
|
||||
@LinkInputs `
|
||||
-lwinmm `
|
||||
@@ -107,5 +111,5 @@ if ($LASTEXITCODE -ne 0) {
|
||||
}
|
||||
|
||||
if ($Run) {
|
||||
Start-Process -FilePath $ExePath -WorkingDirectory $ProjectDir
|
||||
Start-Process -FilePath $ExePath -WorkingDirectory $Root
|
||||
}
|
||||
|
||||
@@ -4,50 +4,48 @@
|
||||
|
||||
简要说明:完成程序入口、主窗口创建、消息循环和基础对话框处理。
|
||||
|
||||
- [ ] `_tWinMain` - `src/Tetris.cpp`
|
||||
- [ ] `MyRegisterClass` - `src/Tetris.cpp`
|
||||
- [ ] `InitInstance` - `src/Tetris.cpp`
|
||||
- [ ] `WndProc` - `src/Tetris.cpp`
|
||||
- [ ] `About` - `src/Tetris.cpp`
|
||||
- [ ] `_tWinMain` - `src/source/Tetris.cpp`
|
||||
- [ ] `MyRegisterClass` - `src/source/Tetris.cpp`
|
||||
- [ ] `InitInstance` - `src/source/Tetris.cpp`
|
||||
- [ ] `WndProc` - `src/source/Tetris.cpp`
|
||||
- [ ] `About` - `src/source/Tetris.cpp`
|
||||
|
||||
## 第二阶段:游戏区域与状态初始化
|
||||
|
||||
简要说明:完成游戏初始状态建立和重新开始相关逻辑。
|
||||
|
||||
- [ ] `Restart` - `src/TetrisLogic.cpp`
|
||||
- [ ] `Restart` - `src/source/TetrisLogic.cpp`
|
||||
|
||||
## 第三阶段:方块生成、移动与旋转
|
||||
|
||||
简要说明:完成方块的基础操作,包括下落、左右移动、旋转和快速到底。
|
||||
|
||||
- [ ] `MoveDown` - `src/TetrisLogic.cpp`
|
||||
- [ ] `MoveLeft` - `src/TetrisLogic.cpp`
|
||||
- [ ] `MoveRight` - `src/TetrisLogic.cpp`
|
||||
- [ ] `Rotate` - `src/TetrisLogic.cpp`
|
||||
- [ ] `DropDown` - `src/TetrisLogic.cpp`
|
||||
- [ ] `MoveDown` - `src/source/TetrisLogic.cpp`
|
||||
- [ ] `MoveLeft` - `src/source/TetrisLogic.cpp`
|
||||
- [ ] `MoveRight` - `src/source/TetrisLogic.cpp`
|
||||
- [ ] `Rotate` - `src/source/TetrisLogic.cpp`
|
||||
- [ ] `DropDown` - `src/source/TetrisLogic.cpp`
|
||||
|
||||
## 第四阶段:碰撞检测与方块固定
|
||||
|
||||
简要说明:完成越界判断、碰撞检测、方块落地固定和结束判定。
|
||||
|
||||
- [ ] `CanMoveDown` - `src/TetrisLogic.cpp`
|
||||
- [ ] `CanMoveLeft` - `src/TetrisLogic.cpp`
|
||||
- [ ] `CanMoveRight` - `src/TetrisLogic.cpp`
|
||||
- [ ] `Fixing` - `src/TetrisLogic.cpp`
|
||||
- [ ] `GameOver` - `src/TetrisLogic.cpp`
|
||||
- [ ] `CanMoveDown` - `src/source/TetrisLogic.cpp`
|
||||
- [ ] `CanMoveLeft` - `src/source/TetrisLogic.cpp`
|
||||
- [ ] `CanMoveRight` - `src/source/TetrisLogic.cpp`
|
||||
- [ ] `Fixing` - `src/source/TetrisLogic.cpp`
|
||||
- [ ] `GameOver` - `src/source/TetrisLogic.cpp`
|
||||
|
||||
## 第五阶段:消除逻辑与分数系统
|
||||
|
||||
简要说明:完成消行、行下移和得分更新等核心反馈机制。
|
||||
|
||||
- [ ] `DeleteOneLine` - `src/TetrisLogic.cpp`
|
||||
- [ ] `DeleteLines` - `src/TetrisLogic.cpp`
|
||||
- [ ] `DeleteOneLine` - `src/source/TetrisLogic.cpp`
|
||||
- [ ] `DeleteLines` - `src/source/TetrisLogic.cpp`
|
||||
|
||||
## 第六阶段:界面绘制与扩展功能
|
||||
|
||||
简要说明:完成游戏界面绘制,并实现落点预测等增强功能。
|
||||
|
||||
- [ ] `ComputeTarget` - `src/TetrisLogic.cpp`
|
||||
- [ ] `TDrawScreen` - `src/TetrisRender.cpp`
|
||||
|
||||
## 第七阶段:创新扩展
|
||||
- [ ] `ComputeTarget` - `src/source/TetrisLogic.cpp`
|
||||
- [ ] `TDrawScreen` - `src/source/TetrisRender.cpp`
|
||||
|
||||
+6
-6
@@ -23,12 +23,13 @@
|
||||
|
||||
## 2 总体框架
|
||||
|
||||
项目源码位于 `src/` 目录,整体上可分为以下几个部分:
|
||||
项目源码位于 `src/` 目录,按照工程结构进一步划分为 `include`、`source` 和 `resources` 三个子目录,整体上可分为以下几个部分:
|
||||
|
||||
- `Tetris.cpp`:程序入口、窗口创建与消息处理
|
||||
- `TetrisLogic.cpp`:核心游戏逻辑,如移动、旋转、消行和结束判定
|
||||
- `TetrisRender.cpp`:界面绘制
|
||||
- `Tetris.h`:全局常量、结构体与函数声明
|
||||
- `src/source/Tetris.cpp`:程序入口、窗口创建与消息处理
|
||||
- `src/source/TetrisLogic.cpp`:核心游戏逻辑,如移动、旋转、消行和结束判定
|
||||
- `src/source/TetrisRender.cpp`:界面绘制
|
||||
- `src/include/Tetris.h`:全局常量、结构体与函数声明
|
||||
- `src/resources/Tetris.rc`:窗口图标、菜单与对话框等资源定义
|
||||
- `build-mingw.ps1`:MinGW 构建脚本
|
||||
|
||||
整体流程可以概括为:程序启动后创建窗口并初始化数据,随后在消息循环中响应用户输入和定时事件,驱动游戏状态更新,再由绘图模块将当前状态显示到窗口中。
|
||||
@@ -107,4 +108,3 @@
|
||||
## 6 结论
|
||||
|
||||
本实验完成了一个基于 C++ 和 Windows API 的俄罗斯方块程序的整理与验证工作。通过对源码结构、功能模块和构建流程的分析,可以看出该项目已经具备较完整的程序框架和基础功能。实验过程中,不仅实现了游戏核心逻辑,也进一步理解了图形界面程序的组织方式和工程调试方法。后续若继续完善,可从界面效果、资源管理、可维护性和测试完整性等方面进一步优化。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user