Java 随机方向

Java 随机方向,java,random,Java,Random,您好,我正忙于学习Java,我正忙于创建一个pacman游戏,但现在我需要让鬼魂在“随机”方向上移动,所以这个方向有时必须垂直/水平改变,反之亦然 此时鬼从左到右,从右到左。负责此操作的代码如下所示:(忽略pacman绘图部分,请参见下文//幽灵移动) DrawPacMan pacman=新的DrawPacMan(); DrawGhost=新DrawGhost(); int g1x=0; 布尔g1r=真; 公共组件(图形g){ 超级组件(g); //吃豆人运动 直径=25; pacman.dra

您好,我正忙于学习Java,我正忙于创建一个pacman游戏,但现在我需要让鬼魂在“随机”方向上移动,所以这个方向有时必须垂直/水平改变,反之亦然

此时鬼从左到右,从右到左。负责此操作的代码如下所示:(忽略pacman绘图部分,请参见下文//幽灵移动)

DrawPacMan pacman=新的DrawPacMan();
DrawGhost=新DrawGhost();
int g1x=0;
布尔g1r=真;
公共组件(图形g){
超级组件(g);
//吃豆人运动
直径=25;
pacman.drawPacMan(g,gethorplats(),getVerPlaats(),直径,getView(),颜色.黄色);
//鬼魂运动
g1x+=重影速度*(g1r?1:-1);
//检查方向
如果(g1x>=500){g1x=500;g1r=false;}
否则,如果(g1x尝试以下方法:

g1x += ghostSpeed * (Math.random() > 0.5? 1 : -1);
或者更简单:

g1x += ghostSpeed * Math.signum(Math.random() - 0.5);
这利用了在
[0,1)
中返回均匀分布值的事实

但你很快就会意识到,这样的算法会导致鬼魂从左向右不规则地移动。你需要一些更优雅的东西。例如,如果鬼魂向左移动,让他以75%的概率继续移动,或者以25%的概率改变方向。我会让你解决这个问题。

试试这个:

g1x += ghostSpeed * (Math.random() > 0.5? 1 : -1);
或者更简单:

g1x += ghostSpeed * Math.signum(Math.random() - 0.5);
这利用了在
[0,1)
中返回均匀分布值的事实

但你很快就会意识到,这样的算法会导致鬼魂从左向右不规则地移动。你需要一些更优雅的东西。例如,如果鬼魂向左移动,让他以75%的概率继续移动,或者以25%的概率改变方向。我让你来解决这个问题。

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
}
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
}

对于这样简单的事情,我会生成一个随机数,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\u UP=0
等等。

对于这样简单的事情,我会生成一个随机数,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\u UP=0
等等。

谢谢!所以理论上我也可以用这个来水平/垂直改变它?@Reshad::好吧,甚至实际上:-)。但是在实践中,由于鬼魂的移动受到墙壁的限制,你可能首先要发现你可以在哪个方向移动,然后在它们之间随机化。是的,游戏是这样的因为我是从Java开始的,所以还没有那么难,这只是为了让Java了解一些练习:)谢谢!所以理论上我也可以用它来水平/垂直地改变它?@Reshad::嗯,甚至实际上:-)。但是在实践中,由于鬼魂的移动受到墙壁的限制,你可能首先要发现你可以移动的方向是的,游戏还没有那么难,因为我从Java开始,这只是为了让Java了解一些练习:)啊,谢谢!这就是我需要的,我想我会尝试用工作代码来写:)啊,谢谢!这就是我需要的,我想我会尝试用工作代码来写:)这是非常干净的够了!太多了!当然!只要确保在你的逻辑中,只有在没有障碍或任何阻碍的情况下,你才会朝那个方向移动。这是一个非常清晰的例子!太多了!当然!只要确保在你的逻辑中,只有在没有障碍或任何阻碍的情况下,你才会朝那个方向移动。