From 381ea44a9a9d9e28218446c585be18f368d4ce03 Mon Sep 17 00:00:00 2001 From: romanschenk37 <84532681+romanschenk37@users.noreply.github.com> Date: Sat, 5 Mar 2022 16:39:08 +0100 Subject: [PATCH 01/15] Created CarTest.java added Tests setPosition, nextPosition --- .../java/ch/zhaw/pm2/racetrack/CarTest.java | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 src/test/java/ch/zhaw/pm2/racetrack/CarTest.java diff --git a/src/test/java/ch/zhaw/pm2/racetrack/CarTest.java b/src/test/java/ch/zhaw/pm2/racetrack/CarTest.java new file mode 100644 index 0000000..eb013c6 --- /dev/null +++ b/src/test/java/ch/zhaw/pm2/racetrack/CarTest.java @@ -0,0 +1,60 @@ + +package ch.zhaw.pm2.racetrack; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class CarTest { + Car car; + + @BeforeEach + void setUp() { + car = new Car('a', new PositionVector(10, 10)); + } + + @AfterEach + void tearDown() { + } + + @Test + void setPosition() { + car.setPosition(new PositionVector(20, 20)); + checkPosition(20, 20); + } + + @Test + void nextPosition() { + checkPosition(10, 10); + } + + @Test + void accelerate() { + } + + @Test + void move() { + } + + @Test + void crash() { + } + + @Test + void isCrashed() { + } + + @Test + void setMoveStrategy() { + } + + @Test + void getMoveStrategy() { + } + + void checkPosition(int x, int y) { + assertTrue(car.nextPosition().equals(new PositionVector(x, y))); + } +} -- 2.40.1 From 972f011a080c488eaabc6345a71570ed72e14c4a Mon Sep 17 00:00:00 2001 From: romanschenk37 <84532681+romanschenk37@users.noreply.github.com> Date: Sun, 6 Mar 2022 17:06:42 +0100 Subject: [PATCH 02/15] changes in Tests car.CarTest setPosition, movement, crash, moveStrategy --- .../java/ch/zhaw/pm2/racetrack/CarTest.java | 124 ++++++++++++++---- 1 file changed, 100 insertions(+), 24 deletions(-) diff --git a/src/test/java/ch/zhaw/pm2/racetrack/CarTest.java b/src/test/java/ch/zhaw/pm2/racetrack/CarTest.java index eb013c6..a6d91ba 100644 --- a/src/test/java/ch/zhaw/pm2/racetrack/CarTest.java +++ b/src/test/java/ch/zhaw/pm2/racetrack/CarTest.java @@ -1,60 +1,136 @@ package ch.zhaw.pm2.racetrack; -import org.junit.jupiter.api.AfterEach; +import ch.zhaw.pm2.racetrack.strategy.*; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + import static org.junit.jupiter.api.Assertions.*; class CarTest { Car car; + int DEFAULT_X = 10; + int DEFAULT_Y = 10; @BeforeEach void setUp() { - car = new Car('a', new PositionVector(10, 10)); + car = new Car('a', new PositionVector(DEFAULT_X, DEFAULT_Y)); } - @AfterEach - void tearDown() { - } @Test void setPosition() { - car.setPosition(new PositionVector(20, 20)); - checkPosition(20, 20); + CheckNextPosition(DEFAULT_X, DEFAULT_Y); + + List validPositions = new ArrayList<>(); + validPositions.add(new PositionVector(20, 20)); + validPositions.add(new PositionVector(0, 0)); + validPositions.add(new PositionVector(20, 0)); + validPositions.add(new PositionVector(0, 20)); + + for(PositionVector positionVector : validPositions) { + car.setPosition(positionVector); + assertEquals(positionVector, car.nextPosition()); + } + + List invalidPositions = new ArrayList<>(); + invalidPositions.add(new PositionVector(0, -20)); + invalidPositions.add(new PositionVector(-20, 0)); + invalidPositions.add(new PositionVector(-20, -20)); + + for(PositionVector positionVector : invalidPositions) { + boolean exception = false; + try { + car.setPosition(positionVector); + } catch (IllegalArgumentException e) { + exception = true; + } + assertTrue(exception); + + CheckNextPosition(0, 0); + } } - @Test - void nextPosition() { - checkPosition(10, 10); - } + @Test - void accelerate() { + void movement() { + car.move(); + CheckNextPosition(DEFAULT_X, DEFAULT_Y); + + List directions = Arrays.asList(PositionVector.Direction.values()); + + for (PositionVector.Direction direction1 : directions){ + + setUp(); + int nextPosX = DEFAULT_X; + int nextPosY = DEFAULT_Y; + + car.accelerate(direction1); + nextPosX += direction1.vector.getX(); + nextPosY += direction1.vector.getY(); + CheckNextPosition(nextPosX, nextPosY); + + car.move(); + nextPosX += direction1.vector.getX(); + nextPosY += direction1.vector.getY(); + CheckNextPosition(nextPosX, nextPosY); + + for (PositionVector.Direction direction2 : directions) { + car.accelerate(direction2); + nextPosX += direction2.vector.getX(); + nextPosY += direction2.vector.getY(); + CheckNextPosition(nextPosX, nextPosY); + + car.move(); + nextPosX += direction1.vector.getX(); + nextPosY += direction1.vector.getY(); + nextPosX += direction2.vector.getX(); + nextPosY += direction2.vector.getY(); + CheckNextPosition(nextPosX, nextPosY); + + } + + } } - @Test - void move() { - } @Test void crash() { + assertFalse(car.isCrashed()); + car.crash(); + assertTrue(car.isCrashed()); + } @Test - void isCrashed() { + void MoveStrategy() { + MoveStrategy moveStrategy; + + moveStrategy = new DoNotMoveStrategy(); + car.setMoveStrategy(moveStrategy); + assertEquals(moveStrategy, car.getMoveStrategy()); + + moveStrategy = new MoveListStrategy(); + car.setMoveStrategy(moveStrategy); + assertEquals(moveStrategy, car.getMoveStrategy()); + + moveStrategy = new PathFollowerMoveStrategy(); + car.setMoveStrategy(moveStrategy); + assertEquals(moveStrategy, car.getMoveStrategy()); + + moveStrategy = new UserMoveStrategy(); + car.setMoveStrategy(moveStrategy); + assertEquals(moveStrategy, car.getMoveStrategy()); } - @Test - void setMoveStrategy() { - } - @Test - void getMoveStrategy() { - } - void checkPosition(int x, int y) { - assertTrue(car.nextPosition().equals(new PositionVector(x, y))); + void CheckNextPosition(int x, int y) { + assertEquals(new PositionVector(x, y), car.nextPosition()); } } -- 2.40.1 From 8086111772e34c4079d87805ee1a8eff94111306 Mon Sep 17 00:00:00 2001 From: romanschenk37 <84532681+romanschenk37@users.noreply.github.com> Date: Sun, 6 Mar 2022 18:13:27 +0100 Subject: [PATCH 03/15] Fix in CarTest.java @Test setPosition --- src/test/java/ch/zhaw/pm2/racetrack/CarTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/ch/zhaw/pm2/racetrack/CarTest.java b/src/test/java/ch/zhaw/pm2/racetrack/CarTest.java index a6d91ba..5f0c462 100644 --- a/src/test/java/ch/zhaw/pm2/racetrack/CarTest.java +++ b/src/test/java/ch/zhaw/pm2/racetrack/CarTest.java @@ -51,7 +51,7 @@ class CarTest { } assertTrue(exception); - CheckNextPosition(0, 0); + CheckNextPosition(DEFAULT_X, DEFAULT_Y); } } -- 2.40.1 From 40cd4f7b72e59e83fbcf60f9d7ad2759d6015fab Mon Sep 17 00:00:00 2001 From: romanschenk37 <84532681+romanschenk37@users.noreply.github.com> Date: Sun, 6 Mar 2022 18:57:01 +0100 Subject: [PATCH 04/15] Added Javadoc and comments in CarTest.java --- .../java/ch/zhaw/pm2/racetrack/CarTest.java | 91 ++++++++++++------- 1 file changed, 60 insertions(+), 31 deletions(-) diff --git a/src/test/java/ch/zhaw/pm2/racetrack/CarTest.java b/src/test/java/ch/zhaw/pm2/racetrack/CarTest.java index 5f0c462..3468cbf 100644 --- a/src/test/java/ch/zhaw/pm2/racetrack/CarTest.java +++ b/src/test/java/ch/zhaw/pm2/racetrack/CarTest.java @@ -11,38 +11,62 @@ import java.util.List; import static org.junit.jupiter.api.Assertions.*; +/** + * Tests for Class Car + */ class CarTest { + Car car; + + // Default coordinates for tests int DEFAULT_X = 10; int DEFAULT_Y = 10; + /** + * Create a new Car Object and set Position to a defined Default Position + */ @BeforeEach void setUp() { car = new Car('a', new PositionVector(DEFAULT_X, DEFAULT_Y)); } + /** + * Method to check nextPosition with coordinates as int + * + * @param x the expected value for x coordinate + * @param y the expected value for y coordinate + */ + void CheckNextPosition(int x, int y) { + assertEquals(new PositionVector(x, y), car.nextPosition()); + } + /** + * - checks if the position of the car can be set and saved correctly with valid positions. + * - checks if an exception is throwed and position keeps unchanged if invalid coordinates are entered. + */ @Test void setPosition() { CheckNextPosition(DEFAULT_X, DEFAULT_Y); + // List of valid Positions List validPositions = new ArrayList<>(); validPositions.add(new PositionVector(20, 20)); validPositions.add(new PositionVector(0, 0)); validPositions.add(new PositionVector(20, 0)); validPositions.add(new PositionVector(0, 20)); - for(PositionVector positionVector : validPositions) { + for (PositionVector positionVector : validPositions) { car.setPosition(positionVector); assertEquals(positionVector, car.nextPosition()); } + // List of invalid positions. List invalidPositions = new ArrayList<>(); invalidPositions.add(new PositionVector(0, -20)); invalidPositions.add(new PositionVector(-20, 0)); invalidPositions.add(new PositionVector(-20, -20)); - for(PositionVector positionVector : invalidPositions) { + for (PositionVector positionVector : invalidPositions) { boolean exception = false; try { car.setPosition(positionVector); @@ -51,62 +75,73 @@ class CarTest { } assertTrue(exception); + // position should keep unchanged CheckNextPosition(DEFAULT_X, DEFAULT_Y); } } - + /** + * Checks if the methods accelerate and move are working correctly with acceleration in all directions. + * Checks also if velocity is calculated correctly if method accelerate is called a second time. + */ @Test void movement() { + // add all possible directions in a List + List directions = Arrays.asList(PositionVector.Direction.values()); + + //position shouldn't be changed because velocity should be 0. car.move(); CheckNextPosition(DEFAULT_X, DEFAULT_Y); - List directions = Arrays.asList(PositionVector.Direction.values()); - - for (PositionVector.Direction direction1 : directions){ + for (PositionVector.Direction direction1 : directions) { + //create a new instance of Car with default coordinates and velocity 0. setUp(); - int nextPosX = DEFAULT_X; - int nextPosY = DEFAULT_Y; + + //variables to save the actual expected result of method nextPosition + int ExpectedNextPosX = DEFAULT_X; + int ExpectedNextPosY = DEFAULT_Y; car.accelerate(direction1); - nextPosX += direction1.vector.getX(); - nextPosY += direction1.vector.getY(); - CheckNextPosition(nextPosX, nextPosY); + ExpectedNextPosX += direction1.vector.getX(); + ExpectedNextPosY += direction1.vector.getY(); + CheckNextPosition(ExpectedNextPosX, ExpectedNextPosY); car.move(); - nextPosX += direction1.vector.getX(); - nextPosY += direction1.vector.getY(); - CheckNextPosition(nextPosX, nextPosY); + ExpectedNextPosX += direction1.vector.getX(); + ExpectedNextPosY += direction1.vector.getY(); + CheckNextPosition(ExpectedNextPosX, ExpectedNextPosY); for (PositionVector.Direction direction2 : directions) { car.accelerate(direction2); - nextPosX += direction2.vector.getX(); - nextPosY += direction2.vector.getY(); - CheckNextPosition(nextPosX, nextPosY); + ExpectedNextPosX += direction2.vector.getX(); + ExpectedNextPosY += direction2.vector.getY(); + CheckNextPosition(ExpectedNextPosX, ExpectedNextPosY); car.move(); - nextPosX += direction1.vector.getX(); - nextPosY += direction1.vector.getY(); - nextPosX += direction2.vector.getX(); - nextPosY += direction2.vector.getY(); - CheckNextPosition(nextPosX, nextPosY); - + ExpectedNextPosX += (direction1.vector.getX() + direction2.vector.getX()); + ExpectedNextPosY += (direction1.vector.getY() + direction2.vector.getY()); + CheckNextPosition(ExpectedNextPosX, ExpectedNextPosY); } - } } + /** + * test for methods crash and isCrashed. checks if state crashed is set and returned correctly. + */ @Test void crash() { assertFalse(car.isCrashed()); car.crash(); assertTrue(car.isCrashed()); - } + /** + * test for methods setMoveStrategy. Checks if the MoveStrategy Object is saved and returned correctly + * with all Types of MoveStrategy. + */ @Test void MoveStrategy() { MoveStrategy moveStrategy; @@ -127,10 +162,4 @@ class CarTest { car.setMoveStrategy(moveStrategy); assertEquals(moveStrategy, car.getMoveStrategy()); } - - - - void CheckNextPosition(int x, int y) { - assertEquals(new PositionVector(x, y), car.nextPosition()); - } } -- 2.40.1 From dea430e418c1bf1aacec97bc766cfc0f996c5637 Mon Sep 17 00:00:00 2001 From: romanschenk37 <84532681+romanschenk37@users.noreply.github.com> Date: Mon, 7 Mar 2022 17:43:32 +0100 Subject: [PATCH 05/15] Added Test for Method getID in CarTest.java --- src/test/java/ch/zhaw/pm2/racetrack/CarTest.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/test/java/ch/zhaw/pm2/racetrack/CarTest.java b/src/test/java/ch/zhaw/pm2/racetrack/CarTest.java index 3468cbf..e8db6aa 100644 --- a/src/test/java/ch/zhaw/pm2/racetrack/CarTest.java +++ b/src/test/java/ch/zhaw/pm2/racetrack/CarTest.java @@ -21,13 +21,19 @@ class CarTest { // Default coordinates for tests int DEFAULT_X = 10; int DEFAULT_Y = 10; + char DEFAULT_ID = 'f'; /** * Create a new Car Object and set Position to a defined Default Position */ @BeforeEach void setUp() { - car = new Car('a', new PositionVector(DEFAULT_X, DEFAULT_Y)); + car = new Car(DEFAULT_ID, new PositionVector(DEFAULT_X, DEFAULT_Y)); + } + + @Test + void getID() { + assertEquals(DEFAULT_ID, car.getID()); } /** -- 2.40.1 From 31a24120eb29b2a4c9d1ffdb355f1fd1a72a17d5 Mon Sep 17 00:00:00 2001 From: romanschenk37 <84532681+romanschenk37@users.noreply.github.com> Date: Mon, 7 Mar 2022 20:44:05 +0100 Subject: [PATCH 06/15] added checks for method getVelocity in Test Movement in CarTest.java --- .../java/ch/zhaw/pm2/racetrack/CarTest.java | 54 ++++++++++++------- 1 file changed, 35 insertions(+), 19 deletions(-) diff --git a/src/test/java/ch/zhaw/pm2/racetrack/CarTest.java b/src/test/java/ch/zhaw/pm2/racetrack/CarTest.java index e8db6aa..472b356 100644 --- a/src/test/java/ch/zhaw/pm2/racetrack/CarTest.java +++ b/src/test/java/ch/zhaw/pm2/racetrack/CarTest.java @@ -42,7 +42,7 @@ class CarTest { * @param x the expected value for x coordinate * @param y the expected value for y coordinate */ - void CheckNextPosition(int x, int y) { + void checkNextPosition(int x, int y) { assertEquals(new PositionVector(x, y), car.nextPosition()); } @@ -52,7 +52,7 @@ class CarTest { */ @Test void setPosition() { - CheckNextPosition(DEFAULT_X, DEFAULT_Y); + checkNextPosition(DEFAULT_X, DEFAULT_Y); // List of valid Positions List validPositions = new ArrayList<>(); @@ -82,13 +82,17 @@ class CarTest { assertTrue(exception); // position should keep unchanged - CheckNextPosition(DEFAULT_X, DEFAULT_Y); + checkNextPosition(DEFAULT_X, DEFAULT_Y); } } + void checkVelocity(int x, int y) { + assertEquals(new PositionVector(x, y), car.getVelocity()); + } + /** - * Checks if the methods accelerate and move are working correctly with acceleration in all directions. + * Checks if the methods accelerate, move and getVelocity are working correctly with acceleration in all directions. * Checks also if velocity is calculated correctly if method accelerate is called a second time. */ @Test @@ -98,7 +102,7 @@ class CarTest { //position shouldn't be changed because velocity should be 0. car.move(); - CheckNextPosition(DEFAULT_X, DEFAULT_Y); + checkNextPosition(DEFAULT_X, DEFAULT_Y); for (PositionVector.Direction direction1 : directions) { @@ -106,29 +110,41 @@ class CarTest { setUp(); //variables to save the actual expected result of method nextPosition - int ExpectedNextPosX = DEFAULT_X; - int ExpectedNextPosY = DEFAULT_Y; + int expectedNextPosX = DEFAULT_X; + int expectedNextPosY = DEFAULT_Y; + + //variables to save the acutal expected result of method getVelocity + int expectedVelocityX = 0; + int expectedVelocityY = 0; car.accelerate(direction1); - ExpectedNextPosX += direction1.vector.getX(); - ExpectedNextPosY += direction1.vector.getY(); - CheckNextPosition(ExpectedNextPosX, ExpectedNextPosY); + expectedVelocityX += direction1.vector.getX(); + expectedVelocityY += direction1.vector.getY(); + expectedNextPosX += direction1.vector.getX(); + expectedNextPosY += direction1.vector.getY(); + checkVelocity(expectedVelocityX, expectedVelocityY); + checkNextPosition(expectedNextPosX, expectedNextPosY); car.move(); - ExpectedNextPosX += direction1.vector.getX(); - ExpectedNextPosY += direction1.vector.getY(); - CheckNextPosition(ExpectedNextPosX, ExpectedNextPosY); + expectedNextPosX += direction1.vector.getX(); + expectedNextPosY += direction1.vector.getY(); + checkVelocity(expectedVelocityX, expectedVelocityY); + checkNextPosition(expectedNextPosX, expectedNextPosY); for (PositionVector.Direction direction2 : directions) { car.accelerate(direction2); - ExpectedNextPosX += direction2.vector.getX(); - ExpectedNextPosY += direction2.vector.getY(); - CheckNextPosition(ExpectedNextPosX, ExpectedNextPosY); + expectedVelocityX += direction2.vector.getX(); + expectedVelocityY += direction2.vector.getY(); + expectedNextPosX += direction2.vector.getX(); + expectedNextPosY += direction2.vector.getY(); + checkVelocity(expectedVelocityX, expectedVelocityY); + checkNextPosition(expectedNextPosX, expectedNextPosY); car.move(); - ExpectedNextPosX += (direction1.vector.getX() + direction2.vector.getX()); - ExpectedNextPosY += (direction1.vector.getY() + direction2.vector.getY()); - CheckNextPosition(ExpectedNextPosX, ExpectedNextPosY); + checkVelocity(expectedVelocityX, expectedVelocityY); + expectedNextPosX += (direction1.vector.getX() + direction2.vector.getX()); + expectedNextPosY += (direction1.vector.getY() + direction2.vector.getY()); + checkNextPosition(expectedNextPosX, expectedNextPosY); } } } -- 2.40.1 From 19b227c59fccb2b65816a3eebfbeda0c82d0b0d4 Mon Sep 17 00:00:00 2001 From: Leonardo Brandenberger Date: Thu, 10 Mar 2022 14:18:33 +0100 Subject: [PATCH 07/15] merged cartest branch into car branch --- src/test/java/ch/zhaw/pm2/racetrack/CarTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/java/ch/zhaw/pm2/racetrack/CarTest.java b/src/test/java/ch/zhaw/pm2/racetrack/CarTest.java index 472b356..87154a6 100644 --- a/src/test/java/ch/zhaw/pm2/racetrack/CarTest.java +++ b/src/test/java/ch/zhaw/pm2/racetrack/CarTest.java @@ -74,6 +74,7 @@ class CarTest { for (PositionVector positionVector : invalidPositions) { boolean exception = false; + setUp(); try { car.setPosition(positionVector); } catch (IllegalArgumentException e) { -- 2.40.1 From a67a96d19de2cb4bf71227229d115ca32bc8a437 Mon Sep 17 00:00:00 2001 From: romanschenk37 <84532681+romanschenk37@users.noreply.github.com> Date: Thu, 10 Mar 2022 14:46:51 +0100 Subject: [PATCH 08/15] fix in CarTest.java --- .../java/ch/zhaw/pm2/racetrack/CarTest.java | 55 ++++++++++--------- 1 file changed, 29 insertions(+), 26 deletions(-) diff --git a/src/test/java/ch/zhaw/pm2/racetrack/CarTest.java b/src/test/java/ch/zhaw/pm2/racetrack/CarTest.java index 87154a6..89b1965 100644 --- a/src/test/java/ch/zhaw/pm2/racetrack/CarTest.java +++ b/src/test/java/ch/zhaw/pm2/racetrack/CarTest.java @@ -105,34 +105,37 @@ class CarTest { car.move(); checkNextPosition(DEFAULT_X, DEFAULT_Y); + + for (PositionVector.Direction direction1 : directions) { - - //create a new instance of Car with default coordinates and velocity 0. - setUp(); - - //variables to save the actual expected result of method nextPosition - int expectedNextPosX = DEFAULT_X; - int expectedNextPosY = DEFAULT_Y; - - //variables to save the acutal expected result of method getVelocity - int expectedVelocityX = 0; - int expectedVelocityY = 0; - - car.accelerate(direction1); - expectedVelocityX += direction1.vector.getX(); - expectedVelocityY += direction1.vector.getY(); - expectedNextPosX += direction1.vector.getX(); - expectedNextPosY += direction1.vector.getY(); - checkVelocity(expectedVelocityX, expectedVelocityY); - checkNextPosition(expectedNextPosX, expectedNextPosY); - - car.move(); - expectedNextPosX += direction1.vector.getX(); - expectedNextPosY += direction1.vector.getY(); - checkVelocity(expectedVelocityX, expectedVelocityY); - checkNextPosition(expectedNextPosX, expectedNextPosY); - for (PositionVector.Direction direction2 : directions) { + + //create a new instance of Car with default coordinates and velocity 0. + setUp(); + + //variables to save the actual expected result of method nextPosition + int expectedNextPosX = DEFAULT_X; + int expectedNextPosY = DEFAULT_Y; + + //variables to save the acutal expected result of method getVelocity + int expectedVelocityX = 0; + int expectedVelocityY = 0; + + car.accelerate(direction1); + expectedVelocityX += direction1.vector.getX(); + expectedVelocityY += direction1.vector.getY(); + expectedNextPosX += direction1.vector.getX(); + expectedNextPosY += direction1.vector.getY(); + checkVelocity(expectedVelocityX, expectedVelocityY); + checkNextPosition(expectedNextPosX, expectedNextPosY); + + car.move(); + expectedNextPosX += direction1.vector.getX(); + expectedNextPosY += direction1.vector.getY(); + checkVelocity(expectedVelocityX, expectedVelocityY); + checkNextPosition(expectedNextPosX, expectedNextPosY); + + car.accelerate(direction2); expectedVelocityX += direction2.vector.getX(); expectedVelocityY += direction2.vector.getY(); -- 2.40.1 From 0fafa3e0e70027501ba1e7acf2c4d3de96a26d3f Mon Sep 17 00:00:00 2001 From: Leonardo Brandenberger Date: Thu, 10 Mar 2022 15:17:04 +0100 Subject: [PATCH 09/15] finished both exceptions. --- .../ch/zhaw/pm2/racetrack/InvalidFileFormatException.java | 5 ++++- .../ch/zhaw/pm2/racetrack/InvalidTrackFormatException.java | 4 +++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/ch/zhaw/pm2/racetrack/InvalidFileFormatException.java b/src/main/java/ch/zhaw/pm2/racetrack/InvalidFileFormatException.java index e7d0c07..c60ea91 100644 --- a/src/main/java/ch/zhaw/pm2/racetrack/InvalidFileFormatException.java +++ b/src/main/java/ch/zhaw/pm2/racetrack/InvalidFileFormatException.java @@ -1,5 +1,8 @@ package ch.zhaw.pm2.racetrack; public class InvalidFileFormatException extends Exception { - // TODO: implementation + + public InvalidFileFormatException(String errorMessage) { + super(errorMessage); + } } diff --git a/src/main/java/ch/zhaw/pm2/racetrack/InvalidTrackFormatException.java b/src/main/java/ch/zhaw/pm2/racetrack/InvalidTrackFormatException.java index 25de664..97b0310 100644 --- a/src/main/java/ch/zhaw/pm2/racetrack/InvalidTrackFormatException.java +++ b/src/main/java/ch/zhaw/pm2/racetrack/InvalidTrackFormatException.java @@ -1,5 +1,7 @@ package ch.zhaw.pm2.racetrack; public class InvalidTrackFormatException extends Exception { - // TODO: implementation + public InvalidTrackFormatException(String errorMessage) { + super(errorMessage); + } } -- 2.40.1 From 6080b48b828748ba31112fb313d3286b470a8bff Mon Sep 17 00:00:00 2001 From: Leonardo Brandenberger Date: Thu, 10 Mar 2022 15:18:16 +0100 Subject: [PATCH 10/15] finished both exceptions. --- .../java/ch/zhaw/pm2/racetrack/InvalidFileFormatException.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/ch/zhaw/pm2/racetrack/InvalidFileFormatException.java b/src/main/java/ch/zhaw/pm2/racetrack/InvalidFileFormatException.java index c60ea91..91c59fa 100644 --- a/src/main/java/ch/zhaw/pm2/racetrack/InvalidFileFormatException.java +++ b/src/main/java/ch/zhaw/pm2/racetrack/InvalidFileFormatException.java @@ -1,7 +1,6 @@ package ch.zhaw.pm2.racetrack; public class InvalidFileFormatException extends Exception { - public InvalidFileFormatException(String errorMessage) { super(errorMessage); } -- 2.40.1 From dca575999e4efe3335bff6aa91cb6b657f99b62a Mon Sep 17 00:00:00 2001 From: Leonardo Brandenberger Date: Thu, 10 Mar 2022 15:20:53 +0100 Subject: [PATCH 11/15] Added javadocs to exceptions. --- .../java/ch/zhaw/pm2/racetrack/InvalidFileFormatException.java | 3 +++ .../ch/zhaw/pm2/racetrack/InvalidTrackFormatException.java | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/main/java/ch/zhaw/pm2/racetrack/InvalidFileFormatException.java b/src/main/java/ch/zhaw/pm2/racetrack/InvalidFileFormatException.java index 91c59fa..6655e69 100644 --- a/src/main/java/ch/zhaw/pm2/racetrack/InvalidFileFormatException.java +++ b/src/main/java/ch/zhaw/pm2/racetrack/InvalidFileFormatException.java @@ -1,5 +1,8 @@ package ch.zhaw.pm2.racetrack; +/** + * Class for Exception when invalid Fileformat is used. + */ public class InvalidFileFormatException extends Exception { public InvalidFileFormatException(String errorMessage) { super(errorMessage); diff --git a/src/main/java/ch/zhaw/pm2/racetrack/InvalidTrackFormatException.java b/src/main/java/ch/zhaw/pm2/racetrack/InvalidTrackFormatException.java index 97b0310..3cdd04c 100644 --- a/src/main/java/ch/zhaw/pm2/racetrack/InvalidTrackFormatException.java +++ b/src/main/java/ch/zhaw/pm2/racetrack/InvalidTrackFormatException.java @@ -1,5 +1,8 @@ package ch.zhaw.pm2.racetrack; +/** + * Class for Exception when invalid track format is used. + */ public class InvalidTrackFormatException extends Exception { public InvalidTrackFormatException(String errorMessage) { super(errorMessage); -- 2.40.1 From eddf9d3daa0efcd6688795b962eeca0022b8358d Mon Sep 17 00:00:00 2001 From: romanschenk37 <84532681+romanschenk37@users.noreply.github.com> Date: Tue, 22 Mar 2022 18:20:23 +0100 Subject: [PATCH 12/15] implemented PathFollowerMoveStrategy.java --- follower/challenge_points.txt | 19 ++++ src/main/java/ch/zhaw/pm2/racetrack/Game.java | 24 +++-- .../racetrack/strategy/MoveListStrategy.java | 8 +- .../strategy/PathFollowerMoveStrategy.java | 93 ++++++++++++++++++- 4 files changed, 129 insertions(+), 15 deletions(-) create mode 100644 follower/challenge_points.txt diff --git a/follower/challenge_points.txt b/follower/challenge_points.txt new file mode 100644 index 0000000..d794046 --- /dev/null +++ b/follower/challenge_points.txt @@ -0,0 +1,19 @@ +(X:40, Y:22) +(X:43, Y:22) +(X:46, Y:21) +(X:48, Y:19) +(X:48, Y:17) +(X:46, Y:15) +(X:41, Y:13) +(X:41, Y:10) +(X:46, Y:9) +(X:49, Y:4) +(X:40, Y:2) +(X:30, Y:2) +(X:21, Y:3) +(X:16, Y:7) +(X:13, Y:10) +(X:14, Y:14) +(X:11, Y:19) +(X:13, Y:22) +(X:24, Y:22) diff --git a/src/main/java/ch/zhaw/pm2/racetrack/Game.java b/src/main/java/ch/zhaw/pm2/racetrack/Game.java index 413fef3..406cf40 100644 --- a/src/main/java/ch/zhaw/pm2/racetrack/Game.java +++ b/src/main/java/ch/zhaw/pm2/racetrack/Game.java @@ -44,32 +44,38 @@ public class Game implements GameSpecification { moveStrategies.add("Path Follow Move Strategy"); for (int i = 0; i < track.getCarCount(); i++) { Car car = track.getCar(i); - while (car.getMoveStrategy() == null) { + MoveStrategy moveStrategy = null; + while (moveStrategy == null) { + String filePath; int moveStrategie = userInterface.selectOption( "Select Strategy for Car " + i + " (" + track.getCarId(i) + ")", moveStrategies); switch (moveStrategie + 1) { case 1: - selectMoveStrategy(car, new DoNotMoveStrategy()); + moveStrategy = new DoNotMoveStrategy(); break; case 2: - selectMoveStrategy(car, new UserMoveStrategy(userInterface, i, track.getCarId(i))); + moveStrategy = new UserMoveStrategy(userInterface, i, track.getCarId(i)); break; case 3: - String path = ".\\moves\\" + selectedTrack.getName().split("\\.")[0] + "-car-" + track.getCar(i).getID() + ".txt"; + filePath = ".\\moves\\" + selectedTrack.getName().split("\\.")[0] + "-car-" + track.getCar(i).getID() + ".txt"; try { - MoveStrategy moveStrategy = new MoveListStrategy(path); - selectMoveStrategy(car, moveStrategy); + moveStrategy = new MoveListStrategy(filePath); } catch (FileNotFoundException e) { - userInterface.printInformation("There is no MoveList implemented. Choose another Strategy!"); + userInterface.printInformation("There is no Move-List implemented. Choose another Strategy!"); } //TODO: Backslash kompatibel für Linux break; case 4: - //TODO: add Arguments - selectMoveStrategy(car, new PathFollowerMoveStrategy()); + filePath = ".\\follower\\" + selectedTrack.getName().split("\\.")[0] + "_points.txt"; + try { + moveStrategy = new PathFollowerMoveStrategy(filePath, track.getCarPos(i)); + } catch (FileNotFoundException e) { + userInterface.printInformation("There is no Point-List implemented. Choose another Strategy!"); + } break; } } + selectMoveStrategy(car, moveStrategy); } return true; } else { diff --git a/src/main/java/ch/zhaw/pm2/racetrack/strategy/MoveListStrategy.java b/src/main/java/ch/zhaw/pm2/racetrack/strategy/MoveListStrategy.java index 7d1e68e..774b323 100644 --- a/src/main/java/ch/zhaw/pm2/racetrack/strategy/MoveListStrategy.java +++ b/src/main/java/ch/zhaw/pm2/racetrack/strategy/MoveListStrategy.java @@ -20,14 +20,14 @@ public class MoveListStrategy implements MoveStrategy { readFile(new File(path)); } - private void readFile(File trackFile) throws FileNotFoundException { + protected void readFile(File trackFile) throws FileNotFoundException { Scanner scanner = new Scanner(new FileInputStream(trackFile), "UTF-8"); Direction[] directions = Direction.values(); while (scanner.hasNextLine()) { String line = scanner.nextLine(); - for (Direction dir : directions) { - if (dir.toString().equals(line)) { - moveList.add(dir); + for (Direction direction : directions) { + if (direction.toString().equals(line)) { + moveList.add(direction); break; } } diff --git a/src/main/java/ch/zhaw/pm2/racetrack/strategy/PathFollowerMoveStrategy.java b/src/main/java/ch/zhaw/pm2/racetrack/strategy/PathFollowerMoveStrategy.java index 23ad51f..f85a0e9 100644 --- a/src/main/java/ch/zhaw/pm2/racetrack/strategy/PathFollowerMoveStrategy.java +++ b/src/main/java/ch/zhaw/pm2/racetrack/strategy/PathFollowerMoveStrategy.java @@ -1,15 +1,104 @@ package ch.zhaw.pm2.racetrack.strategy; +import ch.zhaw.pm2.racetrack.PositionVector; import ch.zhaw.pm2.racetrack.PositionVector.Direction; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.util.ArrayList; +import java.util.Scanner; + /** * The PathFollowerMoveStrategy class determines the next move based on a file containing points on a path. */ public class PathFollowerMoveStrategy implements MoveStrategy { + private PositionVector currentPosition; + private PositionVector currentVelocity; + private ArrayList pointList; + private int pointer; + + + public PathFollowerMoveStrategy(String path, PositionVector startPosition) throws FileNotFoundException { + pointList = new ArrayList<>(); + pointer = 0; + readFile(new File(path)); + currentPosition = startPosition; + currentVelocity = new PositionVector(0, 0); + } + + public void readFile(File trackFile) throws FileNotFoundException { + Scanner scanner = new Scanner(new FileInputStream(trackFile), "UTF-8"); + while (scanner.hasNextLine()) { + String line = scanner.nextLine(); + String[] coordinates = line.split("(\\(X:|, Y:|\\))"); + pointList.add(new PositionVector(Integer.parseInt(coordinates[1]), Integer.parseInt(coordinates[2]))); + } + } @Override public Direction nextMove() { - // TODO: implementation - throw new UnsupportedOperationException(); + if (pointer >= pointList.size()) { + return null; + } + int accelerationX = 0; + int accelerationY = 0; + if (pointList.get(pointer).equals(currentPosition)) { + pointer ++; + } + + + if(currentVelocity.getX() > 0){ + accelerationX = -1; + } else if(currentVelocity.getX() < 0) { + accelerationX = 1; + } + if(currentVelocity.getY() > 0){ + accelerationY = -1; + } else if(currentVelocity.getY() < 0) { + accelerationY = 1; + } + + + PositionVector movementVector = new PositionVector(pointList.get(pointer).getX() - currentPosition.getX(), pointList.get(pointer).getY() - currentPosition.getY()); + if(movementVector.getX() > 0 && movementVector.getX()/2.0 > currentVelocity.getX()) { + accelerationX = 1; + } + else if(movementVector.getX() > 0 && movementVector.getX()/2.0 <= currentVelocity.getX()) { + accelerationX = -1; + } + else if(movementVector.getX() < 0 && movementVector.getX()/2.0 < currentVelocity.getX()) { + accelerationX = -1; + } + else if(movementVector.getX() < 0 && movementVector.getX()/2.0 >= currentVelocity.getX()) { + accelerationX = 1; + } + + if(movementVector.getY() > 0 && movementVector.getY()/2.0 > currentVelocity.getY()) { + accelerationY = 1; + } + else if(movementVector.getY() > 0 && movementVector.getY()/2.0 <= currentVelocity.getY()) { + accelerationY = -1; + } + else if(movementVector.getY() < 0 && movementVector.getY()/2.0 < currentVelocity.getY()) { + accelerationY = -1; + } + else if(movementVector.getY() < 0 && movementVector.getY()/2.0 >= currentVelocity.getY()) { + accelerationY = 1; + } + + + currentVelocity = new PositionVector(currentVelocity.getX() + accelerationX, currentVelocity.getY() + accelerationY); + currentPosition = new PositionVector(currentPosition.getX() + currentVelocity.getX(), currentPosition.getY() + currentVelocity.getY()); + + PositionVector acceleration = new PositionVector(accelerationX, accelerationY); + Direction[] directions = Direction.values(); + for (Direction direction : directions) { + if (direction.vector.equals(acceleration)) { + return direction; + } + } + return null; + } } -- 2.40.1 From c59e4a30d87bc869a95787a2835c0b6fa7c64149 Mon Sep 17 00:00:00 2001 From: romanschenk37 Date: Tue, 22 Mar 2022 18:31:15 +0100 Subject: [PATCH 13/15] Update MoveListStrategy.java --- .../java/ch/zhaw/pm2/racetrack/strategy/MoveListStrategy.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ch/zhaw/pm2/racetrack/strategy/MoveListStrategy.java b/src/main/java/ch/zhaw/pm2/racetrack/strategy/MoveListStrategy.java index 774b323..3de3f23 100644 --- a/src/main/java/ch/zhaw/pm2/racetrack/strategy/MoveListStrategy.java +++ b/src/main/java/ch/zhaw/pm2/racetrack/strategy/MoveListStrategy.java @@ -20,7 +20,7 @@ public class MoveListStrategy implements MoveStrategy { readFile(new File(path)); } - protected void readFile(File trackFile) throws FileNotFoundException { + private void readFile(File trackFile) throws FileNotFoundException { Scanner scanner = new Scanner(new FileInputStream(trackFile), "UTF-8"); Direction[] directions = Direction.values(); while (scanner.hasNextLine()) { -- 2.40.1 From 45918124dfc3d8e0b2f234d0e5d6066df86a2291 Mon Sep 17 00:00:00 2001 From: romanschenk37 <84532681+romanschenk37@users.noreply.github.com> Date: Wed, 23 Mar 2022 08:48:46 +0100 Subject: [PATCH 14/15] refactoring and javadoc in PathFollowerMoveStrategy.javaa --- .../strategy/PathFollowerMoveStrategy.java | 96 ++++++++++++------- 1 file changed, 59 insertions(+), 37 deletions(-) diff --git a/src/main/java/ch/zhaw/pm2/racetrack/strategy/PathFollowerMoveStrategy.java b/src/main/java/ch/zhaw/pm2/racetrack/strategy/PathFollowerMoveStrategy.java index f85a0e9..74f55c0 100644 --- a/src/main/java/ch/zhaw/pm2/racetrack/strategy/PathFollowerMoveStrategy.java +++ b/src/main/java/ch/zhaw/pm2/racetrack/strategy/PathFollowerMoveStrategy.java @@ -13,12 +13,30 @@ import java.util.Scanner; * The PathFollowerMoveStrategy class determines the next move based on a file containing points on a path. */ public class PathFollowerMoveStrategy implements MoveStrategy { + + /** + * The current Position of the car. + */ private PositionVector currentPosition; + /** + * The current Velocity of the car. + */ private PositionVector currentVelocity; + /** + * List of all points on the path. + */ private ArrayList pointList; + /** + * The index of the next point on the path. + */ private int pointer; - + /** + * Constructer to create a new PathFollowerMoveStrategy for a car. + * @param path The location where the file is saved + * @param startPosition The start position of the car + * @throws FileNotFoundException If the file with the given path does not exist. + */ public PathFollowerMoveStrategy(String path, PositionVector startPosition) throws FileNotFoundException { pointList = new ArrayList<>(); pointer = 0; @@ -27,6 +45,11 @@ public class PathFollowerMoveStrategy implements MoveStrategy { currentVelocity = new PositionVector(0, 0); } + /** + * Method to read the given File and add the points to the pointList + * @param trackFile the File Object which should be read + * @throws FileNotFoundException If the file with the given path does not exist. + */ public void readFile(File trackFile) throws FileNotFoundException { Scanner scanner = new Scanner(new FileInputStream(trackFile), "UTF-8"); while (scanner.hasNextLine()) { @@ -36,61 +59,60 @@ public class PathFollowerMoveStrategy implements MoveStrategy { } } + /** + * Method to select the direction for the next move. + * @return The direction for the next move. null if there are no points left in the list. + */ @Override public Direction nextMove() { + // if no more points in the list --> return null if (pointer >= pointList.size()) { return null; } - int accelerationX = 0; - int accelerationY = 0; + + // increase pointer variable if the next point is reached. if (pointList.get(pointer).equals(currentPosition)) { pointer ++; } - - if(currentVelocity.getX() > 0){ - accelerationX = -1; - } else if(currentVelocity.getX() < 0) { - accelerationX = 1; - } - if(currentVelocity.getY() > 0){ - accelerationY = -1; - } else if(currentVelocity.getY() < 0) { - accelerationY = 1; - } - - + // calculate Vector from current Position to next Point PositionVector movementVector = new PositionVector(pointList.get(pointer).getX() - currentPosition.getX(), pointList.get(pointer).getY() - currentPosition.getY()); - if(movementVector.getX() > 0 && movementVector.getX()/2.0 > currentVelocity.getX()) { - accelerationX = 1; + + // select acceleration for X + int accelerationX; + if((movementVector.getX() == 0 && currentVelocity.getX() > 0) || //reduce velocity to 0 if the destination coordinate is reached + (movementVector.getX() > 0 && movementVector.getX()/2.0 <= currentVelocity.getX()) || //increase velocity + (movementVector.getX() < 0 && movementVector.getX()/2.0 < currentVelocity.getX())){ //reduce velocity + accelerationX = -1; + } else if((movementVector.getX() == 0 && currentVelocity.getX() < 0) || //reduce velocity to 0 if the destination coordinate is reached + (movementVector.getX() > 0 && movementVector.getX()/2.0 > currentVelocity.getX()) || //increase velocity + (movementVector.getX() < 0 && movementVector.getX()/2.0 >= currentVelocity.getX())) { //reduce velocity + accelerationX = 1; } - else if(movementVector.getX() > 0 && movementVector.getX()/2.0 <= currentVelocity.getX()) { - accelerationX = -1; - } - else if(movementVector.getX() < 0 && movementVector.getX()/2.0 < currentVelocity.getX()) { - accelerationX = -1; - } - else if(movementVector.getX() < 0 && movementVector.getX()/2.0 >= currentVelocity.getX()) { - accelerationX = 1; + else { //no acceleration + accelerationX = 0; } - if(movementVector.getY() > 0 && movementVector.getY()/2.0 > currentVelocity.getY()) { - accelerationY = 1; + // select acceleration for Y + int accelerationY; + if((movementVector.getY() == 0 && currentVelocity.getY() > 0) || //reduce velocity to 0 if the destination coordinate is reached + (movementVector.getY() > 0 && movementVector.getY()/2.0 <= currentVelocity.getY()) || //increase velocity + (movementVector.getY() < 0 && movementVector.getY()/2.0 < currentVelocity.getY())){ //reduce velocity + accelerationY = -1; + } else if((movementVector.getY() == 0 && currentVelocity.getY() < 0) || //reduce velocity to 0 if the destination coordinate is reached + (movementVector.getY() > 0 && movementVector.getY()/2.0 > currentVelocity.getY()) || //increase velocity + (movementVector.getY() < 0 && movementVector.getY()/2.0 >= currentVelocity.getY())) { //reduce velocity + accelerationY = 1; } - else if(movementVector.getY() > 0 && movementVector.getY()/2.0 <= currentVelocity.getY()) { - accelerationY = -1; - } - else if(movementVector.getY() < 0 && movementVector.getY()/2.0 < currentVelocity.getY()) { - accelerationY = -1; - } - else if(movementVector.getY() < 0 && movementVector.getY()/2.0 >= currentVelocity.getY()) { - accelerationY = 1; + else { //no acceleration + accelerationY = 0; } - + //update current Velocity and current Position with the selected acceleration currentVelocity = new PositionVector(currentVelocity.getX() + accelerationX, currentVelocity.getY() + accelerationY); currentPosition = new PositionVector(currentPosition.getX() + currentVelocity.getX(), currentPosition.getY() + currentVelocity.getY()); + //Find Direction for acceleration PositionVector acceleration = new PositionVector(accelerationX, accelerationY); Direction[] directions = Direction.values(); for (Direction direction : directions) { -- 2.40.1 From 6ac4f644561fd61f7e18ee2d03b36bb59c1e519b Mon Sep 17 00:00:00 2001 From: romanschenk37 <84532681+romanschenk37@users.noreply.github.com> Date: Wed, 23 Mar 2022 08:55:32 +0100 Subject: [PATCH 15/15] Javadoc in PathFollowerMoveStrategy.java --- .../zhaw/pm2/racetrack/strategy/PathFollowerMoveStrategy.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ch/zhaw/pm2/racetrack/strategy/PathFollowerMoveStrategy.java b/src/main/java/ch/zhaw/pm2/racetrack/strategy/PathFollowerMoveStrategy.java index 74f55c0..807ddc8 100644 --- a/src/main/java/ch/zhaw/pm2/racetrack/strategy/PathFollowerMoveStrategy.java +++ b/src/main/java/ch/zhaw/pm2/racetrack/strategy/PathFollowerMoveStrategy.java @@ -32,7 +32,7 @@ public class PathFollowerMoveStrategy implements MoveStrategy { private int pointer; /** - * Constructer to create a new PathFollowerMoveStrategy for a car. + * Constructor to create a new PathFollowerMoveStrategy for a car. * @param path The location where the file is saved * @param startPosition The start position of the car * @throws FileNotFoundException If the file with the given path does not exist. -- 2.40.1