縦方向に跳ね返るようにする

xと同じことをyにも

xと同じことをyにもしてやればいいわけです。あとで横と縦を入れ替えることを予定しているので、xの記述は残してdx=0としておいて横には動かないようにします。

moveDisk

主な変更点

dx同様dyを設けて縦に動かすこと。dxは0にして残す。

横に動かすときは動かす高さをランダムに決めたが、縦に動かすときは横位置をランダムに決めた方がよい。

上下で跳ね返るようにする。

AnimeDisk3.javaをもとに、MoveDisk というクラスの部分だけ変わります。

ファイル名 AnimeDisk5.java の一部

class MoveDisk extends Thread {
    int x;
    int y;
    int d, dx, dy;
    int xmax, ymax;
    Graphics2D thg;
    MyPanel mypnl; 
    BufferedImage buffimg;

    public MoveDisk(MyPanel mypnl) {
        this.mypnl = mypnl;
        this.buffimg = mypnl.buffimg;
        thg  = buffimg.createGraphics();
        thg.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
                                 RenderingHints.VALUE_ANTIALIAS_ON);
        xmax = buffimg.getWidth();
        ymax = buffimg.getHeight();
        //x = xmax/4;  //100
        x = (int)(xmax*Math.random());
        //y = (int)(ymax*Math.random());
        y = ymax/4;  //100
        d = xmax/40;  //円の大きさ 10
        //dx = xmax/40; //動きの大きさ 10
        dx = 0;
        dy = ymax/40; //動きの大きさ 10
    }
    @Override
    public void run() {
        //thg.setColor(Color.red);
        while ( true ){
            thg.setColor(mypnl.bgcolor);
            thg.fillRect(x-d/2,y-d/2,d,d);
            x+=dx;
            if (x >xmax){
                x  = 2*xmax-x;
                dx = -dx;
            }
            if (0 > x){
                x  = -x;
                dx = -dx;
            }
            y+=dy;
            if (x >xmax){ //現在はxのコピー。ここを変える
                x  = 2*xmax-x;
                dx = -dx;
            }
            if (0 > x){
                x  = -x;
                dx = -dx;
            }              //ここまで
            thg.setColor(Color.red);
            thg.fillOval(x-d/2,y-d/2,d,d);
            mypnl.repaint();
            //100ms(0.1秒)停止
            try {
                Thread.sleep(100);
             }
            catch(InterruptedException ex) {
                System.err.println(ex);
            }
        }
    }
} //end of MoveDisk

強調部分が主要な変更です。

縦に動くこと以外はAnimeDisk3と同じです。

moveDisk

課題

1.

縦に動くことを確認しなさい。

ファイル名 AnimeDisk5.java


Javaプログラミング
聖愛中学高等学校
http://www.seiai.ed.jp/
Dec.2003
Oct.2010
Oct.2012