Как решить задачу про передвижение робота из начальной точки в конечную?

читаю задачу и не понимаю с чего начать решение... Получается нужно реализовать алгоритм передвижения робота из начальной точки в конечную точку и при этом учесть, что координаты x и y могут быть отрицательными.

Описание: На игровом поле находится робот. Позиция робота на поле описывается двумя целочисленным координатами: X и Y. Ось X смотрит слева направо, ось Y — снизу вверх.

В начальный момент робот находится в некоторой позиции на поле. Также известно, куда робот смотрит: вверх, вниз, направо или налево. задача — привести робота в заданную точку игрового поля.

Робот описывается классом Robot. Вы можете пользоваться следующими его методами (реализация вам неизвестна):

    public class Robot {

    public Direction getDirection() {
        // текущее направление взгляда
    }

    public int getX() {
        // текущая координата X
    }

    public int getY() {
        // текущая координата Y
    }

    public void turnLeft() {
        // повернуться на 90 градусов против часовой стрелки
    }

    public void turnRight() {
        // повернуться на 90 градусов по часовой стрелке
    }

    public void stepForward() {
        // шаг в направлении взгляда
        // за один шаг робот изменяет одну свою координату на единицу
    }
}
Direction, направление взгляда робота,  — это перечисление:
public enum Direction {
    UP,
    DOWN,
    LEFT,
    RIGHT
}

Как это выглядит: см картинка

Пример:

В метод передано:

toX == 3, toY == 0; начальное состояние робота такое: robot.getX() == 0, robot.getY() == 0, robot.getDirection() == Direction.UP

Чтобы привести робота в указанную точку (3, 0), метод должен вызвать у робота следующие методы:

robot.turnRight();
robot.stepForward();
robot.stepForward();
robot.stepForward();

https://i.stack.imgur.com/BSdX4.jpg


Ответы (1 шт):

Автор решения: Alexey R.
  1. Определяете "справа" или "слева" горизонтальная координата куда надо идти (вычитанием текущей координаты рорбота из цеелвой координаты). Кроме направления этот метод даст расстояние до цели (например если текущая координата -2, а целевая -7, то -7-(-2) = -5, что значит, что цель находится на 5 шагов левее по "иксу")
  2. Определяете "сверху" или "снизу" вертикальная координата (таким же способом)
  3. Определяете текущее направление робота. Ваша задача пройти нужное количество шагов по вертикали, потом повернуть и пройти нужное количество шагов по горизонтали (или наоборот)
  4. Исходя из текущего направления робота решаете сколько раз надо повернуться. Например в шаге 1 если направление робота "направо", то перед тем как начать движение, необходимо повернуться налево и еще раз налево (развернув его на 180 градусов).
  5. На каждом шаге решаете дошлел ли робот до нужной координаты и если да, снова переходете к шагу 3 для движение (при необходимости) по следующей оси.
→ Ссылка