Java-如何根据与玩家的距离动态排序对象的数组列表



我正在用java构建一个小游戏,其中我有一个僵尸对象的数组列表,用于为玩家选择下一个目标。僵尸由一个x和y变量组成,该变量决定了僵尸的初始位置。

public Zombie(double positionX, double positionY){
this.image = new Image("res/images/zombie.png");
this.Position = new Point(positionX, positionY);
this.visible = true;
}

我已经写了这个方法,它可以选择玩家自动瞄准的数组中的下一个僵尸,但我一直在想如何对数组列表进行动态排序,这样玩家就可以按距离瞄准最近的僵尸,而不是列表中下一个。

public void zombieSpawn(){
for(int i = 0; i < zombies.size(); i++){
zombie = zombies.get(i);
if(!zombie.isVisible()){
removeZombie(zombie);
}
if(zombies.size() != 0){
this.zombie = zombies.get(0);
}
}
}

tl:dr我想通过到玩家的最短距离来动态地对僵尸数组进行排序。

这里我将使用一个自定义的ZombieSort类,它实现Comparator,通过比较僵尸与玩家坐标的距离来对僵尸进行排序。

这是ZombieSort.java

public class ZombieSort implements Comparator<Zombie> {
private final double playerX, playerY;
public ZombieSort(double playerX, double playerY) {
this.playerX = playerX;
this.playerY = playerY;
}
@Override
public int compare(Zombie z1, Zombie z2) {
return Double.compare(getDistance(z1), getDistance(z2));
}
public double getDistance(Zombie zombie) {
return Math.sqrt(
Math.pow(zombie.x - playerX, 2) + Math.pow(zombie.y - playerY, 2)
);
}
}

下面是zombieSpawn((的实现,它基本上每次调用时都会对僵尸列表进行排序

public void zombieSpawn(){
sortZombies(zombies, player);
for(int i = 0; i < zombies.size(); i++){
zombie = zombies.get(i);
if(!zombie.isVisible()){
removeZombie(zombie);
}
if(zombies.size() != 0){
this.zombie = zombies.get(0);
}
}
}
public void sortZombies(List<Zombie> zombies, Player player) {
Collections.sort(zombies, new ZombieSort(player.getX(), player.getY()));
}

最新更新