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と同じです。

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