随机双生成器用于新位置

时间:2012-12-12 20:48:22

标签: java random double

我有一个代码,当在参数中输入时,它会向我的鼠标光标重复引力。单击鼠标时,会创建一个推动对象的反向效果(矩形远离它)。我试图将其设置为当您单击并按住时,当对象在x或y坐标中按某个数字时,它将随机更改该对象的x和y。这是我的代码。评论区域是我尝试使x和y在达到500个参数时随机变化的地方。

import java.awt.*;

import java.util.Random;
    public class Ball
{

private Color col;
private double x, y;         // location
private double vx, vy;       // velocity

public Ball(int new_x, int new_y, int new_vx, int new_vy)
{
     x = new_x; 
     y = new_y; 
     vx = new_vx; 
     vy = new_vy;
}

public Ball()
{
    Random gen = new Random();
    x = gen.nextInt(480);
    y = gen.nextInt(480);
    vx = gen.nextInt(10);
    vy = gen.nextInt(10);

    col = new Color(gen.nextInt(255),gen.nextInt(255),gen.nextInt(255));

}

void paint( Graphics h)
{
    h.setColor(col);
    h.fillRect((int)x,(int)y,20,20);  
}

void move(int currentX, int currentY, boolean isButtonPressed )
{
    double dvx, dvy, rx, ry;
    double r_mag;


    x = x + vx;
    y = y + vy;  

    //bounce
    if  (x > 480 || x < 0)
       vx = -vx;
    if (y > 480 || y < 0)
        vy = -vy;



   if ( currentX <500 && currentY <500)   // mouse is on canvas, apply "gravity" 
   {
      rx = currentX - x;
      ry = currentY - y;
      r_mag = Math.sqrt((rx*rx) + (ry*ry));

//           if ( x = 500 || y = 500)
//             Random x = new Random();
//             x.nextDouble();
//             Random y = new Random();
//             y.nextDouble();

      if (r_mag < 1)
        r_mag = 1;

      dvx = (rx / r_mag);
      dvy = (ry / r_mag);

      if (isButtonPressed)
      {
        vx = vx - dvx;   // + makes balls move to cursor.
        vy = vy - dvy;   // - makes balls move away from cursor. 
      }
      else 
      {
        vx = vx + dvx;   // + makes balls move to cursor.
        vy = vy + dvy;   // - makes balls move away from cursor.

      }
    }

    // reduce speed slowly
    vx = .99*vx;
    vy = .99*vy;
}

}

1 个答案:

答案 0 :(得分:2)

  

评论区域是我尝试使x和y在达到500个参数时随机变化的地方。

所以当xy达到500时,您想要随机重定位对象吗?

而不是

//           if ( x = 500 || y = 500)

这是作业,而不是比较

//             Random x = new Random();

重新声明x,而不是你想要的

//             x.nextDouble();

声明无效

//             Random y = new Random();
//             y.nextDouble();

见上文

你可以使用Math.random(),如

if (x == 500 || y == 500) {
    x = Math.random()*480;
    y = Math.random()*480;
}

(注意:Math.random()在半开区间double内返回[0,1),因此您必须缩放它;我使用的缩放系数480是猜测)或(不太好,IMO)每次输入Random时都会创建一个新的if实例。

但是,

  1. xy,速度vxvydoubles,因此动作不太可能x y 1}}或500变为>=,因此您应该在条件中测试==而不是{{1}}。

  2. 在代码中,当任一坐标经过480时,你都会翻转速度,因此难以达到500或更远,只能通过使用鼠标进行明智的加速来实现,因此可能需要更小的阈值。