程序有个地方看不懂,求指点
本帖最后由 wlqqqq 于 2013-01-24 16:17:46 编辑
以下程序是实现台上有多个弹球在上面运动的程序,标红色部分为什么要循环,看不懂,求指教
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; //x坐标
y=_y; //y坐标
xdir= _xdir; //x方向速度
ydir= _ydir; //y方向速度
}
public void run()
{
while(true)
{
if((x>(table.getSize().width)-25)||(x<0))
xdir*=(-1); //超过台子x方向边界后,反方向运行
if((y>(table.getSize().width)-25)||(y<0))
ydir*=(-1); //超过台子y方向边界后,反方向运行
x+=xdir; //坐标递增 以实现移动
y+=ydir;
try{ sleep(30); //延时时间(1/刷新率)
} catch(InterruptedException e)
{
System.err.println("Thread interrupted");}
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("开始");
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 ae)
{
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().height*Math.random());
//实例化弹子线程对象
marbles[i]=new Marble(this,x,y,xdir,ydir);
marbles[i].start();
}
}
public void paint(Graphics g)