Java俄罗斯方块-奇怪的行清除问题

Java俄罗斯方块-奇怪的行清除问题,java,swing,Java,Swing,我在俄罗斯方块中遇到了一些奇怪的事情 如果我将板的宽度和高度设置为相同(10和10): 由以下因素决定: 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

我在俄罗斯方块中遇到了一些奇怪的事情

如果我将板的宽度和高度设置为相同(10和10):

由以下因素决定:

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];
         }
     }
}
但是它抛出了一个IndexOutOfBounds异常


不知道为什么我注意到一件事:

for (int col = 0; col <= grid[row].length-1; col++) {
    while(grid[col][row] == null) {

for(int col=0;col您的循环可能在某个地方交换了网格/列的最大值。当它是正方形时效果很好,因为它们是相同的。如果它不是正方形(即行/列的最大值不同),那么对于一边它将不会处理整个行/列,而另一边将溢出


不相关,但是
的while(grid[col][row]==null)
循环在
isFull(…)中有什么意义呢
method?这应该是一个
if
吗?

为了更快地获得更好的帮助,发布一个。你几乎肯定是在一个数组索引中交换
col
row
,而不是在某个你不应该在的地方。annnnnnnnd我正在唱俄罗斯方块歌。谢谢我将
row
传递到isFull(它在基于该行的列中循环)每次checkBottomFull循环遍历一行时,我都会在上面进行编辑。我想我发现了问题,但不知道如何解决错误。是的,我不小心把它放在了那里,因为我原来有
if(isFull(row)){
,所以我需要
isFull()
中。但后来更改了
if(isFull(row)){
to
while(isFull(row)){
我在上面做了编辑。我想我发现了问题,但不知道如何解决错误您仍然有索引交换。在最新的
isFull(…)
中,您有
grid[col][row]=…
。这不应该是
grid[row][col col code>?二维数组是一个“数组数组数组”因此,如果
grid.length
是指行数(这是基于
checkBottomFull()
方法的结果),那么
grid[x]
是行x,而不是列x。
grid.length
返回10,这是我为列数(宽度)而不是行数(高度)指定的值。我更改了
if(grid[col][row]==null){
if(grid[row][col]==null){
并且它将索引抛出边界异常:12.电路板创建错误。宽度/高度颠倒。它应该是
grid=new Tile[height][width]
//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;
}
for (int col = 0; col <= grid[row].length-1; col++) {
    while(grid[col][row] == null) {