0

ゲーム ボード (8 x 8) をランダムなゲーム ピース (画像) で埋めようとしていますが、ボード全体が埋められません。一部は空になります。そのために、ボード上で x、y 座標をランダムに生成し、それに乱数を割り当てています。fillBoard はモジュール内のプライベート関数なので、パブリック関数である copyBoard にコピーします。

アイデアは、x、y 座標をランダムに生成し、それを配列 [x]、配列 [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 に答える