配列内の配列の値を置き換えようとしています。配列の値は1または0のみで、グリッドです。コードは1を探し、それを0に変更し、下の行の同じ列値も1に変更します。
問題は、imが行おうとしている変更でifステートメントを無効にすることだと思います。エラーメッセージが表示されます。
function gravity() {
for (var i = 0; i < rows; i++) {
for (var j = 0; j < cols; j++) {
if (grid[i][j] === 1){
grid[i][j] = 0;
grid[i+1][j] = 1;
}
}
}
}
問題は、ループが最後の行にある場合、に設定しようとするi+1
こと1
ですが、i
すでに最後のインデックスi+1
が範囲外であるためです。
これを修正するには、単に追加することができます if
また、別のバグがあります。上から下に相互作用するので、任意の1を下に移動して次の行に移動し、次に次の行を通過して、下に移動したのとまったく同じ1を見つけて、もう一度下に移動します。これは、gravity()を1回呼び出すだけで、すべて1がなくなるまで繰り返されます。これを修正するには、行を下から上に相互作用する必要があります。
var grid = [
[1,0,0,0],
[0,0,1,0],
[0,0,0,0],
[0,1,0,0]
]
var cols = 4;
var rows = 4;
function gravity() {
for (var i = rows - 1; i >= 0; i--) {
for (var j = 0; j < cols; j++) {
if (grid[i][j] === 1){
grid[i][j] = 0;
if(i+1 < rows) {
grid[i+1][j] = 1;
}
}
}
}
}
var iterations = 0;
var intervalId = setInterval(() => {
gravity();
for(var row of grid) {
console.log(row.join(','))
}
console.log("");
iterations++;
if(iterations == 4) {
clearInterval(intervalId);
}
}, 400)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加