随机方向(Random directions)

2019-10-17 08:02发布

你好,我是忙着学习Java和我忙创造一个吃豆子游戏,但现在我需要让鬼移动在“随机”的方向发展,因此现在再这个方向有垂直/水平改变,正相反

在鬼魂从左至右,从右至左去的那一刻。 是负责这个作用的代码如下:(忽略吃豆绘图部分看到//鬼运动下文)

    DrawPacMan pacman = new DrawPacMan();
DrawGhost ghost = new DrawGhost();

int g1x = 0;
boolean g1r = true;

public void paintComponent(Graphics g) {

    super.paintComponent(g);
    // pacman movement
    diameter = 25;   
    pacman.drawPacMan(g, getHorPlaats(), getVerPlaats(), diameter, getView(), Color.yellow);

    // ghosts movement
    g1x += ghostSpeed * (g1r? 1 : -1);

    // check direction
    if (g1x >= 500) { g1x = 500; g1r = false; }
    else if (g1x <= 0) { g1x = 0; g1r = true; }

    ghost.drawGhost(g, g1x, 40, diameter, Color.red);

}

现在我不知道如何创建一个随机的方向或使用什么功能。 有人可以给我一些提示/帮助,如果可能的一个小例子,我可以进一步合作? 如果你想看到更多的代码什么的,请问我会发布:)

Answer 1:

尝试这个:

g1x += ghostSpeed * (Math.random() > 0.5? 1 : -1);

或者更简单:

g1x += ghostSpeed * Math.signum(Math.random() - 0.5);

这利用了以下事实Math.random()在返回均匀分布的值[0, 1)

但是,你很快就会意识到,这样的算法会导致鬼不正常移动,由左到右。 你需要的东西更优雅。 例如,如果鬼左移,让他继续以75%的概率或概率的25%,改变了方向。 我会告诉你解决这个。



Answer 2:

对于这样简单的东西,我会生成一个随机数,无论是0,1,2,或3。这会给你你需要的所有方向:上,下,左,右。

 import java.util.Random;
 // create a random number generator
 Random randomGen = new Random();
 // generate a random number, between 0 and n-1 (0,1,2,3 in this case)
 int theRandomNumber = randomGen.nextInt(4);

 public void setRandomGhostDirection() {

     switch(theRandomNumber) {
     case 0:
         moveUp();
         break;
     case 1:
         moveLeft();
         break;
     case 2:
         moveRight();
         break;
     case 3:
         moveDown();
         break;
     }

 }

你可以通过定义方向数字作为像打扫一下final int DIRECTION_UP = 0等。



Answer 3:

的Math.random()是你要找的功能。 就其本身而言,该功能产生从0到1的随机双。

伪代码:

double randomDirection = Math.random();

if (direction > 0.25) {
 // move left if possible
} else if (direction > 0.5) {
 // move right if possible
} else if (direction > 0.75) {
 // move down if possible
} else {
 // move up if possible
}


文章来源: Random directions
标签: java random