楽しいサイド プロジェクトとして、Java でゲーム テトリスを作ろうとしています。
私のゲーム ボードはタイルのグリッドです。
grid = new Tile[height][width];
グリッド内で、新しい Tile オブジェクトを作成します。activetile = new Tile(this,0, 0); //add new tile to "this" board
現在:
単一のタイルを制御できます-下、左、右に移動します
public void keyPressed(KeyEvent e) { int keyCode = e.getKeyCode(); if(keyCode == KeyEvent.VK_DOWN) { checkBottomFull(0,4); collisionCheck(activetile.getX(),activetile.getY()); checkEndGame(activetile.getX(), activetile.getY()); activetile.setLocation(activetile.getX(), activetile.getY()+1); System.out.println("coordinates: " + activetile.getX() + ", " + activetile.getY()); repaint(); } ...right key and left key code omitted
- keyPressed メソッドからわかるように、
checkBottomFull()
いっぱいになると一番下の行がクリアcollisionCheck()
され、ブロックが床または下の別のピースに当たると新しいピースが生成され、checkEndGame()
ブロックが上部にスタックするとゲームが終了します。
- keyPressed メソッドからわかるように、
私は次のことに苦労しています:
実際のテトリス ピースを作成するには、Tile の他の 3 つのインスタンスを生成し、それがどのピースであるか (L、O、Bar、Z など) に基づいて、activetile (私が制御できる単一のタイル)、次のように:
if (piece == "Bar") { block2 = new Tile(this, activetile.getX(), activetile.getY()); block3 = new Tile(this, activetile.getX()+2, activetile.getY()); block4 = new Tile(this, activetile.getX()+3, activetile.getY()); }
これに関する問題は、他のブロックに衝突するため、私の衝突検出でactivetile
は適切に移動できないことです。次のように、アクティブタイルの新しい場所が設定された後のkeyPressed()
場所を設定することで、それを修正しようとしました:block2, block3, block4
activetile
activetile.setLocation(activetile.getX(), activetile.getY()+1);
block2.setLocation(activetile.getX(), activetile.getY()+1);
block3.setLocation(activetile.getX(), activetile.getY()+1);
block4.setLocation(activetile.getX(), activetile.getY()+1);
これは、下に移動する場合には機能する可能性がありますが、タイルが重なるため、左右に移動する場合には機能しません。
Bar
それで、そのような新しいブロックを生成することによって、ピースの新しいインスタンスを正しく作成していますか? 私の考えは正しいですか?
実行可能
https://www.dropbox.com/s/oyh26dfbmsvt5c8/my_tetris_test.jar
ソースコードzipへのリンク
https://www.dropbox.com/s/9kt3sl6qqo54amk/Tetris%20Two.rar
ありがとう!