人工知能に関する断創録

このブログでは人工知能のさまざまな分野について調査したことをまとめています(更新停止: 2019年12月31日)

ブロックの落下

ブロックが自動落下するように修正します。テトリスは落ちゲーなのでブロックが落ちないことには始まりません。

tetris05.jar

ブロックが落下するためにはゲームループを実装します。ゲームループが回るたびにブロックが下に移動するように変更すればいいですね。MainPanelを見てください。

    // ゲームループ用スレッド
    private Thread gameLoop;
    
    // ゲームループ開始
    gameLoop = new Thread(this);
    gameLoop.start();

ゲームループ用スレッドを宣言して、開始しています。ループの本体はこうです。

    /**
     * ゲームループ
     */
    public void run() {
        while (true) {
            // ブロックを下方向へ移動する
            block.move(Block.DOWN);
            
            repaint();
            
            try {
                Thread.sleep(200);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

ゲームループでブロックが下へ移動するようにしてますね。こうすると下キーを押さなくても一定の速度で落下します。下キーを押せばさらにキーによる下へ移動処理が加わるのでさらに速く落下します。

休止時間は200ミリ秒としています。これを小さくすると落下が速くなり難しくなります。

ちなみに今のままですとブロックが下まで落下した後にNキーを押してブロックを切り替えると壁にめりこみます。これはcreateBarBlock()に壁との衝突処理を入れてないからです。createBarBlock()は一時的なメソッドなので後で消します。