人工知能に関する断創録

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

跳ね回るボール

ブロックを壊すボールを実装します。ボールは壁に当たったら跳ね返ります。実行するとわかりますがラケットに当てなくてもボールが跳ね返るようになっています。次回はボールとラケットの当たり判定処理を入れてボールがラケットに当たったとき跳ね返るようにします。

breakout02.jar

ボールクラスです。ボールの実装はボールを動かす(2004/9/19)とボールが跳ね返る処理(2004/9/20)で詳しく解説したので見てください。

public class Ball {
    // サイズ
    private static final int SIZE = 8;

    // 位置(ボールを囲む矩形の左上隅)
    private int x, y;
    // 速度
    private int vx, vy;

    // 乱数生成器
    private Random rand;

    public Ball() {
        rand = new Random(System.currentTimeMillis());

        // 位置を初期化
        x = rand.nextInt(MainPanel.WIDTH - SIZE);
        y = 0;

        // 速度を初期化(とりあえず固定)
        vx = 5;
        vy = 5;
    }

    /**
     * ボールを描画
     * 
     * @param g
     */
    public void draw(Graphics g) {
        g.setColor(Color.YELLOW);
        g.fillOval(x, y, SIZE, SIZE);
    }

    /**
     * ボールの移動
     * 
     */
    public void move() {
        x += vx;
        y += vy;

        // 左右の壁にぶつかった場合にバウンド
        if (x < 0 || x > MainPanel.WIDTH - SIZE) {
            vx = -vx;
        }

        // 上下の壁にぶつかった場合にバウンド
        if (y < 0 || y > MainPanel.HEIGHT - SIZE) {
            vy = -vy;
        }
    }
}