JS:如何在使用 Math.random() 时排除一系列值
JS: How to exclude a range of values whilst using Math.random()?
我正在为游戏中的玩家生成一些随机的x和y坐标:
var xcoordRed = Math.floor((Math.random() * 790) +1);
var ycoordRed = Math.floor((Math.random() * 400) +1);
但是我需要从xcoordRed
范围中排除325 - 375
和ycoordRed
150 - 250
.
我将如何有效地做到这一点?
简单的数学,通过排除范围的差值减小随机调用的范围,然后如果随机值大于排除下限分隔符,只需增加排除差值即可。意义:
var diff = 375 - 325; // add 1 if inclusive
var xcoordRed = Math.floor((Math.random() * (790 - diff)) +1);
if (xcoordRed >= 325)
xcoordRed += diff;
// the same approach goes for Y
这意味着,如果随机值是,比如说,324,它将保持324。但是,如果是 330,它将变为 380,依此类推。当然,可能的最高随机数 740 将变为 790。
var r = document.getElementById('r');
function gen() {
var diffx = 375 - 325;
var diffy = 250 - 150;
var xcoordRed = Math.floor((Math.random() * (790 - diffx)) + 1);
if (xcoordRed >= 325)
xcoordRed += diffx;
var ycoordRed = Math.floor((Math.random() * (400 - diffy)) + 1);
if (ycoordRed >= 150)
ycoordRed += diffy;
r.textContent = 'X: ' + xcoordRed + ' Y: ' + ycoordRed;
}
<button onclick="gen()">Generate</button>
<div id="r"></div>
您可以创建一个允许列表数组并从允许范围内获取随机值。不确定这是否非常有效,但它可以处理要排除的多个块。
function getArrayWithExcludes(min, max, exclude) {
var _tmp = [];
for (var i = min; i < max; i++) {
if (!exclude.some(function(item) {
return i > item.min && i < item.max
}))
_tmp.push(i);
}
return _tmp;
}
function getRandomValue(arr) {
var len = arr.length;
var random = Math.floor(Math.random() * len) % len;
return arr[random];
}
var xExRange = [{
min: 10,
max: 50
}, {
min: 325,
max: 375
}];
var yExRange = [{
min: 150,
max: 250
}];
var xRange = getArrayWithExcludes(0, 790, xExRange);
var yRange = getArrayWithExcludes(0, 400, yExRange);
var xcoordRed = getRandomValue(xRange);
var ycoordRed = getRandomValue(yRange);
document.write("<pre>" + JSON.stringify({x:xcoordRed,y: ycoordRed},0,4) + "</pre>");
相关文章:
- Sencha Touch构建-排除文件
- 如何为排除无穷大和NaN的数字声明Flow类型
- JS条件故障排除
- 浓缩一系列mySQL查询
- 如何在Webpack中从导出中排除供应商模块peerDependencies
- 如何在Javascript中从select标记的一系列选项中构建二维数组
- 是否排除节点中错误堆栈的第一行?/节点中的自定义错误类型
- 如何排除此正则表达式中的空白匹配项
- 使用RegExp获取一系列单词,这些单词前后可能有空格,也可能没有空格
- 使用Regex排除标签中的尾随点
- 如何排除对象'在$.toJSON之前或期间的s id属性
- Django无法通过urls.py配置找到djangular/app.js文件.如何进行故障排除
- 如何使用yyyymmdd格式在日期中添加n天,但排除周日
- Sails.js指定要从自动插入中排除的js文件
- 如何从应用于正文的css中排除特定的表单
- 对DataTable jquery进行排序,排除文本字段中的空白
- 正在获取排除特定子节点的节点的innerHTML
- 从嵌套对象属性中获取排除某个值的最高值
- JS:如何在使用 Math.random() 时排除一系列值
- JS 正则表达式以排除一系列特定数字