我有一个包含100个“朋友”的列表。它的一部分看起来像:
Tetris.friends =
[
{
name: "Haroon Bean",
file_name: "haroon_bean"
},
{
name: "Nathan Cain",
file_name: "nathan_cain"
},
{
name: "Ashley Burns",
file_name: "ashley_burns"
},
{
name: "Dennis Clay",
file_name: "dennis_clay"
},
我还列出了16个“权力”。它的一部分看起来像:
Tetris.friend_powers =
[
{
name: "speed_2",
description: "Speed * 2"
},
{
name: "speed_3",
description: "Speed * 3"
},
{
name: "speed_4",
description: "Speed * 4"
},
我想做的是,即使更改好友列表的顺序,每个名称也总是返回相同的幂。这样,即使出于某种原因,出于一致性原因,即使列表更改,我也可以确保每个朋友总是返回相同的结果。
所以我现在正在做的是这样:
let n = Tetris.get_random_int
(
{
min: 0,
max: Tetris.friends.length - 1,
seed: Tetris.random_3
}
)
let friend = Tetris.friends[n]
...
let name = friend.file_name
let seed = new Math.seedrandom(name)
let n = Tetris.get_random_int
(
{
min: 0,
max: Tetris.friend_powers.length - 1,
seed: seed
}
)
let power = Tetris.friend_powers[n]
所以基本上,我首先结识了一个拥有全球种子的朋友,然后根据该名称创建一个种子,并使用它来获取随机功效列表索引。
这有效。问题是,当我用所有好友列表运行测试时,这是分布:
score_2: 7
score_2_d: 4
score_3: 3
score_3_d: 4
score_4: 5
score_4_d: 1
score_5: 6
score_5_d: 7
speed_2: 9
speed_2_d: 5
speed_3: 15
speed_3_d: 3
speed_4: 8
speed_4_d: 9
speed_5: 4
speed_5_d: 10
如您所见,每个功效之间的概率不相等或接近。 所以我的问题是,我怎样才能更均匀地分配概率,但是仍然让一个朋友的名字总是返回相同的能力,而不管其索引如何,甚至有可能吗?如果没有,我只能使用一些基于索引的条件,并尝试不更改列表的顺序。
答案 0 :(得分:0)
正如评论中所建议的,我将硬编码每个朋友的权力。
{
name: "Robin Camacho",
file_name: "robin_camacho",
power: "score_5_d"
}