Thanks. I'm just tooling around with the file, and trying to increase the number of balls to 20, and adding in an even hanlder to add a new ball everytime the mouse is clicked, but it' won't go. I think I have the right idea, but it just won't compile. Here si the code I have so far:
import java.awt.*;
import java.applet.*;
class Ball
{
//the boundaries of the window and the diameter of our ball
//we tell our balls the window size by constructor, so we can
//change the applet's size easily
int width, height;
static final int diameter=30;
//coordinates and value of increment
double x, y, xinc, yinc;
Color color;
Graphics g;
//the constructor
public Ball(int w, int h, int x, int y, double xinc, double yinc, Color c)
{
width=w;
height=h;
this.x=x;
this.y=y;
this.xinc=xinc;
this.yinc=yinc;
color=c;
}
public void move()
{
x+=xinc;
y+=yinc;
//when the ball bumps against a boundary, it bounces off
if(x<0 || x>width-diameter)
{
xinc=-xinc;
x+=xinc;
}
if(y<0 || y>height-diameter)
{
yinc=-yinc;
y+=yinc;
}
}
public void paint(Graphics gr)
{
g=gr;
g.setColor(color);
//the coordinates in fillOval have to be int, so we cast
//explicitly from double to int
g.fillOval((int)x,(int)y,diameter,diameter);
}
}
public class Project32 extends Applet implements Runnable
{
Thread runner;
Image Buffer;
Graphics gBuffer;
Ball ball[];
//how many balls?
static final int MAX=20;
public void mouseClicked()
{
Buffer=createImage(size().width,size().height);
gBuffer=Buffer.getGraphics();
ball=new Ball[MAX];
int w=size().width;
int h=size().height;
//our balls have different start coordinates, increment values
//(speed, direction) and colors
ball[0]=new Ball(w,h,50,20,1.5,2.0,Color.blue);
ball[1]=new Ball(w,h,60,100,2.0,-3.0,Color.red);
ball[2]=new Ball(w,h,15,70,-2.0,-2.5,Color.green);
ball[3]=new Ball(w,h,150,60,-2.7,-2.0,Color.cyan);
ball[4]=new Ball(w,h,210,30,2.2,-3.5,Color.magenta);
ball[5]=new Ball(w,h,50,20,1.5,2.0,Color.blue);
ball[6]=new Ball(w,h,60,100,2.0,-3.0,Color.red);
ball[7]=new Ball(w,h,15,70,-2.0,-2.5,Color.green);
ball[8]=new Ball(w,h,150,60,-2.7,-2.0,Color.cyan);
ball[9]=new Ball(w,h,210,30,2.2,-3.5,Color.magenta);
ball[10]=new Ball(w,h,50,20,1.5,2.0,Color.blue);
ball[11]=new Ball(w,h,60,100,2.0,-3.0,Color.red);
ball[12]=new Ball(w,h,15,70,-2.0,-2.5,Color.green);
ball[13]=new Ball(w,h,150,60,-2.7,-2.0,Color.cyan);
ball[14]=new Ball(w,h,210,30,2.2,-3.5,Color.magenta);
ball[15]=new Ball(w,h,50,20,1.5,2.0,Color.blue);
ball[16]=new Ball(w,h,60,100,2.0,-3.0,Color.red);
ball[17]=new Ball(w,h,15,70,-2.0,-2.5,Color.green);
ball[18]=new Ball(w,h,150,60,-2.7,-2.0,Color.cyan);
ball[19]=new Ball(w,h,210,30,2.2,-3.5,Color.magenta);
}
public void start()
{
if (runner == null)
{
runner = new Thread (this);
runner.start();
}
}
public void stop()
{
if (runner != null)
{
runner.stop();
runner = null;
}
}
public void run()
{
while(true)
{
//Thread sleeps for 15 milliseconds here
try {runner.sleep(15);}
catch (Exception e) { }
//move our balls around
for(int i=0;i<MAX;i++)
ball[i].move();
repaint();
}
}
public void update(Graphics g)
{
paint(g);
}
public void paint(Graphics g)
{
//draw a gray background and a grid of lines
gBuffer.setColor(Color.gray);
gBuffer.fillRect(0,0,size().width,size().height);
gBuffer.setColor(Color.lightGray);
for(int x=0;x<size().width;x+=50)
gBuffer.drawLine(x,0,x,size().height);
for(int y=0;y<size().height;y+=50)
gBuffer.drawLine(0,y,size().width,y);
//paint our balls
for(int i=0;i<MAX;i++)
ball[i].paint(gBuffer);
g.drawImage (Buffer,0,0, this);
}
}