次a

跳ね返るようにする(別の方法)

xの値

2つの変更をします。

1.一つ前の円を消して軌跡を残さない

2.右端までいったら左へ進むようにし、左端へいったら右へ進むようにする

moveDisk

MovDisk2.javaをもとに、スレッドを使う MakeDisk6Move の部分だけ変わります。

ファイル名 MovDisk3.java の一部

//円を動かすクラス
class MakeDisk6Move extends Thread {
    MyPanel pnl;
    BufferedImage image;
    Graphics bfg;
    Color bc;
    int x = 100;
    int y ;
    int lx =0;
    int d = 10;
    int dx = 10;
    int xmax,ymax;
    //コンストラクタpublic Color getBackground()/java.awt.Component

    public MakeDisk6Move(MyPanel pn) {
        pnl   = pn;
        image = pn.buffimg;
        bfg = image.createGraphics();
        xmax = image.getWidth();
        ymax = image.getHeight();
        y = (int)(ymax*Math.random());
        bc = pnl.getBackground();
     }

    @Override  //add
    public void run() { //add
       bfg.setColor(Color.red);
       bfg.drawString(getName(),x-90,y);
       while ( true ){
            bfg.setColor(bc);
            bfg.fillOval(lx-d/2,y-d/2,d,d);            
            bfg.setColor(Color.red);
            bfg.fillOval(x-d/2,y-d/2,d,d);
            pnl.repaint();
            lx = x;
            x+=dx;
            if (x >xmax){
                    x  = 2*xmax-x;
                    dx = -dx;
            }
            if (0 > x){
                    x  = -x;
                    dx = -dx;
            } 
            //100ms(0.1秒)停止
            try {
                Thread.sleep(100);
              }
            catch(InterruptedException ex) {
                System.err.println(ex);
              }
        }//end of while
    }//add end of run
}//end of class MakeDisk6Move

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

次の●を描くまえに前の●を消します。そのために2つの情報が必要です。

前の●の位置 : lx に前の x を記憶しています。

背景色 : コンストラクタで pnl.getBackground() により背景色を得て、bc におぼえて置きます。

やはり複数の●を動かせますし、green, blue も生きています。

moveDisk

課題

1.

左右で跳ね返ることを確認しなさい。

ファイル名 MovDisk3.java


もくじ
Javaプログラミング
聖愛中学高等学校
http://www.seiai.ed.jp/
Dec.2009
Nov.2011