程序有个地方看不懂,求指点

wlqqqq 2013-01-24 04:16:14
以下程序是实现台上有多个弹球在上面运动的程序,标红色部分为什么要循环,看不懂,求指教
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)
{
for(int i=0;i<marbles.length;i++)
if(marbles[i]!=null)
marbles[i].draw(g);

}
}

/* 定义主类 */
public class Example7_5
{
public static void main(String args[])
{
Table table=new Table();
}
}


以上程序是实现台上有多个弹球在上面运动的程序,标红色部分为什么要循环,看不懂,求指教
...全文
167 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
wlqqqq 2013-01-25
  • 打赏
  • 举报
回复
引用 1 楼 abc41106 的回复:
它只是遍历marbles,画每一个球。 楼主是不是想多了? 你可以不用循环试试: if(marbles[0]!=null) marbles[0].draw(g);
哈哈,理解了,一语惊醒梦中人啊
abc41106 2013-01-24
  • 打赏
  • 举报
回复
它只是遍历marbles,画每一个球。 楼主是不是想多了? 你可以不用循环试试: if(marbles[0]!=null) marbles[0].draw(g);

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧