每当我开始运行程序时如何制作随机位置?

我有一个随机移动的图像。 我的问题是每次我开始运行程序时,图像总是出现在左上角并移动一个对角线方向,在撞到墙壁后,它开始随机移动方向。 每次执行或运行程序时,如何使图像显示在随机位置? 任何帮助将非常感激…

这是代码:

public class Ball extends JPanel implements Runnable { private Image ball; private Thread animator; private int x; private int y; private final int DELAY = 50; private int xVelocity = 1; private int yVelocity = 1; private static final int RIGHT_WALL = 400; private static final int LEFT_WALL = 1; private static final int DOWN_WALL = 400; private static final int UP_WALL = 1; private boolean showImage; public Ball() { randomPosition(); setRandomDirection(); setBackground(Color.BLACK); setDoubleBuffered(true); ImageIcon ii = new ImageIcon(this.getClass().getResource("ball.gif")); ball = ii.getImage(); x = y = 10; } public void addNotify() { super.addNotify(); animator = new Thread(this); animator.start(); } public void paint(Graphics g) { super.paint(g); Graphics2D g2d = (Graphics2D) g; g2d.drawImage(ball, x, y, this); Toolkit.getDefaultToolkit().sync(); g.dispose(); } public void move() { x += xVelocity; y += yVelocity; if (x >= RIGHT_WALL) { x = RIGHT_WALL; randomDirection(); } if (y <= UP_WALL) { y = UP_WALL; randomDirection(); } if (x = DOWN_WALL) { y = DOWN_WALL; randomDirection(); } } private void randomDirection() { double speed = 2.0; double direction = Math.random() * 2 * Math.PI; xVelocity = (int) (speed * Math.cos(direction)); yVelocity = (int) (speed * Math.sin(direction)); } private void randomPosition() { x = LEFT_WALL + (int) (Math.random() * (RIGHT_WALL - LEFT_WALL)); y = UP_WALL + (int) (Math.random() * (DOWN_WALL - UP_WALL)); } public void run() { long beforeTime, timeDiff, sleep; beforeTime = System.currentTimeMillis(); while (true) { cycle(); repaint(); timeDiff = System.currentTimeMillis() - beforeTime; sleep = DELAY - timeDiff; if (sleep > 2) { sleep = 1; } try { Thread.sleep(sleep); } catch (InterruptedException e) { System.out.println("interrupted"); } beforeTime = System.currentTimeMillis(); } } } 

您所需要的只是移动物体中x和y的设定器:

 public void randomStart(){ this.x = Math.random() * this.RIGHT_WALL; this.y = Math.random() * this.DOWN_WALL; } 

然后你从main()调用它。

randomDirection()方法一样,您应该随机初始化图像的x和y位置:

 private void randomPosition() { x = LEFT_WALL + (int) (Math.random() * (RIGHT_WALL - LEFT_WALL)); y = UP_WALL + (int) (Math.random() * (DOWN_WALL - UP_WALL)); } 

您还应该在构造函数中调用randomDirection()方法一次,这样每次启动程序时,图像都会向另一个方向移动。

所以构造函数应该如下所示:

 public YourClassName() { randomPosition(); randomDirection(); } 

您还必须随机生成初始化值。

其实你总是采取:

 private int x, y; private int xVelocity = 1; private int yVelocity = 1; 

所以x == 0y == 0xVelocity == 1yVelocity == 1作为变量的静态初始值。

 Random r = new Random() public Ball() { randomPosition(); setRandomDirection(); setBackground(Color.BLACK); setDoubleBuffered(true); ImageIcon ii = new ImageIcon(this.getClass().getResource("chicken.gif")); ball = ii.getImage(); this.x = r.nextInt(); this.y = r.nextInt(); }