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())