资源介绍

Block Fall — 复古俄罗斯方块手机版源码

一款采用 Godot 4.7+ 开发的复古风格俄罗斯方块游戏,专为移动端竖屏(720×1280)设计。金色游戏机外壳造型、像素风闲置恐龙、DAS 流畅操控、计分等级系统、游戏状态持久化——一款可直接运行、可构建发布、可作为架构学习模板的完整项目。


🎯 核心亮点

专为 AI 辅助开发设计

整个项目纯代码构建:节点树、UI、样式、箭头图标全部由 GDScript 在运行时生成,唯一的 main.tscn 仅 3 行实质内容。全部结构与逻辑以纯文本呈现,与 AI 读取、理解、修改代码的工作方式天然契合。

  • 无 .tscn 黑盒 — 场景树由 view_builder.gd 代码构建,读 .gd 即可理解全貌
  • 无外部资源依赖 — 像素图标代码绘制、样式代码定义、音频代码加载
  • 常量驱动布局 — 尺寸与坐标集中在 view_config.gd,避开冗长的 Container/anchors
  • 四条通用原则 — 一切皆文本、单一职责文件、常量驱动布局、单向依赖(无环)

LV(Logic-View)分层架构

采用 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    # 冒烟测试

移动端适配

  • 竖屏 720×1280 分辨率,金色复古游戏机外壳造型
  • 虚拟方向键 + 动作按钮,适配触屏操作
  • 完整键盘支持(A/D/W/S、方向键、Space、P、R、M),便于桌面端调试

🎮 游戏特性

  • 7 种方块类型 — I、L、J、Z、S、O、T,各有独特形状和旋转原点
  • DAS 输入系统 — 延迟自动连发,实现流畅的水平移动控制
  • 计分系统 — 消除 1–4 行得分(100 / 300 / 700 / 1500)+ 软降/硬降奖励
  • 等级进度 — 每消除 10 行速度提升,最高 10 级;水平移动速度固定不变,操控始终如一
  • 下一个方块预览 — 方块出现前即可看到
  • 闲置动画 — 像素风恐龙,带眨眼/跑动循环
  • 游戏结束动画 — 自下而上的闪烁填充效果
  • 重置确认弹窗 — 复古风格,避免局中误触丢失进度
  • 设置持久化 — 最高分与声音设置保存到 user://save.json
  • 音效反馈 — 开始、移动、旋转、消除、下落、结束均有音效

计分规则

消除行数 分数
1 100
2 300
3 700
4 1500
  • 方块固化奖励:10 + (speed_level - 1) × 2
  • 每消除 10 行提升速度(最高 10 级)

📂 项目结构

block-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 4.7+

运行

  1. 使用 Godot 打开项目目录
  2. 按 F5 运行(或 godot --path .)
  3. 虚拟按钮 + 键盘均可操控

构建

  1. 在 export_presets.cfg 中调整目标平台预设
  2. 使用 Godot 导出对话框构建 Android / iOS / Windows / macOS / Linux

👤 适合谁

  • Godot 初学者 — 一个完整可跑的 2D 项目,注释全部中文,边看边学
  • 架构模式学习者 — LV 分层 + RefCounted 纯逻辑 + tick 驱动,一种让逻辑层可测试的新思路
  • AI 辅助开发者 — 纯代码构建架构与 AI 工具天然契合,改功能用查找替换即可
  • 独立游戏开发者 — 复古风格俄罗斯方块,可直接发布或作为衍生项目的起点

📄 许可证

本项目使用付费自定义许可证。购买后可修改代码并发布衍生游戏,但不得二次分发源代码或以商业目的销售源代码。详细条款请参阅项目内的 LICENSE.md。

俄罗斯方块手机版源码

¥49