javascript - 从种子/ key 创建大型数组/数据

标签 javascript node.js key procedural-generation random-seed

首先,我编写的语言是node(javascript),但我实际上在寻找它背后的计算机科学,以及如何实际做到这一点,而不仅仅是代码。

基本上,我拥有的是一个 2,000 x 2,000 二维数组(我的意思是,2,000 个条目长数组中的每个条目都有自己的 2,000 个条目)。在这个数组中,我有值 0、1、2 3 等。它们的间隔不同,每个出现的常见程度也有不同的稀有性。我想要做的是根据 key 生成这个数组,idc key /种子有多长,只是一个可以完成工作的合理长度。我希望相同的 key 生成相同的数组,如果它是相同的 key ,如果它是不同的 key ,则生成不同的数组。基本上获取一个 key 并从中生成更长的数据,但该数据中不会出现可识别的模式。

我对此的想法是有一个键,它是某种十进制数,我乘以一堆常量以获得数组中的位置,但说实话,我真的不知道从哪里开始。本质上就像《我的世界》如何获取种子并将其转化为 map ,并且相同的种子将再次生成相同的 map 。

最佳答案

任何可以播种的随机数生成器(RNG)都会为给定的种子提供相同系列的随机值,并且应该没有可确定的模式。不幸的是,the default RND for javascript is not seedable ;根据这篇 SE 帖子,you will need to write your own or use a someone else's .

一旦您有了可种子的 RNG,对于每个条目,首先获取一个随机值,然后将随机值转换为所需的输出值。有多种不同的方法可以进行转换;如果你只有几个,我会做这样的事情(假设 random_value 在 0 和 1 之间):

if(rand_value <= 70){
  output_value = 1;
}
else if(rand_value <= 90){
  output_value = 2;
}
else if(rand_value <= 97){
  output_value = 3;
}
else {
  output_value = 4
}

这分别给出 70%、20%、7% 和 3% 得到 1、2、3 或 4;根据需要调整值。注意:如果你有很多输出值,你应该编辑你的问题来反射(reflect)这一点,因为有比巨大的 if else block 更干净的方法来解决这个问题。

关于javascript - 从种子/ key 创建大型数组/数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38390734/

相关文章:

python - 碰到障碍物后如何修复角色位置?

javascript - 从与字符串混合的数组中提取数字 - Javascript

javascript - 如何在变量中存储外语字母?

c# - 在 C# 中将字符串转换为键

javascript - NodeJS 异步库并行方法奇怪的行为

javascript - headless chrome 启动器 --window-size 导致错误

c++ 从 3 个浮点值生成 unordered_map 的键

javascript - 为什么这段 JavaScript 代码会返回错误?

javascript - 自定义 MongoDB 查询以返回特定的子文档

javascript - 调整浏览器窗口大小时创建可下拉菜单