xと同じことをyにもしてやればいいわけです。あとで横と縦を入れ替えることを予定しているので、xの記述は残してdx=0としておいて横には動かないようにします。
lx同様lyを設けて前の位置を覚えておくこと
dx同様dyを設けて縦に動かすこと。dxは0にしておく。
横に動かすときは動かす高さをランダムに決めたが、縦に動かすときは横位置をランダムに決めた方がよい。
前の位置の●を消すのにはlxの他にlyも使う
上下で跳ね返るようにする。
MoveDisk3.javaをもとに、moveDisk というクラスの部分だけ変わります。
//円を動かすクラス class moveDisk extends Thread{ MyPanel pnl; BufferedImage image; int x ; int y ; int lx =0; int ly =0; int d = 10; int dx = 0; int dy = 10; //constructor public moveDisk(MyPanel pn, BufferedImage im) { this.pnl = pn; this.image = im; //y = (int)(image.getHeight()*Math.random()); y = 100; x = (int)(image.getWidth()*Math.random()); } @Override public void run() { Graphics thg = image.createGraphics(); Color bc= new Color(255,255,191); //背景の色 thg.setColor(Color.red); thg.drawString(getName(),x,y); while ( true ){ thg.setColor(bc); thg.fillOval(lx-d/2,ly-d/2,d,d); thg.setColor(Color.red); thg.fillOval(x-d/2,y-d/2,d,d); pnl.repaint(); lx = x; ly = y; x += dx; y += dy; if (x >image.getWidth()){ x = 2*image.getWidth()-x; dx = -dx; } if (0 > x){ x = -x; dx = -dx; } if (x >image.getWidth()){//現在はxのコピー。ここを変える x = 2*image.getWidth()-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 }//end of run }//end of class moveDisk
強調部分が主要な変更です。
縦に動くこと以外はMoveDisk3と同じです。
縦に動くことを確認しなさい。