# 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 分数与生命显示正确、实时更新 - [ ] 球与挡板的反弹角度可控、可预期(不出现"一直直上直下")