refactor: 项目全面重构 — 从单文件过程式重写为模块化 OOP
**问题背景**
原项目全部逻辑集中在 main.cpp(1468 行),大量全局变量、4 方向逻辑
复制粘贴 4 遍、场景通过递归函数调用跳转(栈溢出隐患),难以维护扩展。
**重构内容**
文件架构(新增 src/ 目录):
- src/Game.h/.cpp — 状态机驱动主循环,Scene 枚举消除递归跳转
- src/AssetManager.h/.cpp — 纹理/字体/BGM 加载与缓存管理
- src/Renderer.h/.cpp — SDL 渲染封装(清屏/纹理/文字/提交)
- src/Map.h/.cpp — 地图数据 + 统一碰撞检测
- src/Tank.h/.cpp — 坦克类,dx()/dy() 方向向量消除 4x 复制粘贴
- src/Bullet.h/.cpp — 子弹类,peekAt()/step() 封装移动逻辑
- src/UI.h — 按钮区域常量 + 命中检测
核心改进:
- 全局变量清零 → 全部归入 Game 类实例管理
- 场景递归跳转 → Scene 枚举状态机,主循环驱动
- 4 方向复制粘贴 → 方向向量 {dx,dy} 表统一处理
- 修复 EnemiesMove 中循环变量 i 遮蔽 bug
- clock() → SDL_GetTicks(),跨平台时间精度
- 清理死代码 map1[50]、旧注释、未使用常量
- data_config.h 精简为纯常量
文件变更:
- 新增 7 个源文件(src/下)
- 重写 main.cpp(1468 → 6 行入口)
- 重写 data_config.h、CMakeLists.txt
- 删除 tank.h、bullet.h、map.h、map.cpp(被新架构替代)
- 更新 .gitignore(build_Debug/、.hermes/ 等)
This commit is contained in:
+17
-8
@@ -7,26 +7,32 @@ project(tank_battles_on_the_scrap_paper
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
# ── SDL2 依赖 ──
|
||||
find_package(SDL2 REQUIRED)
|
||||
find_package(SDL2_image REQUIRED)
|
||||
find_package(SDL2_mixer REQUIRED)
|
||||
find_package(SDL2_ttf REQUIRED)
|
||||
|
||||
# ── 源文件 ──
|
||||
set(SOURCES
|
||||
tank_battles_on_the_scrap_paper/main.cpp
|
||||
tank_battles_on_the_scrap_paper/map.cpp
|
||||
tank_battles_on_the_scrap_paper/src/AssetManager.cpp
|
||||
tank_battles_on_the_scrap_paper/src/Renderer.cpp
|
||||
tank_battles_on_the_scrap_paper/src/Map.cpp
|
||||
tank_battles_on_the_scrap_paper/src/Bullet.cpp
|
||||
tank_battles_on_the_scrap_paper/src/Tank.cpp
|
||||
tank_battles_on_the_scrap_paper/src/Game.cpp
|
||||
)
|
||||
|
||||
set(HEADERS
|
||||
tank_battles_on_the_scrap_paper/bullet.h
|
||||
tank_battles_on_the_scrap_paper/tank.h
|
||||
tank_battles_on_the_scrap_paper/map.h
|
||||
tank_battles_on_the_scrap_paper/data_config.h
|
||||
tank_battles_on_the_scrap_paper/src/AssetManager.h
|
||||
tank_battles_on_the_scrap_paper/src/Renderer.h
|
||||
tank_battles_on_the_scrap_paper/src/Map.h
|
||||
tank_battles_on_the_scrap_paper/src/Bullet.h
|
||||
tank_battles_on_the_scrap_paper/src/Tank.h
|
||||
tank_battles_on_the_scrap_paper/src/Game.h
|
||||
tank_battles_on_the_scrap_paper/src/UI.h
|
||||
)
|
||||
|
||||
# ── 可执行文件 ──
|
||||
add_executable(${PROJECT_NAME} ${SOURCES} ${HEADERS})
|
||||
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE
|
||||
@@ -36,7 +42,10 @@ target_link_libraries(${PROJECT_NAME} PRIVATE
|
||||
SDL2_ttf::SDL2_ttf
|
||||
)
|
||||
|
||||
# ── 复制资源文件到构建目录 ──
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE
|
||||
tank_battles_on_the_scrap_paper
|
||||
)
|
||||
|
||||
file(COPY
|
||||
tank_battles_on_the_scrap_paper/images/
|
||||
DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/images/
|
||||
|
||||
Reference in New Issue
Block a user