0

テトリスで行をクリアすると、奇妙なことがいくつか発生します...

ボードの幅と高さを同じ (10 と 10) に設定した場合:

board = new Board(10, 10, 35);

以下によって決定されます。

public Board(int w, int h, int ts) {
    width = w;
    height = h;
    tilesize = ts;
    grid = new Tile[width][height];
...
}

public int getWidth() {
       return width * tilesize; 
}

public int getHeight() {
       return height * tilesize;
}

行のクリアは正常に機能しているようです (ただし、その下に非表示の行がある理由はわかりませんが、JFrame に完全に収まるはずではありませんか?):

ここに画像の説明を入力ここに画像の説明を入力

しかし、幅と高さを別々に設定すると (ここでは 10 と 12)、行はクリアされません。

board = new Board(10, 12, 35);

ここに画像の説明を入力

行のクリア:

public void checkBottomFull() {
    System.out.println(grid.length);
    int lines = 0;
    for(int row = grid.length-1; row >= 0; row--) {
        while (isFull(row)) {       
            lines++;
            clearRow(row);   
        }
    }
}

public boolean isFull(int row) {
    for (int col = 0; col <= grid[row].length-1; col++) {
        while(grid[col][row] == null) {
             return false;
        }
    }
    return true;
}

public void clearRow(int rowToClear) {
     for(int row = rowToClear; row > 0; row--) {
         for(int col = 0; col < grid[row].length; col++) {
            grid[col][row] = grid[col][row-1];
         }
     }
}

寸法が等しいと行がクリアされる理由は何ですか? なぜそれが重要なのですか?

ありがとう!


問題は見つかったと思いますが、解決しようとするとエラーがスローされます。

以前は、checkBottomFull()10 ( ) に等しい grid.length-1 をループしていましたが、for(int row = grid.length-1; row >= 0; row--) {高さ (行) を 12gameBoard = new Board(10, 12, 35);にしたので、10 行ではなく 12 行をループする必要があります。行...

そのため、行を 12 に、列を 10 にハードコードしました...

//loop through all rows (12 rows)
public void checkBottomFull() {
    System.out.println(grid.length);
    for(int row = 12; row > 0; row--) {
        while (isFull(row)) {       
            clearRow(row);   
        }
    }
}
//loop through all columns in that row (10 columns)
public boolean isFull(int row) {
    System.out.println(grid[row].length);
    for (int col = 0; col <= 10; col++) {
        if(grid[col][row] == null) {
             return false;
        }
    }
    return true;
}

しかし、それは IndexOutOfBounds 例外をスローしています...

理由がわからない

4

2 に答える 2