我有一个包含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
正如您所看到的,每个功率之间的概率不相等或接近。所以我的问题是,我怎样才能更均匀地分配概率,但仍然知道朋友的名字将始终返回相同的能力,无论其索引如何,甚至可能?如果不是,我可以使用一些基于索引的条件并尝试不更改列表的顺序。
正如评论中所建议的那样,我只是要给每个朋友硬编码。
{
name: "Robin Camacho",
file_name: "robin_camacho",
power: "score_5_d"
}