@civ-clone/core-random
一个种子的随机数生成器 跟踪它流多远 没错.
import { instance as rng } from '@civ-clone/core-random';
rng(); // 0.4362...
rng.calls(); // 1
rng.seed(); // whatever it was seeded with
每个需要随机的引擎包都有一个 () => number 参数
默认此实例, 因此一个测试或加载的保存可以替换它自己的 :
import { createRng } from '@civ-clone/core-random';
const unit = new Unit(city, player, tile, ruleRegistry, createRng(1));
打电话算什么
一个只记录种子的保存 重新启动 负载中的溪流, 不
继续 在战斗前保存的游戏,装入后再重放会给出一个
不同的结果——使保存/装入和重放测试
无所信取. restore(seed, calls) 把发电机放回原地
原为:
rng.restore(save.rng.seed, save.rng.calls);
这是O(1)而不是每张图的回放 因为Mulberry32的状态是
单 32 位整数, 以固定递增方式推进 : n 画它
seed + n * increment (单元2^32).
一个过程,现在
instance 是一个模块级的单子, 所以两个游戏在一个过程中会
以他们的图谋和分歧相交; 这就是为什么每个消费者都拿
生成器作为可注入参数,而不是直接导入——第3阶段
发动机计划给出的每个 Game 它自己的发电机, 没有在呼叫中
网站需要再次更改.