From 187d427b8f99319fc9a0bee1aab764cfb9de3bf9 Mon Sep 17 00:00:00 2001 From: "Felix W. Dekker" Date: Fri, 3 May 2019 15:16:46 +0200 Subject: [PATCH 1/2] Add `opposite` method to `Direction` --- .../nl/tudelft/jpacman/board/Direction.java | 20 ++++++++++++++++++- .../nl/tudelft/jpacman/npc/ghost/Clyde.java | 15 +------------- .../tudelft/jpacman/board/DirectionTest.java | 16 +++++++++++++++ 3 files changed, 36 insertions(+), 15 deletions(-) diff --git a/src/main/java/nl/tudelft/jpacman/board/Direction.java b/src/main/java/nl/tudelft/jpacman/board/Direction.java index 2fb31fa9f..8e08906b1 100644 --- a/src/main/java/nl/tudelft/jpacman/board/Direction.java +++ b/src/main/java/nl/tudelft/jpacman/board/Direction.java @@ -3,7 +3,7 @@ /** * An enumeration of possible directions on a two-dimensional square grid. * - * @author Jeroen Roosen + * @author Jeroen Roosen */ public enum Direction { @@ -69,4 +69,22 @@ public int getDeltaX() { public int getDeltaY() { return deltaY; } + + /** + * @return The direction that is opposite to this direction. + */ + public Direction getOpposite() { + switch (this) { + case NORTH: + return SOUTH; + case SOUTH: + return NORTH; + case WEST: + return EAST; + case EAST: + return WEST; + default: + throw new IllegalStateException("Received an unknown enum value."); + } + } } diff --git a/src/main/java/nl/tudelft/jpacman/npc/ghost/Clyde.java b/src/main/java/nl/tudelft/jpacman/npc/ghost/Clyde.java index dab74c0eb..3b20d31ae 100644 --- a/src/main/java/nl/tudelft/jpacman/npc/ghost/Clyde.java +++ b/src/main/java/nl/tudelft/jpacman/npc/ghost/Clyde.java @@ -1,6 +1,5 @@ package nl.tudelft.jpacman.npc.ghost; -import java.util.EnumMap; import java.util.List; import java.util.Map; import java.util.Optional; @@ -57,18 +56,6 @@ public class Clyde extends Ghost { */ private static final int MOVE_INTERVAL = 250; - /** - * A map of opposite directions. - */ - private static final Map OPPOSITES = new EnumMap<>(Direction.class); - - static { - OPPOSITES.put(Direction.NORTH, Direction.SOUTH); - OPPOSITES.put(Direction.SOUTH, Direction.NORTH); - OPPOSITES.put(Direction.WEST, Direction.EAST); - OPPOSITES.put(Direction.EAST, Direction.WEST); - } - /** * Creates a new "Clyde", a.k.a. "Pokey". * @@ -105,7 +92,7 @@ public Optional nextAiMove() { if (path != null && !path.isEmpty()) { Direction direction = path.get(0); if (path.size() <= SHYNESS) { - return Optional.ofNullable(OPPOSITES.get(direction)); + return Optional.of(direction.getOpposite()); } return Optional.of(direction); } diff --git a/src/test/java/nl/tudelft/jpacman/board/DirectionTest.java b/src/test/java/nl/tudelft/jpacman/board/DirectionTest.java index ed066f25a..23944b6cf 100644 --- a/src/test/java/nl/tudelft/jpacman/board/DirectionTest.java +++ b/src/test/java/nl/tudelft/jpacman/board/DirectionTest.java @@ -19,4 +19,20 @@ void testNorth() { Direction north = Direction.valueOf("NORTH"); assertThat(north.getDeltaY()).isEqualTo(-1); } + + /** + * The correct opposite is returned. + */ + @Test + void testOpposite() { + assertThat(Direction.NORTH.getOpposite()).isEqualTo(Direction.SOUTH); + } + + /** + * The opposite of the opposite is the original. + */ + @Test + void testOppositeTwice() { + assertThat(Direction.WEST.getOpposite().getOpposite()).isEqualTo(Direction.WEST); + } } From ed55a977406a375b7a4a25369a8a715eb3a1f4df Mon Sep 17 00:00:00 2001 From: "Felix W. Dekker" Date: Wed, 8 May 2019 19:36:13 +0200 Subject: [PATCH 2/2] Rename `getOpposite` to `opposite` --- src/main/java/nl/tudelft/jpacman/board/Direction.java | 2 +- src/main/java/nl/tudelft/jpacman/npc/ghost/Clyde.java | 2 +- src/test/java/nl/tudelft/jpacman/board/DirectionTest.java | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/nl/tudelft/jpacman/board/Direction.java b/src/main/java/nl/tudelft/jpacman/board/Direction.java index 8e08906b1..cdc85adae 100644 --- a/src/main/java/nl/tudelft/jpacman/board/Direction.java +++ b/src/main/java/nl/tudelft/jpacman/board/Direction.java @@ -73,7 +73,7 @@ public int getDeltaY() { /** * @return The direction that is opposite to this direction. */ - public Direction getOpposite() { + public Direction opposite() { switch (this) { case NORTH: return SOUTH; diff --git a/src/main/java/nl/tudelft/jpacman/npc/ghost/Clyde.java b/src/main/java/nl/tudelft/jpacman/npc/ghost/Clyde.java index 3b20d31ae..a21c67ebe 100644 --- a/src/main/java/nl/tudelft/jpacman/npc/ghost/Clyde.java +++ b/src/main/java/nl/tudelft/jpacman/npc/ghost/Clyde.java @@ -92,7 +92,7 @@ public Optional nextAiMove() { if (path != null && !path.isEmpty()) { Direction direction = path.get(0); if (path.size() <= SHYNESS) { - return Optional.of(direction.getOpposite()); + return Optional.of(direction.opposite()); } return Optional.of(direction); } diff --git a/src/test/java/nl/tudelft/jpacman/board/DirectionTest.java b/src/test/java/nl/tudelft/jpacman/board/DirectionTest.java index 23944b6cf..9559ed9ea 100644 --- a/src/test/java/nl/tudelft/jpacman/board/DirectionTest.java +++ b/src/test/java/nl/tudelft/jpacman/board/DirectionTest.java @@ -25,7 +25,7 @@ void testNorth() { */ @Test void testOpposite() { - assertThat(Direction.NORTH.getOpposite()).isEqualTo(Direction.SOUTH); + assertThat(Direction.NORTH.opposite()).isEqualTo(Direction.SOUTH); } /** @@ -33,6 +33,6 @@ void testOpposite() { */ @Test void testOppositeTwice() { - assertThat(Direction.WEST.getOpposite().getOpposite()).isEqualTo(Direction.WEST); + assertThat(Direction.WEST.opposite().opposite()).isEqualTo(Direction.WEST); } }