# SDD Tetris **Repository Path**: bllose/sdd-tetris ## Basic Information - **Project Name**: SDD Tetris - **Description**: 基于 Spec-Driven Development 开发的俄罗斯方块 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-07-12 - **Last Updated**: 2026-10-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 俄罗斯方块 (Tetris) — C++ 控制台游戏 一个用 C++11 写的俄罗斯方块,在终端(黑框)里运行。 --- ## 🎮 如何运行 ### 第一步:编译 在 VS Code 的终端里输入: ```bash g++ -std=c++11 -o tetris.exe main.cpp game.cpp board.cpp piece.cpp renderer.cpp input.cpp ``` 如果看到光标跳到下一行、没有报错,说明编译成功,当前目录下会出现 `tetris.exe`。 ### 第二步:运行 继续在终端输入: ```bash ./tetris.exe ``` 游戏就启动了。 ### 第三步:玩 | 按键 | 作用 | |------|------| | `←` `→` | 左右移动 | | `↑` | 旋转 | | `↓` | 加速下落 | | `Space`(空格) | 直接落底 | | `P` | 暂停 / 继续 | | `Q` | 退出 | --- ## 📁 项目结构(每个文件是干什么的) ``` . ├── main.cpp ← 启动入口,游戏主循环在这里 ├── board.h / board.cpp ← 游戏面板:10列×20行的网格 ├── piece.h / piece.cpp ← 7种方块(I/O/T/S/Z/J/L)和旋转 ├── game.h / game.cpp ← 游戏规则:碰撞检测、消行、计分 ├── renderer.h/.cpp ← 显示:把面板画到终端上 ├── input.h / input.cpp ← 输入:读取键盘按键 │ ├── test_board.cpp ← 测试:检查面板功能是否正确 ├── test_piece.cpp ← 测试:检查方块旋转是否正确 ├── test_game.cpp ← 测试:检查游戏逻辑是否正确 │ ├── SPEC_BOARD.md ← 设计文档:面板的详细规范 ├── SPEC_PIECES.md ← 设计文档:方块的详细规范 ├── SPEC_GAME.md ← 设计文档:游戏逻辑的详细规范 ├── SPEC_RENDERER.md ← 设计文档:显示和输入的详细规范 │ ├── Makefile ← 编译脚本:敲 make 就能编译 └── README.md ← 这个文件 ``` --- ## 🧩 代码逻辑速览 ``` main.cpp 主循环: 1. 检测键盘输入 → 左右移动/旋转/下落 2. 定时器到了 → 方块自动下落一格 3. 刷新画面 4. 重复 游戏流程: 方块从顶部出现 → 玩家控制移动 → 落到底部锁定 → 检查有没有满行 → 有则消除并计分 → 生成下一个方块 → 如果新方块撞了,游戏结束 ``` --- ## 🧪 测试 编译并运行所有测试: ```bash g++ -std=c++11 -o test_board.exe test_board.cpp board.cpp && ./test_board.exe g++ -std=c++11 -o test_piece.exe test_piece.cpp piece.cpp && ./test_piece.exe g++ -std=c++11 -o test_game.exe test_game.cpp game.cpp board.cpp piece.cpp && ./test_game.exe ``` 一共 **62 个测试**,全部通过。 --- ## 📐 开发方式:Spec-Driven Development 这个项目是按 **先写规范、再写代码** 的方式开发的。每一步: ``` ① 写 SPEC_xxx.md → 定义要做什么 ② 写测试代码 → 把规范转成可验证的用例 ③ 写实现代码 → 让测试通过 ④ 验证 → 全部测试通过才算完成 ``` --- ## ⚙️ 编译要求 - 编译器:g++(支持 C++11) - 操作系统:Windows - 依赖:`conio.h`(键盘输入)、`windows.h`(计时休眠),都是 Windows 自带的 --- ## 🧹 清理编译产物 ```bash del *.exe *.o ``` 或者直接在 VS Code 的文件管理器里删掉 `tetris.exe` 和 `.o` 文件。