import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;

public class BounceBall3{
  static int vmax=10;
  public static void main(String args[]){
     JFrame frame=new JFrame("BounceBall3");
     frame.setSize(600,600);
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     JCanvas canvas=new JCanvas();
     frame.add(canvas);
     frame.setVisible(true);

     Ball list[]=new Ball[6];
     list[0]=new Ball(Color.red,50,15);
     list[1]=new Ball(Color.blue,200,5);
     list[2]=new Ball(Color.green,100,10);
     list[3]=new Ball(Color.yellow,50,15);
     list[4]=new Ball(Color.lightGray,25,20);
     list[5]=new Ball(Color.cyan,75,10);

     while(true){
       int mx=canvas.getWidth();
       int my=canvas.getHeight();
       for(Ball b:list)b.move(mx,my);
       canvas.startBuffer();
       canvas.clear();
       for(Ball b:list)b.draw(canvas);
       canvas.setPaint(Color.black);
       canvas.endBuffer();
       canvas.sleep(10);   
     }
  }
}

class Ball{
  int x=0,y=0,d=50,vmax=10,vx=vmax,vy=vmax;
  int mx=500,my=500;
  Color color;
  Ball(Color c,int d,int vmax){color=c;this.d=d;this.vmax=vmax;}
  int random(int v){return (int) (Math.random()*v);}
  int adj(int v){ return Math.max(Math.min(v+random(3)-1,vmax),-vmax);  }
  void move(int mx,int my){
    this.mx=mx;this.my=my;
    x+=vx; y+=vy;
    if(x<0&&vx<0){x=0;vx=adj(-vx);}
    if(y<0&&vy<0){y=0;vy=adj(-vy);}
    if(x+d>mx&&vx>0){x=mx-d;vx=adj(-vx);}
    if(y+d>my&&vy>0){y=my-d;vy=adj(-vy);}
    if(vx==0)vx=1;if(vy==0)vy=1;
  }
  int getX(){return x;}  
  int getY(){return y;}  
  void draw(JCanvas canvas){
    canvas.setPaint(color);
    canvas.fillOval(x,y,d,d);
    
  }
}
