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

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 第 7 节。

6. 界面与流程

主菜单 → 游戏(HUD 显示分数/生命/关卡) → 过关提示 → 下一关
                               ↘ Game Over → 返回主菜单
  • 主菜单:开始游戏 / 退出
  • HUD:分数、剩余生命、当前关卡
  • 状态机:MENU → PLAYING → LEVEL_CLEAR / GAME_OVER

7. 美术与音频方向

  • 美术:纯色/渐变几何图形(ColorRect 或简单 Sprite2D)即可,先不引入图片资源。
  • 音频:免费素材或程序合成;需要 4 类音效——命中、碎砖、出界、过关。
  • 视觉反馈(小成本提升手感):碎砖时粒子飞出(GPUParticles2D)或简单 Tween 缩放,命中时球/砖颜色闪动。

8. 第一版验收标准

  • 键盘能完整玩完一关并进入下一关
  • 生命耗尽出现 Game Over,可重开
  • HUD 分数与生命显示正确、实时更新
  • 球与挡板的反弹角度可控、可预期(不出现"一直直上直下")