游戏规则核心
跨类型通用规则,适用于每一款游戏。类型特性应构建于这些规则之上,而非取而代之。
工作流程
- 确定维度(2D/3D)、类型、相机和输入方案。
- 在编写代码前定义规则集:实体、状态、规则、胜负条件、边界情况。
- 使用以下模式进行实现。
- 阅读
references/collision.md了解碰撞/物理细节。 - 在项目中输出
RULES.md,列出所有游戏特定规则,以便后续测试。
通用结构
- 游戏循环:输入 -> 更新(固定dt) -> 碰撞 -> 状态解决 -> 渲染。物理使用固定时间步长,渲染使用可变时间步长。
- 游戏状态:
启动 -> 菜单 -> 游戏中 <-> 暂停 -> 游戏结束/胜利 -> 菜单。每次转换必须明确,不允许无声状态变更。 - 实体:每个实体具有位置、尺寸/碰撞体、速度、状态及其自身规则的所有权。
- 规则表:为每条规则编写
触发条件 -> 条件 -> 效果 -> 边界情况。
每款游戏必须定义的规则
- 胜利条件、失败条件以及重启时发生的情况(重置什么,保留什么)。
- 分数/进度:如何增加、上限及保存方式。
- 玩家生命/生命数:伤害来源、无敌窗口、死亡处理。
- 生成/消失:位置、时机、限制及清理(无泄漏)。
- 难度曲线:哪些内容会缩放以及缩放速度。
- 输入:同时输入、输入缓冲、按键重绑定、暂停行为。
类型扩展(按需选择)
- 平台跳跃:重力、跳跃高度/可变跳跃、边沿缓冲(约100ms)、跳跃缓冲(约100ms)、单向平台、移动平台跟随、坠落死亡平面。
- 跑酷/无尽:速度递增、程序化生成间距确保可通过性、用于可重现性的种子。
- 射击:射速、子弹生命周期、命中判定、弹药/装填。
- 解谜:确定性状态、撤销、可解性检查。
- 竞速/3D:检查点、圈数验证、防抄近路规则、相机碰撞。
硬性规则
- 绝不能将游戏逻辑绑定到帧率。
- 绝不允许实体在未定义结果的情况下离开游戏边界。
- 每条规则必须编号(不写“快速”,使用单位/秒)。
- 随机性必须可种子化。