# 在到达游戏循环之前检查关卡数据

> 通过验证结构、数字边界、引用和可达性以及明确的后备行为，在游戏前拒绝格式错误的游戏关卡。

- URL: https://oneshotgems.ai/zh-Hans/topics/game-level-data-validation
- 类别: 游戏开发者指南
- 类型: 指南
- 更新日期: 2026年10月5日

关卡文件可以是有效的 JSON，但仍然描述无法玩的阶段：缺少出口、超出范围的生成点或没有引用钥匙的门。将解析和游戏验证视为单独的步骤。解析检查文本是否具有有效的 JSON 语法；验证检查生成的结构是否满足您的游戏期望的规则。在游戏过程中出现无法解释的崩溃或玩家被困在没有有效路线的房间中之前，及时发现这些问题。

## 验证形状和允许的范围

定义关卡结构及其必填字段，例如 id、width、height、tiles、spawn、exits 和 entities。检查尺寸是否为游戏支持范围内的正整数，tiles 数组是否恰好包含 width × height 个元素，以及每个 tile 是否使用已知类型。根据网格验证实体坐标，并要求门、钥匙、开关和目标具有唯一 ID。仅检查值是否为数字并不足够；应明确拒绝类似 NaN 或超出范围的值。

将可选字段与必填字段分开。省略的装饰调色板可以使用默认值；但如果补出缺失的出生点或出口会改变谜题，就不要默默补造。返回错误时附上 levels[2].entities[4].x 这样的路径，方便内容作者快速定位有问题的字段。

## 检查关系和可玩的不变量

结构验证后，检查跨域规则。每扇锁着的门都应该引用现有的钥匙；每把强制钥匙都应在门前够得着；出口不应位于实心瓷砖内。从生成点运行路径搜索，并确认可以根据游戏的移动规则达到所需的目标。如果敌人或移动平台影响访问，请使用更具体的验证器或通关测试，而不是声称简单的网格路径证明整个关卡是可解决的。

## 安全失败并测试验证器本身

MDN 指出，JSON 无效时 JSON.parse 会抛出 SyntaxError，因此应将解析失败与架构校验失败分开处理。开发时，报告具体文件和未通过的规则。在面向玩家的版本中，应加载已知的备用关卡，或明确显示关卡不可用，而不是用不完整的数据启动。保留覆盖字段缺失、引用错误、路径受阻以及一个有效小关卡的测试用例；有效用例可以防止验证器错误地拒绝所有关卡。

## 常见问题

**成功调用 JSON.parse 就足以信任关卡文件吗？** 不。解析只能确认语法，不能确认游戏特定的结构、范围、引用关系或可解性规则。在将关卡交给游戏代码之前，请逐项验证。

**游戏应该自动修复无效关卡吗？** 仅用于安全、明确的默认值。如果修复丢失的目标或路线改变了设计，请拒绝该关卡并使用已知的后备方案，而不是隐藏缺陷。

## 跟随好奇心探索

- [在发布前测试生成的游戏内容](https://oneshotgems.ai/zh-Hans/topics/testing-generated-game-content): 根据具体内容规则、可玩性检查和一致的反馈来审查生成的关卡、对话和物品描述。
- [编写游戏提示的接受标准](https://oneshotgems.ai/zh-Hans/topics/game-prompt-acceptance-criteria): 将游戏创意转化为可测试的验收标准，其中包含明确的行动、结果、失败案例和故意缩小的初始范围。

## 延伸阅读

- [MDN JSON.parse](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse)

---
规范页面: https://oneshotgems.ai/zh-Hans/topics/game-level-data-validation
