您好,作为一名Java程序员,我正忙于用Java创建一个简单的吃豆子游戏,只是为了锻炼身体,我为幽灵创建了一种方法,可以让它随机地垂直移动垂直方向,但是我有一些问题,我不知道该如何强制它可以左右或上下移动(因此不能同时),我现在的幽灵代码如下:

 public void moveUp() {

 }

 public void moveLeft() {

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

 }

 public void moveRight() {

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

 }

 public void moveDown() {

 }

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 * (Math.random() > 0.5? 1 : -1); // random direction

     Random randomGen = new Random();
     // generate a random number, between 0 - 3
     int randomize = randomGen.nextInt(4);

    switch(randomize) {
     case 0:
         moveUp();
         System.out.println("up");
         break;
     case 1:
         moveLeft();
         System.out.println("Left");
         break;
     case 2:
         moveRight();
         System.out.println("Right");
         break;
     case 3:
         moveDown();
         System.out.println("down");
         break;
    }

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

}


如您所见,我已经在方向上使用了randomize变量,并且水平位置进行了硬编码,但是水平位置也由randomize表示,但是如果我同时使用它,则会产生一些奇怪的对角线运动

下一个问题是我在这样的建筑中使用计时器

    public PacMan() {

    // create timer and start timer
            javax.swing.Timer autoKlik = new javax.swing.Timer(WACHTTIJD, this);

            autoKlik.start();
}


因此方向的随机值正在快速变化(500ms),但是速度也可以配置游戏速度,因此我认为我犯了一个逻辑错误,但我不确定如何解决此问题。也许我必须将动作分开吗?还是有更简单的方法来实现这一目标,请与我分享您的技能,我很乐于学习:),如果您可能需要更多代码,可以在此处发布或提供指向我的github帐户的链接,以便您可以查看:)

提前致谢!

链接到完整源代码:pacman game source

最佳答案

我建议将关注点分开:


一组用于模拟仿真的类,仅包含实体和逻辑
一组绘制吃豆人的图形类
一个由控制器来处理动作并将其委托给模型(由swing类触发)


由于性能原因,在paint()方法中,仅执行绘画操作,切勿“新建”或调用复杂的方法。框架经常调用Paint。

关于java - 固定计时器和随机方向,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13034841/

10-16 17:34