我尝试用JavaScript做一个脚本,我尝试用随机的墙,门,窗和装饰(和随机地板)做一个建筑物
但我尝试添加以下概率: 在楼下,门的概率和窗户概率不为零 楼上的窗户概率和门概率不为空 我得到了楼上和楼下的情况。
你能帮助我吗?
答案 0 :(得分:0)
看一下我在代码片段中写的pickItem
函数。在这种情况下,我已经设置了它,所以你传入两个参数,一个是items
的数组(即你的items
数组),另一个是你可以创建的chance
数组你自己。 chance
数组定义了items
数组中每个元素被选中的几率。请查看代码段,了解我是如何根据chance
数组创建letters
数组的。
如果您观察到输出的结果,您可以看到项目' a'来自letters
的时间通常是1/2或超过1/2的时间,因为它有50%的可能性
因此,如果您将此逻辑应用于items
数组,则可以使items
中的特定元素比其他元素更频繁地被选中。
function rand(intMin, intMax) {
return Math.floor(Math.random() * (intMax - intMin + 1) + intMin);
}
let letters = ['a', 'b', 'c', 'd', 'e', 'f']; // dummy data, this is your items array
/*
a --> 50%
b --> 20%
c --> 10%
d --> 5%
e --> 10%
f --> 5%
*/
// The following chances can be defined in an array like so:
// a b c d e f
let chance = [50, 20, 10, 5, 10, 5]; // chance as a percentage (%)
function pickItem(items, chance) { // Pick an item from the letters array as defined by the chance
let randIndex = rand(0, items.length - 1); // pick a random letter index
while (!(chance[randIndex] >= rand(1, 100))) { // If the chance of that letter being picked isnt met, then pick a new letter
randIndex = rand(0, items.length - 1); // pick a new random letter index
}
return items[randIndex]; // return the letter when found
}
// To show the function working we can print a bunch of letters:
for (var i = 0; i < letters.length * 2; i++) { // Print out a picked item 12 times
console.log(pickItem(letters, chance)); // At least 6 of these items (1/2 the time) should be 'a'
}
&#13;