0

我正在尝试用随机游戏块(图像)填充游戏板(8 x 8),但不是整个板都被填满。有些会是空的。为此,我在板上随机生成 x,y 坐标并为其分配一个随机数。由于fillBoard是模块中的私有函数,我将它复制到copyBoard,这是一个公共函数。

这个想法是随机生成一个 x,y 坐标并将其放入 array[x]、array[y] 中。我在复制数组时遇到了麻烦,因为并不是所有的都被定义了。我想知道你是怎么做到的?

这是我到目前为止所得到的。它显示错误,因为 splice() 不能用于未定义的变量。

function fillBoard(){
    var x, y;
    monsters=[]; //empty array

    x = Math.floor(Math.random()*cols);
    y = Math.floor(Math.random()*rows);

    monsters[x] = []; /* making x variable an array */
    monsters[x][y] = Math.floor(Math.random() * numMonsterTypes);
}

function copyBoard() {
    var copy = [],
        x;

    for (x = 0; x < cols; x++) {
        if(monsters[x]){
            copy[x] = monsters[x].slice(0); //slice(array) -> returns the selected elements in an array
        };
    };
    return copy;
}  
4

2 回答 2

0

看起来您的问题仅来自初始化的随机数组元素。
您可以遍历所有行和列并仅复制初始化元素
,也
可以将初始化元素的列表/数组存储在其他地方(数组元素 maxRow+1/maxCol+1 ?)

于 2012-08-10T08:58:43.667 回答
0

这是解决方案:

function fillBoard(){
    var x, y;
    monsters=[]; //empty array

    x = Math.floor(Math.random()*cols);
    y = Math.floor(Math.random()*rows);

    monsters[x] = []; /* making x variable an array */
    monsters[x][y] = Math.floor(Math.random() * numMonsterTypes);
}

function copyBoard() {
    var copy = [],
        x;

    for (x = 0; x<cols; x++){
        copy[x] = [];
        if(monsters[x]){
            copy[x] = monsters[x].slice(0);;
        };
    };

    return copy;
}
于 2012-08-10T08:59:31.780 回答