我正在尝试用java制作游戏俄罗斯方块。
我已经做到了:
当它撞到地板或它的 y+1 不为空时会生成一个新块(意味着它下面还有另一个块)
public void collisionCheck(int x, int y) { if (activetile.getY() == this.height-2 || getTileAt(x, y+1) != null) { activetile = new Tile(this, 0, 0); } }
当底行充满非空值或俄罗斯方块时,一行将被清除(对于 y = 4(地板),循环通过 x 直到 x = 4 并检查是否所有非空)
public void checkBottomFull(int x, int y) { while (getTileAt(x,y) != null) { say("(" + x + ", " + y +")"); if (x == 3) { say("row is full"); //replace full row with tiles from above for (int i = 0; i < 4; i++) { for (int j = 5; j > 0; j--) { grid[j][i] = getTileAt(i,j-1); grid[j-1][i] = null; } } break; } x++; } }
现在,我正在使用键来移动块:
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
if(keyCode == KeyEvent.VK_DOWN) {
activetile.setLocation(activetile.getX(), activetile.getY()+1);
System.out.println("coordinates: " + activetile.getX() + ", " + activetile.getY());
collisionCheck(activetile.getX(),activetile.getY());
checkBottomFull(0,4);
repaint();
}
}
我有两个问题:
1)在图片中,您会注意到我已经将积木一直掉到地板上......并且该行被清除了。清除后,它将在左上角(x=0,y=1)生成一个我无法控制的块。
2)在地板上似乎有一条红线......我假设它是被JFrame隐藏的一排块......我不确定为什么会在那里。
仅供参考:如果您想知道为什么 grid[j][i] 的行和列被翻转(也就是为什么它不是 grid[i][j])是因为我将它实例化为grid = new Tile[height][width];
有什么想法吗?
谢谢!