Ты уже на полпути. То, что вы хотите сделать, это определить, где по отношению к животному находится игрок.
Давайте сначала создадим перечисление для инкапсуляции этого
enum Direction { NORTH, EAST, SOUTH, WEST };
Как вы сказали, вы можете проверить, находится ли игрок слева или справа от животного.
if(player.getX() > animal.getX()) {
animal.setDirection(Direction.EAST);
} else {
animal.setDirection(Direction.WEST);
}
аналогично, вы можете сделать то же самое с координатами Y и направлением север / юг.
if(player.getY() > animal.getY()) {
animal.setDirection(Direction.NORTH);
} else {
animal.setDirection(Direction.SOUTH);
}
Итак, как нам выяснить, следует ли нам использовать первую проверку или вторую проверку? Ну, подумай на секунду. Если вы живете "к северу" от того места, где вы находитесь, то, вероятно, вы находитесь не прямо на севере, а, скорее, в основном на севере - конечно, скорее севернее, чем восток, например. Таким образом, хорошая проверка - «какое доминирующее направление» - т.е. если вы живете дальше на север, чем на восток, вы говорите, что живете на север. Так как вы это проверите? Ну, вы говорите, что расстояние, которое вы должны пройти с севера на юг до вашего места, больше, чем расстояние, которое вы должны пройти с востока на запад. В коде:
if(Math.abs(animal.getX() - player.getX()) > Math.abs(animal.getY() - player.getY())) {
//More east-west than north-south - do EAST-WEST check
} else {
//More north-south than east-west - do NORTH-SOUTH check
}
Итак, объединение этого дает конечный результат:
if(Math.abs(animal.getX() - player.getX()) > Math.abs(animal.getY() - player.getY())) {
//More east-west than north-south - do EAST-WEST check
if(player.getX() > animal.getX()) {
animal.setDirection(Direction.EAST);
} else {
animal.setDirection(Direction.WEST);
}
} else {
//More north-south than east-west - do NORTH-SOUTH check
if(player.getY() > animal.getY()) {
animal.setDirection(Direction.NORTH);
} else {
animal.setDirection(Direction.SOUTH);
}
}
И все готово! Дайте мне знать, если у вас есть еще вопросы.