随机弹跳球

时间:2016-07-15 13:55:26

标签: java algorithm bounce

我在互联网上找到了一些解释如何使球弹跳的答案,但其中一些没有帮助我(因为弹跳不是随机的),有些非常困难(我的物理知识有限)。 / p>

问题:我有一个移动和弹跳的球,但不是随机的,我想让这个球随机弹跳。

我已经有了这段代码:

Public Class Ball{

    /** Coordinates */
    private int x, y;

    /** Speed of the ball*/
    private int speedX, speedY;

    public Ball(int x, int y, int speedX, int speedY) {
        this.x = x ;
        this.y = y ;
        this.speedX = speedX;
        this.speedY = speedY;
    }

    public void moveAndBounce() {
        x += speedX ;
        y += speedY ;

        // Assuming that touchWallHorizontal() and touchWallHorizontal() work
        if (touchHorizontalWall()) {
            speedX = -speedX ;
        }
        if (touchVerticalWall()) {
            speedY = -speedY ;
        }
    }

    public static void main (String [] args){
        Ball ball = new Ball(); // Initialisation
        while (true){
            ball.moveAndBounce() ;
        }
    }
}

它完美无缺,但球的运动总是相同的(矩形)。

问题:有没有办法随机弹跳而不添加球的属性(只是坐标和速度)?

如果没有,解决这个问题的解决方案难度不大吗?

提前致谢!

1 个答案:

答案 0 :(得分:1)

问题解决了。这是moveAndBounce()方法的新代码(感谢johnHopkins):

public void moveAndBounce() {
    x += speedX ;
    y += speedY ;

    Random random = new Random();
    if (touchHorizontalWall()) {
        if (speedX > 0) {

            // New speed between 10 and 15 (you can choose other)
            setSpeedX(-random.nextInt(15) + 10);
        } else {
            setSpeedX(random.nextInt(15) + 10
        }
    }
    if (touchVerticalWall()) {
        if (speedY > 0) {
            setSpeedY(-random.nextInt(15) + 10);
        } else {
            setSpeedY(random.nextInt(15) + 10);
        }
    }
}