1

私はテトリスを構築しており、タイルの 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
4

4 に答える 4

1

投稿したコードにはいくつかの論理エラーがありました。添付のコードは、すべてを実装することなくそれらを修正します。

public class SampleClass {

static String[][] grid = new String[4][10];

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
    loadGrid();
    checkBottomFull();
}
public static void checkBottomFull() {
    int columnsFilled = 0;
    //loops through rows only after each column has finished
    for(int row = grid.length-1; row >= 0; row--) {//needed 'greater than or equal to'
        columnsFilled=0; //need to reinitialize this before every iteration
        for(int col = 0; col <= grid[row].length-1; col++) { //needed 'less than or equal to'
           System.out.println(row + ", " + col+", "+grid[row][col]);       
            if (grid[row][col] != null) {
                columnsFilled++;
            }
        }
        System.out.println("columns that have a character" + columnsFilled);
        System.out.println("Needs to be "+grid[row].length+" to remove row");
        if (columnsFilled == grid[row].length) {
            System.out.println("full");   //this is where you should remove a row  
        }
    }
}

private static void loadGrid() {
    grid[0] = new String[] {"X","X","X","X","X","X","X","X","X","X"};
    grid[1] = new String[] {"X","X",null,"X","X","X",null,"X","X","X"};
    grid[2] = new String[] {"X","X","X",null,"X","X",null,"X","X","X"};
    grid[3] = new String[] {"X","X",null,"X","X","X",null,"X","X","X"};
}

}

于 2013-04-01T16:28:28.160 に答える