用javascript中的随机数填充二维数组

时间:2014-07-28 22:49:41

标签: javascript arrays random 2d fill

我真的很抱歉,如果之前发布过这样的内容,但我找不到任何东西,我仍然对网站有点新鲜!

所以有一段时间我现在已经通过html5和javascript学习了一些关于游戏开发的知识,我偶然发现了制作tileset地图,我现在有一个tileset和一个2D数组,我想把某些瓷砖放入(数字)在这种情况下,在6到10之间变化)。 我认为这可能是一个很酷的功能,使地图在一小组相似的瓷砖之间进行选择,所以我不必专门为数组中的每个瓷砖编号(只需定义类型)

我目前的方法可能是能够定义类型的最佳方法,但我想要的东西看起来更清晰和/或信息为什么我的“清洁”版本不起作用。

var ground = [
    [tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile()],
    [tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile()],
    [tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile()],
    [tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile()],
    [tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile()],
    [tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile()],
    [tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile()],
    [tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile()],
    [tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile(),tile()]];

function tile() {
    var y = (Math.random() * 5 | 0) + 6;
    return y;
}

这是我到目前为止使用的代码,我必须使用tile()函数编辑代码的每个元素,以便在每个元素中获得一个随机数,我想要的是这样的:< / p>

for (var i = 0 ; i < 15; i++) {
    for (var j = 0; j < 9; j++) {
        ground[[i],[j]] = (Math.random() * 5 | 0) + 6;
    }
}

填充数组而不必将函数添加到每个点。

我有一种感觉,我错过了返回功能或类似的东西,但老实说,我不知道。

3 个答案:

答案 0 :(得分:7)

您正在考虑正确的方向,但代码中存在一些错误;)

  • 您必须先将数组初始化,然后才能将元素推入其中。
  • 你在计算i ++两次

的Javascript

var ground = []; // Initialize array
for (var i = 0 ; i < 15; i++) {
    ground[i] = []; // Initialize inner array
    for (var j = 0; j < 9; j++) { // i++ needs to be j++
        ground[i][j] = (Math.random() * 5 | 0) + 6;
    }
}

甚至可能更好(可重复使用)

function createGround(width, height){
    var result = [];
    for (var i = 0 ; i < width; i++) {
        result[i] = [];
        for (var j = 0; j < height; j++) {
            result[i][j] = (Math.random() * 5 | 0) + 6;
        }
    }
    return result;
}
// Create a new ground with width = 15 & height = 9
var ground = createGround(15, 9);

答案 1 :(得分:1)

这是一个简单的例子。我创建了一个函数,它将获取width和height参数并生成所请求的大小。此外,我将您的tile函数放在generate ground中以使其保持私有,从而阻止其他脚本调用它。

var ground = generateGround(10, 10); //Simple usage

function generateGround(height, width)
{
  var ground = [];
  for (var y = 0 ; y < height; y++) 
  {
    ground[y] = [];
    for (var x = 0; x < width; x++) 
    {
        ground[y][x] = tile();
    }  
  }
  return ground;

  function tile()
  {
    return (Math.random() * 5 | 0) + 6;
  }
}

http://jsbin.com/sukoyute/1/edit

答案 2 :(得分:0)

尝试从...中删除逗号

ground[[i],[j]] = (Math.random() * 5 | 0) + 6;

...在你的&#39;清洁&#39;版。此外,你的增量&#39; i&#39;在for for循环中:

for (var i = 0 ; i < 15; i++) {
for (var j = 0; j < 9; i++) {

希望这些变化能让它对您有用:)