Javaでテトリスというゲームを作ろうとしています。
私はそれを次のようにしました:
床にぶつかるか、y+1 が null でない場合 (その下に別のブロックがあることを意味する)、新しいブロックが生成される
public void collisionCheck(int x, int y) { if (activetile.getY() == this.height-2 || getTileAt(x, y+1) != null) { activetile = new Tile(this, 0, 0); } }
一番下の行が null 以外の値、またはテトリスのピースでいっぱいになると、行がクリアされます (y = 4 (床) の場合、x = 4 まで x をループし、すべてが null でないかどうかを確認します)。
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();
}
}
私が抱えている2つの問題があります:
1) 写真では、私がブロックを床まで落としてしまったことに気付くでしょう...そして列が空になりました。クリアすると、左上 (x=0、y=1) にブロックが生成されますが、これは制御できません。
2)床に赤い線があるようです...これは、JFrameによって隠されているブロックの列であると想定しています...なぜそこにあるのかわかりません。
参考までに: grid[j][i] の行と列が反転している理由 (別名、grid[i][j] ではない理由) は、次のようにインスタンス化したためです。grid = new Tile[height][width];
何かご意見は?
ありがとう!