1

楽しいサイド プロジェクトとして、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()ブロックが上部にスタックするとゲームが終了します。

ここに画像の説明を入力


私は次のことに苦労しています:

  • 実際のテトリス ピースを作成するには、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, block4activetile

        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

ありがとう!

4

1 に答える 1

1

Polygon クラスを見てみましょう: http://docs.oracle.com/javase/6/docs/api/java/awt/Polygon.html
ポイントとの衝突 (内側) をテストできるメソッドが提供されています別のオブジェクト。translate(deltaX, deltaY)オブジェクトの「動き」を大幅に簡素化するためにも使用できます。

于 2013-03-07T06:06:23.007 に答える