私はテトリスを構築しており、タイルの grid[][] を反復処理し、行ごとに各列を下から上に向かってチェックするメソッドを実装しようとしています (開始した場合、より高速なチェックになると考えられます)ほとんどの行をクリアする必要があるため、一番下から削除します)。
これについての私の理解は、ダブル for ループを作成し、行ごとに、その行のすべての列がいっぱいかどうか (null でないかどうか) を確認することです。そうであれば、クリアを実装します (実際には現在の行 = 上の行を設定しています)。今のところ、「Full」を出力しようとしています。
私のSystem.out.println(grid[row][col] + ", " + row + ", " + col);
チェックは、一番下の行から始まり、各列を繰り返していることを正しく示しています...しかし、if (grid[row][col] != null) {
チェックはその行にとどまっていないようです...
public void checkBottomFull() {
int columnsFilled = 0;
//loops through rows only after each column has finished
for(int row = grid.length-2; row > 0; row--) {
//loops through all columns per row, then row decrements
for(int col = 0; col < grid[row].length; col++) {
System.out.println(grid[row][col] + ", " + row + ", " + col);
if (grid[row][col] != null) {
columnsFilled++;
if (columnsFilled == grid.length-1) {
System.out.println("full");
}
}
}
}
}
何かご意見は?
編集
public void checkBottomFull() {
for(int row = grid.length-1; row >= 0; row--) {
//loops through columns of each individual row
if (isFull(row)) {
System.out.println("full");
clearRow(row);
}
}
}
public boolean isFull(int row) {
for (int col = 0; col < grid[row].length-1; col++) {
if(grid[row][col] == null) {
System.out.println(grid[row][col] + "... " + row + ", " + col);
return false;
}
}
return true;
}
public void clearRow(int row) {
for (int col = 0; col < grid[row].length-1; col++) {
System.out.println("clearing...");
grid[row][col] = grid[row-1][col];
}
}
System.out.println(grid[row][col] + "... " + row + ", " + col);
出力: 列がインクリメントされないのはなぜですか?
null... 9, 0
null... 8, 0
null... 7, 0
null... 6, 0
null... 5, 0
null... 4, 0
null... 3, 0
null... 2, 0
null... 1, 0
null... 0, 0