一款采用 Godot 4.7+ 开发的复古风格俄罗斯方块游戏,专为移动端竖屏(720×1280)设计。金色游戏机外壳造型、像素风闲置恐龙、DAS 流畅操控、计分等级系统、游戏状态持久化——一款可直接运行、可构建发布、可作为架构学习模板的完整项目。
整个项目纯代码构建:节点树、UI、样式、箭头图标全部由 GDScript 在运行时生成,唯一的 main.tscn 仅 3 行实质内容。全部结构与逻辑以纯文本呈现,与 AI 读取、理解、修改代码的工作方式天然契合。
.tscn 黑盒 — 场景树由 view_builder.gd 代码构建,读 .gd 即可理解全貌view_config.gd,避开冗长的 Container/anchors采用 Logic-View 分层替代常见的 MVC:
| 层 | 职责 | 关键文件 |
|---|---|---|
| logic/ | 纯游戏逻辑。Game 继承 RefCounted,无场景树依赖、可单元测试;Block / Matrix 纯数据类;SaveData 负责存档 |
game.gd block.gd matrix.gd save_data.gd |
| view/ | 纯渲染。所有视图经 game 引用读取状态,通过 state_changed 信号自动刷新 |
matrix_view.gd next_view.gd idle_hint.gd |
| main.gd | 薄协调者。构建 UI → 创建 Game → 每帧 tick(delta) 驱动状态机 |
— |
关键:Game 继承 RefCounted 而非 Node,逻辑层可脱离场景树直接单元测试,不依赖 Timer/Signal 等场景树组件,改用 tick(delta) 纯驱动。
项目自带轻量级测试框架(无插件依赖),分两层:
tests/test_*.gd)— 覆盖 Block / Matrix / Game 的重力、消行、game over、存档等核心逻辑tests/smoke_test.gd)— 实例化真实主场景,验证启动与 tick 驱动运行方式:
godot --headless --path . --script res://tests/test_runner.gd # 单元测试
godot --headless --path . --script res://tests/smoke_test.gd # 冒烟测试
user://save.json| 消除行数 | 分数 |
|---|---|
| 1 | 100 |
| 2 | 300 |
| 3 | 700 |
| 4 | 1500 |
10 + (speed_level - 1) × 2block-fall/
├── audio/ # 音效文件 (.ogg)
├── logic/ # 游戏逻辑层 (Logic)
│ ├── block.gd # 方块数据(形状、旋转、移动)
│ ├── game.gd # 游戏逻辑 + 状态机(RefCounted 纯逻辑)
│ ├── input_handler.gd # 键盘/按钮输入 + DAS 重复逻辑
│ ├── matrix.gd # 网格逻辑(碰撞检测、固化、消行)
│ └── save_data.gd # 存档读写(user://save.json)
├── view/ # 渲染层 (View)
│ ├── idle_hint.gd # 恐龙闲置动画
│ ├── matrix_view.gd # 矩阵渲染
│ ├── next_view.gd # 下一个方块预览渲染
│ ├── reset_dialog.gd # 重置确认弹窗(复古风格)
│ ├── view_config.gd # 布局常量 + 控制台外壳绘制
│ └── view_builder.gd # 场景树构建 + 视图工厂方法
├── tests/ # 测试(无插件依赖)
│ ├── test_runner.gd # 单元测试运行器
│ ├── smoke_test.gd # 冒烟测试
│ ├── test_block.gd # Block 单元测试
│ ├── test_game.gd # Game 单元测试
│ └── test_matrix.gd # Matrix 单元测试
├── main.gd # 主协调者(LV 薄层:接线 + tick 驱动)
├── main.tscn # 主场景(仅 3 行实质内容)
└── project.godot # 引擎配置
godot --path .)export_presets.cfg 中调整目标平台预设本项目使用付费自定义许可证。购买后可修改代码并发布衍生游戏,但不得二次分发源代码或以商业目的销售源代码。详细条款请参阅项目内的 LICENSE.md。