# My Bricks 一款用 **Godot 4 + GDScript** 开发的打砖块(Breakout)小游戏。新手练手项目,实现了从核心玩法到内容扩展的完整闭环。 --- ## 操作说明 | 操作 | 行为 | |------|------| | 鼠标移动 | 挡板左右移动 | | ← / → | 挡板左右移动(键盘备用) | | 空格 | 发球 / 进入下一关 / 重新开始 | 主菜单用 **开始游戏 / 退出** 按钮。 --- ## 玩法 - 移动挡板反弹小球,击碎场上所有砖块即可过关 - 共 **3 关**,逐关递进(普通砖块 → 笑脸 → 金字塔+不可破坏墙柱) - 砖块有 1/2/3 血,颜色绿/黄/红区分 - 击碎砖块有 **15% 概率** 掉落道具,掉到底部之前接住生效 - 球从底部出界扣命,**3 命耗尽** → Game Over ### 已实现道具 | 颜色 | 标签 | 效果 | |------|------|------| | 绿 | W | 挡板变宽 10 秒 | | 粉 | L | +1 命 | | 黄 | M | 多球(暂未实现) | | 蓝 | S | 减速(暂未实现) | --- ## 技术要点 - **引擎**:Godot 4.x(GL Compatibility 渲染器,桌面/网页通吃) - **语言**:GDScript - **分辨率**:1280 × 720 - **物理层**:Layer 1 = World(挡板/墙),Layer 2 = Brick - **关卡数据驱动**:`data/level_*.gd` 是字符串网格,改关卡不用改代码 - **信号解耦**:砖块不知道分数谁管,只广播"我碎了";Main 收到后加分/判定 - **音效**:用 `AudioStreamWAV` 程序合成(hit/break/lost/win),无外部素材依赖 - **道具**:Area2D 下落,被挡板接到时发信号 --- ## 目录结构 ``` my-bricks/ ├── scenes/ # 场景文件 │ ├── main.tscn # 主场景 │ ├── ball.tscn │ ├── paddle.tscn │ ├── brick.tscn │ ├── lose_zone.tscn │ ├── power_up.tscn # 道具 │ └── ui/ │ ├── main_menu.tscn │ └── hud.tscn ├── scripts/ # 脚本 │ ├── main.gd # 状态机 + 信号中心 │ ├── ball.gd # 反弹 + 提速 │ ├── paddle.gd # 移动 + 加宽 │ ├── brick.gd # 血量 + 掉落 │ ├── power_up.gd # 道具 │ ├── audio.gd # 程序合成音效 │ ├── level.gd # 关卡生成器 │ └── ui/ │ ├── main_menu.gd │ └── hud.gd ├── data/ # 关卡数据 │ ├── level_1.gd │ ├── level_2.gd │ └── level_3.gd ├── docs/ # 设计文档 │ ├── architecture.md │ ├── design.md │ └── milestones.md └── assets/ # 预留:图片/音频资源 ``` --- ## 运行 1. 安装 [Godot 4 稳定版](https://godotengine.org/) 2. 在 Godot 里 `Import` → 选本目录的 `project.godot` 3. 编辑器里按 `F5` 跑 --- ## 调参 所有参数都在对应脚本的 `@export` 里,编辑器里直接拖: - 球速:[ball.gd](scripts/ball.gd) `speed` / `max_speed` - 挡板速度:[paddle.gd](scripts/paddle.gd) `speed` - 道具掉落概率:[brick.gd](scripts/brick.gd) `power_up_drop_chance` - 关卡内容:[data/level_*.gd](data/) --- ## 进度 按 [docs/milestones.md](docs/milestones.md) 走完 M0~M4: | 里程碑 | 内容 | 状态 | |--------|------|------| | M0 | 环境搭建 | ✅ | | M1 | 核心玩法闭环 | ✅ | | M2 | 手感打磨(反弹角度 / 提速 / 碎砖反馈) | ✅ | | M3 | 多关卡 + 主菜单 + 音效 + 加宽道具 | ✅ | | M4 | README + 导出 | ✅ |