# 将种子视为可复制布局的输入

> 使用存储的种子重新创建程序游戏布局，将生成与验证分开，并使失败的关卡易于重现。

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

当程序生成的房间不公平或不可能时，关键的调试问题是是否可以再次构建相同的房间。种子为随机生成器提供了一个可重复的起点，前提是所有生成选择都以一致的顺序使用该生成器。此任务不同于判断随机结果是否公平：这里的目标是重现一种布局，检查其构造，并在它违反关卡结构规则时拒绝它。

## 通过布局生成器传递一个种子生成器

创建一个种子伪随机生成器并将其传递到每个生成函数中，而不是在不相关的帮助程序中调用 Math.random。 MDN 指出，Math.random 的初始种子无法由用户选择或重置，因此它本身无法提供可重播的种子。将种子存储在生成的关卡或其错误报告旁边。如果稍后添加或重新排序随机抽取，相同的种子可能会产生不同的布局；当精确的长期重播很重要时，对生成器进行版本控制或记录生成的地图。

尽可能按用途分开选择：一条流用于房间形状，另一条用于装饰，另一条用于敌人放置。然后添加装饰性绘图不会自动移动敌人图案。

## 生成、验证然后呈现

建造房间后，在展示房间之前进行结构检查：存在入口和出口，所需的钥匙适合可行走的瓷砖，寻路算法可以在收集必需物品的同时到达出口。如果布局失败，请使用有限数量的新种子重试，然后使用已知的后备空间或显示明显的生成失败。记录被拒绝的种子和失败的不变量，以便可以在本地重播意外的布局。

测试一小组精心选择的种子，包括种子解析器接受的类似边界的值，以及普通种子的样本。这并不能证明所有可能的种子都是有效的。这是练习确定性再现和生成器拒绝路径的实用方法。

## 将种子与难度声明分开

可复制的房间并不一定是公平的房间。播放生成的示例并询问危险是否可见以及预期路线是否留有足够的时间做出反应。在公平性审查中将该审查与分布分析分开。当发现缺陷时，种子让团队讨论一种精确的布局，而不是根据记忆描述近似的排列。

## 常见问题

**我可以使用 Math.random 和保存的数字重现关卡吗？** 不是通过重置 Math.random 的内置状态； MDN 表示无法选择或重置其初始种子。使用由你控制种子的伪随机数生成器，并让所有生成选择都通过该生成器完成。

**种子是否能保证每个生成的关卡都是可解决的？** 不，种子会复制选择序列；它不会验证生成的地图。检查可达性和所需对象规则，然后拒绝或修复失败的布局。

## 跟随好奇心探索

- [让游戏中的随机性感觉公平](https://oneshotgems.ai/zh-Hans/topics/fair-randomness-in-games): 选择随机性控制的内容，为玩家提供足够的信息来做出反应，并测试结果是否感觉有所不同而不显得随意。
- [使浏览器游戏测试可重复](https://oneshotgems.ai/zh-Hans/topics/deterministic-game-tests): 控制随机值、时间和起始条件，以便游戏测试产生可比较的结果，并且更容易诊断失败。

## 延伸阅读

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

---
规范页面: https://oneshotgems.ai/zh-Hans/topics/seeded-random-level-generation
