enter image description here实际上,我是Java的初学者,我试图创建一个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。
答案 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()了解更多详细信息。