0

您好,作为一名初级 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);

}

如您所见,我已将随机变量用于方向,并且水平位置是硬编码的,但水平位置也由随机化表示,但如果我同时使用它,它会产生一些奇怪的对角线运动

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

    public PacMan() {

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

            autoKlik.start();
}

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

提前致谢!

完整源链接:pacman 游戏源

4

1 回答 1

1

我建议将关注点分开:

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

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

于 2012-10-23T16:29:36.827 回答