import java.awt.*;
import java.awt.event.*;
class Marble extends Thread
{
Table table=null;
int x,y,xdir,ydir;
public Marble (Table _table,int _x,int _y,int _xdir,int _ydir)
{
table=_table;
x=_x;
y=_y;
xdir=_xdir;
ydir=_ydir;
}
public void run()
{
while(true)
{
if((x>(table.getSize().width)-25)||(x<0))
{
xdir*=(-1);
}
if((y>(table.getSize().width)-25)||(y<0))
{
ydir*=(-1);
}
x+=xdir;
y+=ydir;
try
{
sleep(30);
}
catch(InterruptedException e)
{
System.err.println("Thread iterrupted");
}
table.repaint();
}
}
public void draw(Graphics g)
{
g.setColor(Color.black);
g.fillOval(x, y, 30, 30);
g.setColor(Color.white);
g.fillOval(x+5,y+5,8,6);
}
}
class Table extends Frame implements ActionListener
{
Button start=new Button("start");
Marble marbles[]=new Marble[5];
int v=2;
public Table()
{
super("弹子弹球");
setSize(300,300);
setBackground(Color.cyan);
setVisible(true);
setLayout(new FlowLayout());
add(start);
start.addActionListener(this);
validate();
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
for(int i=0;i<marbles.length;i++)
{
int xdir=i*(1-i*(int)Math.round(Math.random()))+v;
int ydir=i*(1-i*(int)Math.round(Math.random()))+v;
int x=(int)(getSize().width*Math.random());
int y=(int)(getSize().width*Math.random());
marbles[i]=new Marble(this,x,y,xdir,ydir);
marbles[i].start();
}
}
public void paint(Graphics g)
{
for(int i=0;i<marbles.length;i++)
{
if(marbles[i]!=null)
{
marbles[i].draw(g);
}
}
}
}
public class Main {
public static void main(String args[])
{
Table table=new Table();
}
}