【问题标题】:Random directions随机方向
【发布时间】:2012-10-19 19:16:28
【问题描述】:

您好,我正忙于学习 Java,我正忙于创建一个吃豆人游戏,但现在我需要让幽灵朝“随机”方向移动,所以这个方向必须不时地垂直/水平改变,反之亦然

此刻鬼魂从左到右,从右到左。负责这个动作的代码如下:(忽略pacman绘图部分见下文//ghost运动)

    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);

}

现在我不知道如何创建随机方向或使用什么函数。有人可以给我一些提示/帮助,如果可能的话,可以举一个我可以进一步研究的小例子吗?如果您想查看更多代码或其他内容,请询问,我会发布:)

【问题讨论】:

    标签: java random


    【解决方案1】:

    试试这个:

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

    甚至更简单:

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

    这利用了Math.random()[0, 1) 中返回均匀分布的值这一事实。

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

    【讨论】:

    • 谢谢!所以理论上我也可以用它来水平/垂直改变它?
    • @Reshad:: 好吧,甚至实际上:-)。然而在实践中,由于幽灵的移动受到墙壁的限制,您可能首先必须发现您可以移动的方向,然后在它们之间随机化。
    • 是的,这个游戏并没有那么难,因为我是从 Java 开始的,这只是为了了解 Java 的一些练习:)
    【解决方案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

    【讨论】:

    • 这是一个非常干净的例子!非常喜欢!
    • 当然!只要确保在你的逻辑中,只有在没有障碍或任何阻碍的情况下,你才会朝着那个方向前进。
    【解决方案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
    }
    

    【讨论】:

    • 啊,谢谢!这就是我所需要的,我想我会尝试在工作代码中写这个:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多