独特的阵列。扫雷Javascript

时间:2014-02-05 18:37:44

标签: javascript arrays

for (var i = 0; i < 10; i++) {
    bommen[i] = [
    Math.floor(Math.random() * 10),
    Math.floor(Math.random() * 10)];
}

这是我生成随机'炸弹坐标'的代码。它可以工作,但它可以在同一个地方放两枚炸弹。第一个Math.floor()是X坐标,第二个是Y坐标。有没有人知道如何解决这个问题?

5 个答案:

答案 0 :(得分:0)

这是你要找的?他们永远不会是同一个地方。

    var locationOne = Math.floor(Math.random() * 10);
    var locationTwo = Math.floor(Math.random() * 10);
    while(locationOne === locationTwo){
      locationTwo = Math.floor(Math.random() * 10);
    }
    for (var i = 0; i < 10; i++) {
        bommen[i] = [
        locationOne,
        locationTwo];
    }

答案 1 :(得分:0)

您可以循环显示之前的炸弹坐标,如果您找到了具有相同坐标的坐标,请重试。这样的事情应该有效:

for (var i = 0; i < 100; i++) {
    var x = Math.floor(Math.random() * 10),
        y = Math.floor(Math.random() * 10),
        retry = false;
    for (var j = 0; j < i; j++) {
        if (bommen[j][0] == x && bommen[j][1] == y) {
            retry = true;
            break;
        }
    }
    if (retry) 
        i--;
    else 
        bommen[i] = [x, y];
}

答案 2 :(得分:0)

最简单的方法是按照

的方式添加一个关闭点
for (var i = 0; i < 10; i++) {
    if (bommen[i] != 0) // basically if there is already a bomb here
         i--;           //add another bomb
    bommen[i] = [
                Math.floor(Math.random() * 10),
                Math.floor(Math.random() * 10)];
    }

虽然效率不高,但确保你有十枚独特的炸弹。

答案 3 :(得分:0)

这是我的看法:

var bommen = [[]];
var bommenObj = {};
var numMines = 10;
var rows = 10;
var columns = 10;
while(Object.keys(bommenObj).length < numMines) {
  var randX = Math.floor(Math.random() * rows);
  var randY = Math.floor(Math.random() * columns);
  bommenObj[[randX, randY]] = [randX,randY];
}
Object.keys(bommenObj).forEach(function(d,i) {
    bommen[i] = bommenObj[d];
});

这个想法是利用Javascript的关联数组(a.k.a. Objects)来忽略重复的条目。

然后继续尝试,直到你有10个随机坐标。

一旦我们有10个坐标,我们只需将Object转换为数组。

答案 4 :(得分:0)

答案中存在一个问题,即检查之前的位置是否已被使用过。您有100个职位要使用。假设你已经使用了99个位置并随机选择下一个位置,那么这个位置从未被选中的可能性很小。一般来说,已经选择的职位越多,选择新职位所需的时间就越长。

请参阅这些答案,了解以随机顺序对可能位置进行排序的方法,然后按顺序阅读,这意味着每个新选择必须是唯一的,并且只选择一次而不重复。

Monopoly pick random card and pop array

https://stackoverflow.com/a/18806417/1937302