我在俄罗斯方块中清除行时遇到了一些奇怪的事情......
如果我将板的宽度和高度设置为相同(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()
遍历了 grid.length-1,它等于 10 ( for(int row = grid.length-1; row >= 0; row--) {
) 但是我将高度(行)设置为 12 gameBoard = new Board(10, 12, 35);
,所以我应该循环遍历 12 行,而不是 10。我应该每循环 10 列排...
所以我硬编码了下面 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 异常......
不知道为什么