読者です 読者をやめる 読者になる 読者になる

人工知能に関する断創録

人工知能、認知科学、心理学、ロボティクス、生物学などに興味を持っています。このブログでは人工知能のさまざまな分野について調査したことをまとめています。最近は、機械学習、Deep Learning、Kerasに関する記事が多いです。



ブロックの落下

Javagame

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

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()は一時的なメソッドなので後で消します。