吃豆人游戏:如何让玩家跟随玩家?

时间:2019-09-05 19:28:40

标签: java

enter image description here实际上,我是Java的初学者,我试图创建一个monester并让它找到通往玩家的最短路径,但是不幸的是monester以一种可怕的方式移动(玩家走的每一步,monester都会移动在他之后,monester突然跳了),所以这里的主要问题是:

  1. monester在每个角落跳进玩家的行列
  2. monester一步一步移动(当我释放按钮停止时),我需要它不断跟随玩家。

我创建了与问题相关的这些类: -游戏类(缩写网格,墙,monester,食物)

-平方类每个网格的组成部分

-ghost类需要在压缩器中使用一个称为current的正方形,然后它将将此电流更改为距离chasedSquare最近的下一个nieghbour。

 ghost.add(new Ghost(grid.get(2).get(2)));      // just for expermental purposes
public ArrayList<Square> findNieghbours(){
     ArrayList<Square> nieghbours=new ArrayList();
     int currentX=current.getX();
     int currentY=current.getY();

     if(currentX<29&&!grid.get(currentY/30).get(currentX/30+1).isWall()){
       nieghbours.add(grid.get(currentX/30+1).get(currentY/30));
     }
     if(currentX>0&&!grid.get(currentY/30).get(currentX/30-1).isWall()){
        nieghbours.add(grid.get(currentX/30-1).get(currentY/30));
     }
     if(currentY<29&&!grid.get(currentY/30+1).get(currentX/30+1).isWall()){
        nieghbours.add(grid.get(currentX/30).get(currentY/30+1));
     }
     if(currentY>0&&!grid.get(currentY/30-1).get(currentX/30).isWall()){
       nieghbours.add(grid.get(currentX/30).get(currentY/30-1));
     }

     return nieghbours;
 }
public void Chase(Square chasedSquare){
    ArrayList<Square> nieghbours=findNieghbours();

    Square lowest=nieghbours.get(0);   // try catch??

     for(Square square : nieghbours){
       if(Math.sqrt((square.getX()-chasedSquare.getX())^2+(square.getX()-chasedSquare.getX())^2)<Math.sqrt((lowest.getX()-chasedSquare.getX())^2+(lowest.getX()-chasedSquare.getX())^2)){
           lowest=square;
       }

     }
     current=lowest;
 }

然后我调用追赶幽灵的方法,为玩家提供currentBlock。

2 个答案:

答案 0 :(得分:0)

我相信问题出在您的Chase方法中。 ^运算符不是幂运算符。您应该使用Math.pow方法,或者将值本身乘以:

Math.pow(square.getX()-chasedSquare.getX(), 2)

(square.getX()-chasedSquare.getX()) * (square.getX()-chasedSquare.getX())

答案 1 :(得分:0)

问题似乎出在Chase函数中。 ^是Java中按位异或运算符(请参见Java Operators)。您可以使用Math.pow()方法来获取值的平方:

double x = 2.0
double xSq = Math.pow(x, 2)

检查Math.pow()了解更多详细信息。