enter image description here实际上我是Java的初学者,我试图创建一个monester并让它找到通往玩家的最短路径,但不幸的是monesters以可怕的方式移动(玩家迈出的每一步,monester都跟随着他,突然之间monester跳),因此这里的主要问题是:


monester在每个角落都跳进玩家的堡垒
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。

最佳答案

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

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

要么

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

08-04 04:49