您好我正忙着学习Java而我正在忙着创建一个pacman游戏,但现在我需要让鬼魂在“随机”方向上移动,所以现在这个方向必须垂直/水平改变,反之亦然< / p>
此刻幽灵从左到右,从右到左。负责此操作的代码如下:(忽略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);
}
现在我不知道如何创建随机方向或使用哪些函数。有人可以给我一些提示/帮助,如果可能的话,我可以进一步研究一些例子吗?如果您想查看更多代码或其他内容,请询问,我会发布:)
答案 0 :(得分:2)
试试这个:
g1x += ghostSpeed * (Math.random() > 0.5? 1 : -1);
甚至更简单:
g1x += ghostSpeed * Math.signum(Math.random() - 0.5);
这利用了Math.random()
在[0, 1)
中返回均匀分布值的事实。
但你很快就会意识到这样的算法会导致幽灵从左到右不规则地移动。你需要更优雅的东西。例如。如果幽灵向左移动,让他以75%的概率继续或以25%的概率改变方向。我会让你解决这个问题。
答案 1 :(得分: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
等。
答案 2 :(得分:1)
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
}