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/design.md

86 lines
3.8 KiB

# my-bricks 游戏设计文档
> 版本:v1(调研阶段)| 引擎:Godot 4 + GDScript | 定位:新手练手小游戏
## 1. 一句话概述
打砖块(Breakout)类小游戏:玩家控制挡板反弹小球,击碎场上全部砖块即可过关。
目标是**跑通一个完整的玩法闭环**,同时作为 Godot / GDScript 的入门练习项目。
## 2. 设计目标与边界
**做:**
- 完整闭环:移动挡板 → 反弹小球 → 击碎砖块 → 得分/过关 → 失败/重开
- 新手可维护:每个场景/脚本单一职责,场景之间用信号(signal)解耦
- 数据驱动关卡:关卡用字符串网格定义,改关卡不用改代码
**不做(第一版明确排除,防止范围蔓延):**
- 不联网、不做存档系统
- 不做复杂物理模拟(重力、流体、刚体堆叠等)
- 不做完整美术管线,先用纯色几何图形占位,后期可换
## 3. 核心玩法
### 3.1 玩家操作
| 操作 | 行为 |
|------|------|
| ← → / A D | 挡板左右移动 |
| 鼠标移动 | 挡板跟随(可选,二选一) |
| 空格 | 发球 / 重开 / 进入下一关 |
### 3.2 核心循环
1. 回合开始:球停在挡板上方,按空格发射
2. 球在场地内反弹;碰到砖块 → 砖块掉血,击碎则得分
3. 球从底部出界 → 失去一条命,球重置回到挡板
4. 生命归零 → Game Over;砖块清空 → 过关进入下一关
### 3.3 反弹规则(手感核心)
- **挡板碰撞**:反弹角度由球击中挡板的**横向位置**决定——中心位置竖直反弹,越靠边缘角度越大。这是打砖块手感的核心,优先级最高。
- **墙壁 / 天花板**:镜面反弹(x 或 y 分量取反)。
- **砖块**:镜面反弹 + 轻微随机扰动,防止球在水平/垂直路径上"鬼打墙"死循环。
### 3.4 砖块
- 砖块有生命值(1 / 2 / 3 血),用颜色区分。
- 每击碎一块按类型给分,分数写在砖块数据里。
- 预留"不可破坏"类型,供后期关卡使用。
### 3.5 难度曲线
- 球速随击砖次数**缓慢上升**(每关内)。
- 每关基础球速提高一个台阶。
- 球速/挡板速度都用可配置参数(编辑器里能改),方便调手感。
## 4. 道具系统(第二里程碑,非第一版必需)
- 候选道具:**加宽挡板、多球、穿透球、减速、加命**,先挑 1~2 个实现。
- 实现思路:击碎砖块有概率掉落,掉落物用 Area2D 向下落,被挡板接到后生效。
- 设计原则:道具锦上添花,不依赖道具也能正常通关。
## 5. 关卡设计
- 关卡用「字符串网格」定义:每行一个字符串 = 一行砖块,每个字符映射一种砖块类型。
- 第一版准备 3~5 个示例关卡,从"整面墙"到"留空位、混合血量"。
- 具体数据格式见 [architecture.md](architecture.md) 第 7 节。
## 6. 界面与流程
```
主菜单 → 游戏(HUD 显示分数/生命/关卡) → 过关提示 → 下一关
↘ Game Over → 返回主菜单
```
- 主菜单:开始游戏 / 退出
- HUD:分数、剩余生命、当前关卡
- 状态机:`MENU → PLAYING → LEVEL_CLEAR / GAME_OVER`
## 7. 美术与音频方向
- **美术**:纯色/渐变几何图形(ColorRect 或简单 Sprite2D)即可,先不引入图片资源。
- **音频**:免费素材或程序合成;需要 4 类音效——命中、碎砖、出界、过关。
- **视觉反馈**(小成本提升手感):碎砖时粒子飞出(GPUParticles2D)或简单 Tween 缩放,命中时球/砖颜色闪动。
## 8. 第一版验收标准
- [ ] 键盘能完整玩完一关并进入下一关
- [ ] 生命耗尽出现 Game Over,可重开
- [ ] HUD 分数与生命显示正确、实时更新
- [ ] 球与挡板的反弹角度可控、可预期(不出现"一直直上直下")