固定计时器和随机方向

时间:2012-10-23 16:12:04

标签: java random timer

你好作为一个初学的Java程序员我正忙着在Java中创建一个简单的Pacman游戏,只是为了运动而且我已经创建了一个方法让鬼随机水平移动,但我有一些问题,我不知道如何强制它左右或上下(所以不是同时)我现在的幽灵代码如下:

 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变量作为你可以看到的方向,并且水平位置是硬编码的,但水平位置也是随机化的,但是如果我使用它同时会产生一些奇怪的对角线移动

下一个问题是我在我的构造中使用了一个像这样的计时器

    public PacMan() {

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

            autoKlik.start();
}

因此方向的随机值变为快速(500ms),但速度也配置了游戏速度,所以我认为我犯了一个逻辑错误,但我不知道如何解决这个问题。我是否必须分开行动也许?或者有更简单的方法来实现这一点请与我分享你的技能我有动力学习:)如果你可能需要更多的代码我可以在这里发布或给我的github帐户的链接,所以你可以检查出来:)

提前致谢!

链接到完整来源:pacman game source

1 个答案:

答案 0 :(得分:1)

我建议将这些问题分开:

  • 一组模拟模拟的类只包含实体和逻辑
  • 绘制pacman的一组图形类
  • 一个控制器,用于处理操作并将它们委托给模型,由swing类触发

在paint()方法中,出于性能原因,只做绘画,从不“新”,也不要调用复杂的方法。框架经常调用Paint。