From 7001194a381ced5db5dc1fe4942b0b974054ea39 Mon Sep 17 00:00:00 2001 From: Oleksandra Dorofieieva Date: Sun, 30 Jun 2024 23:45:09 +0200 Subject: [PATCH] Robot +implemented task; --- src/main/java/core/basesyntax/Robot.java | 19 +++ src/main/java/core/basesyntax/RobotRoute.java | 109 +++++++++++++++++- 2 files changed, 127 insertions(+), 1 deletion(-) diff --git a/src/main/java/core/basesyntax/Robot.java b/src/main/java/core/basesyntax/Robot.java index 0a02f34d..98601b2d 100644 --- a/src/main/java/core/basesyntax/Robot.java +++ b/src/main/java/core/basesyntax/Robot.java @@ -61,6 +61,25 @@ public void turnRight() { } } + public void turnAround() { + switch (direction) { + case UP: + direction = Direction.DOWN; + break; + case LEFT: + direction = Direction.RIGHT; + break; + case DOWN: + direction = Direction.UP; + break; + case RIGHT: + direction = Direction.LEFT; + break; + default: + break; + } + } + public void stepForward() { switch (direction) { case UP: diff --git a/src/main/java/core/basesyntax/RobotRoute.java b/src/main/java/core/basesyntax/RobotRoute.java index 351ca4b9..718f2db3 100644 --- a/src/main/java/core/basesyntax/RobotRoute.java +++ b/src/main/java/core/basesyntax/RobotRoute.java @@ -2,6 +2,113 @@ public class RobotRoute { public void moveRobot(Robot robot, int toX, int toY) { - //write your solution here + final int actX = robot.getX(); + final int actY = robot.getY(); + if (toX != actX || toY != actY) { + if ((toX > actX)) { + moveRight(robot, actX, toX); + } else { + moveLeft(robot, actX, toX); + } + if (toY > actY) { + moveUp(robot, actY, toY); + } else { + moveDown(robot, actY, toY); + } + } + } + + private static void moveRight(Robot robot, int actX, int toX) { + switch (robot.getDirection()) { + case UP: + robot.turnRight(); + countStepsForward(robot, toX, actX); + break; + case LEFT: + robot.turnAround(); + countStepsForward(robot, toX, actX); + break; + case DOWN: + robot.turnLeft(); + countStepsForward(robot, toX, actX); + break; + case RIGHT: + countStepsForward(robot, toX, actX); + break; + default: + break; + } + } + + private static void moveLeft(Robot robot, int actX, int toX) { + switch (robot.getDirection()) { + case UP: + robot.turnLeft(); + countStepsForward(robot, actX, toX); + break; + case LEFT: + countStepsForward(robot, actX, toX); + break; + case DOWN: + robot.turnRight(); + countStepsForward(robot, actX, toX); + break; + case RIGHT: + robot.turnAround(); + countStepsForward(robot, actX, toX); + break; + default: + break; + } + } + + private static void moveUp(Robot robot, int actY, int toY) { + switch (robot.getDirection()) { + case UP: + countStepsForward(robot, toY, actY); + break; + case LEFT: + robot.turnRight(); + countStepsForward(robot, toY, actY); + break; + case DOWN: + robot.turnAround(); + countStepsForward(robot, toY, actY); + break; + case RIGHT: + robot.turnLeft(); + countStepsForward(robot, toY, actY); + break; + default: + break; + } + } + + private static void moveDown(Robot robot, int actY, int toY) { + switch (robot.getDirection()) { + case UP: + robot.turnAround(); + countStepsForward(robot, actY, toY); + break; + case LEFT: + robot.turnLeft(); + countStepsForward(robot, actY, toY); + break; + case DOWN: + countStepsForward(robot, actY, toY); + break; + case RIGHT: + robot.turnRight(); + countStepsForward(robot, actY, toY); + break; + default: + break; + } + } + + private static void countStepsForward(Robot robot, int begin, int end) { + for (int i = 0; i < (begin - end); i++) { + robot.stepForward(); + } } }