You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
my-bricks/docs/milestones.md

104 lines
4.7 KiB

# my-bricks 开发里程碑
> 新手学习路径,按"每步都能跑、每步都能看到效果"划分。
> 时间只是业余时间的大致估算,按你自己的节奏来,不必赶。
总原则:
- 每个里程碑结束时,游戏**必须能运行**,绝不攒一堆代码一起调试。
- 一个里程碑内写坏的代码,当步修好,不留债到下一步。
- 每完成一个里程碑,`git commit` 一次(从 M1 开始建仓库)。
---
## M0 环境搭建(约半天)
**目标**:装好工具,跑通"空场景 → 画面上有个方块"。
- [ ] 下载安装 Godot 4 稳定版(官网 godotengine.org,选 4.x 标准版)
- [ ] 新建项目,分辨率设为 1280×720,主场景随便选一个
- [ ] 场景里放一个 ColorRect(或任意节点),按 F5 运行看到它
- [ ] 熟悉三个面板:场景树(左)、属性(右)、运行按钮(右上)
- [ ] 打开项目设置 → 物理层,命名 Layer 1 = World、Layer 2 = Brick(给 M1 做准备)
**验收**:能运行一个空场景,节点能选中、能改属性。
**遇到的坑记下来**:装不上/运行不了等环境问题,优先查 Godot 官方文档和社区。
---
## M1 核心玩法闭环(约 1~2 天)
**目标**:完成"能玩一局":挡板、球、砖块、计分、生命、Game Over。
- [ ] 创建 `paddle.tscn`:CharacterBody2D + CollisionShape2D + 可见图形(ColorRect/Sprite)
- `paddle.gd`:键盘 ←→/AD + 鼠标移动,`@export` 挡板速度
- [ ] 创建 `ball.tscn`:CharacterBody2D + CollisionShape2D + 图形
- `ball.gd`:初始停在挡板上(发球状态)→ 空格发射 → `_physics_process``move_and_collide`
- 撞墙/砖块/挡板:读 `collision.get_normal()` 做镜面反射
- [ ] 创建 `brick.tscn`:StaticBody2D + CollisionShape2D + ColorRect
- `brick.gd`:`@export` 血量;被撞扣血,归零销毁并发 `destroyed(points)` 信号
- [ ] `level.gd`:读 `data/level_1.gd` 的字符串网格,按坐标生成一排砖块
- [ ] `main.tscn` + `main.gd`:组装 World/Paddle/Ball/LoseZone/UI
- LoseZone:屏幕底部一条 Area2D,球经过 `body_entered` → 扣命 + 重置球
- HUD:分数 Label、生命 Label(先用系统字体,样式后补)
- 状态机:`PLAYING` / `GAME_OVER`(先只做这两个,MENU 留到 M3)
- [ ] 球速、挡板速度、初始命数全部 `@export`,方便调
**验收**
- 能打碎所有砖块,分数正确累加
- 球出界扣命,命尽出现 Game Over
- 重开后一切重置正常
---
## M2 手感打磨(约 1 天)
**目标**:把"好玩"的核心做出来。这是打砖块最值得花时间的一步。
- [ ] **挡板反弹角度分档**(核心):按球击中挡板的横向偏移换算反弹角
- 中心 → 接近竖直;边缘 → 大角度斜飞。公式写一个函数,M1 里先用它替换纯镜面
- [ ] 球速随击砖次数缓慢上升(设上限),控制单局节奏
- [ ] 碎砖反馈:GPUParticles2D 飞出碎片,或 Tween 缩放 + 颜色闪动
- [ ] 命数用图标显示(简单 Sprite 排一排),比纯数字直观
**验收**:反弹可控、可预期;连续玩 3 分钟不觉得"球不受我控制"。
---
## M3 内容扩展(约 1~2 天)
**目标**:从"一关"变成"一个游戏"。
- [ ] 关卡数据驱动化:`data/` 下加 `level_2.gd`、`level_3.gd`,Main 按顺序加载
- [ ] 过关判定:砖块清空 → `LEVEL_CLEAR` 提示 → 空格/按钮进下一关
- [ ] 主菜单场景:开始游戏 / 退出(状态机补上 `MENU`
- [ ] 音效:命中、碎砖、出界、过关 4 个 AudioStreamPlayer2D(素材先用免费 CC0)
- [ ] 道具(选 1~2 个):加宽挡板、多球(难度大可选做)
- 击碎砖块概率掉落 → Area2D 下落 → 挡板接住生效 → 定时器恢复
**验收**:从主菜单开始,能连续玩 3 个关卡通关;有音效、有道具。
---
## M4 收尾发布(约 1 天)
**目标**:把作品拿得出手。
- [ ] 视觉统一:占位图形换成顺眼的配色/贴图(可选,纯色也完全可行)
- [ ] 导出:桌面(macOS/Windows)或 Web(HTML5),导出前按导出模板指引走一遍
- [ ] 写 README:游戏介绍 + 操作说明(放项目根目录)
- [ ] 按 [design.md](design.md) 第 8 节过一遍验收清单,修掉残留问题
**验收**:导出的程序在另一台机器/浏览器能独立运行。
---
## 里程碑总览
| 里程碑 | 内容 | 产物 |
|--------|------|------|
| M0 | 环境搭建 | 能运行的空场景 |
| M1 | 核心玩法闭环 | 能玩一局(无菜单) |
| M2 | 手感打磨 | 反弹可控、有反馈 |
| M3 | 内容扩展 | 菜单 + 多关卡 + 音效 + 道具 |
| M4 | 收尾发布 | 可发布的成品 |