diff options
-rw-r--r-- | src/ch/epfl/maze/physical/Animal.java | 19 | ||||
-rw-r--r-- | src/ch/epfl/maze/physical/GhostPredator.java | 20 | ||||
-rw-r--r-- | src/ch/epfl/maze/physical/Predator.java | 24 | ||||
-rw-r--r-- | src/ch/epfl/maze/physical/Prey.java | 24 | ||||
-rw-r--r-- | src/ch/epfl/maze/physical/ProbabilisticAnimal.java | 33 | ||||
-rw-r--r-- | src/ch/epfl/maze/physical/pacman/PacMan.java | 4 | ||||
-rw-r--r-- | src/ch/epfl/maze/physical/zoo/Bear.java | 19 | ||||
-rw-r--r-- | src/ch/epfl/maze/physical/zoo/Hamster.java | 19 | ||||
-rw-r--r-- | src/ch/epfl/maze/physical/zoo/Monkey.java | 23 | ||||
-rw-r--r-- | src/ch/epfl/maze/physical/zoo/Panda.java | 55 | ||||
-rw-r--r-- | src/ch/epfl/maze/physical/zoo/SpaceInvader.java | 6 | ||||
-rw-r--r-- | src/ch/epfl/maze/tests/AnimalTest.java | 6 | ||||
-rw-r--r-- | src/ch/epfl/maze/tests/GhostsTest.java | 4 |
13 files changed, 158 insertions, 98 deletions
diff --git a/src/ch/epfl/maze/physical/Animal.java b/src/ch/epfl/maze/physical/Animal.java index 34a1136..04c4baf 100644 --- a/src/ch/epfl/maze/physical/Animal.java +++ b/src/ch/epfl/maze/physical/Animal.java | |||
@@ -3,6 +3,10 @@ package ch.epfl.maze.physical; | |||
3 | import ch.epfl.maze.util.Direction; | 3 | import ch.epfl.maze.util.Direction; |
4 | import ch.epfl.maze.util.Vector2D; | 4 | import ch.epfl.maze.util.Vector2D; |
5 | 5 | ||
6 | import java.util.Arrays; | ||
7 | import java.util.EnumSet; | ||
8 | import java.util.Set; | ||
9 | |||
6 | /** | 10 | /** |
7 | * Animal inside a {@code World} that can move depending on the available | 11 | * Animal inside a {@code World} that can move depending on the available |
8 | * choices it has at its position. | 12 | * choices it has at its position. |
@@ -44,7 +48,20 @@ abstract public class Animal { | |||
44 | * World.getChoices(Vector2D)}) | 48 | * World.getChoices(Vector2D)}) |
45 | * @return The next direction of the animal, chosen in {@code choices} | 49 | * @return The next direction of the animal, chosen in {@code choices} |
46 | */ | 50 | */ |
47 | abstract public Direction move(Direction[] choices); | 51 | abstract public Direction move(Set<Direction> choices); |
52 | |||
53 | /** | ||
54 | * Retrieves the next direction of the animal, by selecting one choice among | ||
55 | * the ones available from its position. | ||
56 | * | ||
57 | * @param choices The choices left to the animal at its current position (see | ||
58 | * {@link ch.epfl.maze.physical.World#getChoices(Vector2D) | ||
59 | * World.getChoices(Vector2D)}) | ||
60 | * @return The next direction of the animal, chosen in {@code choices} | ||
61 | */ | ||
62 | public final Direction move(Direction[] choices) { | ||
63 | return this.move(EnumSet.copyOf(Arrays.asList(choices))); | ||
64 | } | ||
48 | 65 | ||
49 | /** | 66 | /** |
50 | * Updates the animal position with a direction. | 67 | * Updates the animal position with a direction. |
diff --git a/src/ch/epfl/maze/physical/GhostPredator.java b/src/ch/epfl/maze/physical/GhostPredator.java index e4a64b3..c1cfca8 100644 --- a/src/ch/epfl/maze/physical/GhostPredator.java +++ b/src/ch/epfl/maze/physical/GhostPredator.java | |||
@@ -3,8 +3,8 @@ package ch.epfl.maze.physical; | |||
3 | import ch.epfl.maze.util.Direction; | 3 | import ch.epfl.maze.util.Direction; |
4 | import ch.epfl.maze.util.Vector2D; | 4 | import ch.epfl.maze.util.Vector2D; |
5 | 5 | ||
6 | import java.util.ArrayList; | 6 | import java.util.EnumSet; |
7 | import java.util.List; | 7 | import java.util.Set; |
8 | 8 | ||
9 | /** | 9 | /** |
10 | * Predator ghost that have two different modes and a home position in the labyrinth. | 10 | * Predator ghost that have two different modes and a home position in the labyrinth. |
@@ -138,11 +138,11 @@ abstract public class GhostPredator extends Predator { | |||
138 | * Selects the best Direction in the given choices by minimizing the Euclidean distance to the targeted position. | 138 | * Selects the best Direction in the given choices by minimizing the Euclidean distance to the targeted position. |
139 | * | 139 | * |
140 | * @param targetPosition The targeted position | 140 | * @param targetPosition The targeted position |
141 | * @param choices An array of Direction choices | 141 | * @param choices A set of Direction choices |
142 | * @return An array of optimal Direction choices | 142 | * @return A set of optimal Direction choices |
143 | */ | 143 | */ |
144 | private Direction[] selectBestPaths(Vector2D targetPosition, Direction[] choices) { | 144 | private Set<Direction> selectBestPaths(Vector2D targetPosition, Set<Direction> choices) { |
145 | List<Direction> bestPaths = new ArrayList<>(); | 145 | Set<Direction> bestPaths = EnumSet.noneOf(Direction.class); |
146 | double minDist = Double.MAX_VALUE; | 146 | double minDist = Double.MAX_VALUE; |
147 | 147 | ||
148 | for (Direction dir : choices) { | 148 | for (Direction dir : choices) { |
@@ -157,7 +157,7 @@ abstract public class GhostPredator extends Predator { | |||
157 | bestPaths.add(dir); | 157 | bestPaths.add(dir); |
158 | } | 158 | } |
159 | 159 | ||
160 | return bestPaths.toArray(new Direction[bestPaths.size()]); | 160 | return bestPaths; |
161 | } | 161 | } |
162 | 162 | ||
163 | /** | 163 | /** |
@@ -179,11 +179,11 @@ abstract public class GhostPredator extends Predator { | |||
179 | } | 179 | } |
180 | 180 | ||
181 | @Override | 181 | @Override |
182 | public Direction move(Direction[] choices, Daedalus daedalus) { | 182 | public Direction move(Set<Direction> choices, Daedalus daedalus) { |
183 | this.countCycle(); | 183 | this.countCycle(); |
184 | 184 | ||
185 | Direction[] smartChoices = choices.length > 1 ? this.excludeOrigin(choices) : choices; | 185 | Set<Direction> smartChoices = choices.size() > 1 ? this.excludeOrigin(choices) : choices; |
186 | Direction[] bestPaths = this.selectBestPaths(this.getTargetPosition(daedalus), smartChoices); | 186 | Set<Direction> bestPaths = this.selectBestPaths(this.getTargetPosition(daedalus), smartChoices); |
187 | return this.move(bestPaths); | 187 | return this.move(bestPaths); |
188 | } | 188 | } |
189 | 189 | ||
diff --git a/src/ch/epfl/maze/physical/Predator.java b/src/ch/epfl/maze/physical/Predator.java index 0b20ca0..5f0a3bb 100644 --- a/src/ch/epfl/maze/physical/Predator.java +++ b/src/ch/epfl/maze/physical/Predator.java | |||
@@ -3,6 +3,10 @@ package ch.epfl.maze.physical; | |||
3 | import ch.epfl.maze.util.Direction; | 3 | import ch.epfl.maze.util.Direction; |
4 | import ch.epfl.maze.util.Vector2D; | 4 | import ch.epfl.maze.util.Vector2D; |
5 | 5 | ||
6 | import java.util.Arrays; | ||
7 | import java.util.EnumSet; | ||
8 | import java.util.Set; | ||
9 | |||
6 | /** | 10 | /** |
7 | * Predator that kills a prey when they meet with each other in the labyrinth. | 11 | * Predator that kills a prey when they meet with each other in the labyrinth. |
8 | * | 12 | * |
@@ -34,6 +38,24 @@ abstract public class Predator extends ProbabilisticAnimal { | |||
34 | * @param daedalus The world in which the animal moves | 38 | * @param daedalus The world in which the animal moves |
35 | * @return The next direction of the animal, chosen in {@code choices} | 39 | * @return The next direction of the animal, chosen in {@code choices} |
36 | */ | 40 | */ |
37 | abstract public Direction move(Direction[] choices, Daedalus daedalus); | 41 | abstract public Direction move(Set<Direction> choices, Daedalus daedalus); |
42 | |||
43 | /** | ||
44 | * Retrieves the next direction of the animal, by selecting one choice among | ||
45 | * the ones available from its position. | ||
46 | * <p> | ||
47 | * In this variation, the animal knows the world entirely. It can therefore | ||
48 | * use the position of other animals in the daedalus to hunt more | ||
49 | * effectively. | ||
50 | * | ||
51 | * @param choices The choices left to the animal at its current position (see | ||
52 | * {@link ch.epfl.maze.physical.World#getChoices(Vector2D) | ||
53 | * World.getChoices(Vector2D)}) | ||
54 | * @param daedalus The world in which the animal moves | ||
55 | * @return The next direction of the animal, chosen in {@code choices} | ||
56 | */ | ||
57 | public final Direction move(Direction[] choices, Daedalus daedalus) { | ||
58 | return this.move(EnumSet.copyOf(Arrays.asList(choices)), daedalus); | ||
59 | } | ||
38 | 60 | ||
39 | } | 61 | } |
diff --git a/src/ch/epfl/maze/physical/Prey.java b/src/ch/epfl/maze/physical/Prey.java index 26fe92b..3654807 100644 --- a/src/ch/epfl/maze/physical/Prey.java +++ b/src/ch/epfl/maze/physical/Prey.java | |||
@@ -3,6 +3,10 @@ package ch.epfl.maze.physical; | |||
3 | import ch.epfl.maze.util.Direction; | 3 | import ch.epfl.maze.util.Direction; |
4 | import ch.epfl.maze.util.Vector2D; | 4 | import ch.epfl.maze.util.Vector2D; |
5 | 5 | ||
6 | import java.util.Arrays; | ||
7 | import java.util.EnumSet; | ||
8 | import java.util.Set; | ||
9 | |||
6 | /** | 10 | /** |
7 | * Prey that is killed by a predator when they meet each other in the labyrinth. | 11 | * Prey that is killed by a predator when they meet each other in the labyrinth. |
8 | * | 12 | * |
@@ -34,6 +38,24 @@ abstract public class Prey extends ProbabilisticAnimal { | |||
34 | * @param daedalus The world in which the animal moves | 38 | * @param daedalus The world in which the animal moves |
35 | * @return The next direction of the animal, chosen in {@code choices} | 39 | * @return The next direction of the animal, chosen in {@code choices} |
36 | */ | 40 | */ |
37 | abstract public Direction move(Direction[] choices, Daedalus daedalus); | 41 | abstract public Direction move(Set<Direction> choices, Daedalus daedalus); |
42 | |||
43 | /** | ||
44 | * Retrieves the next direction of the animal, by selecting one choice among | ||
45 | * the ones available from its position. | ||
46 | * <p> | ||
47 | * In this variation, the animal knows the world entirely. It can therefore | ||
48 | * use the position of other animals in the daedalus to evade predators more | ||
49 | * effectively. | ||
50 | * | ||
51 | * @param choices The choices left to the animal at its current position (see | ||
52 | * {@link ch.epfl.maze.physical.World#getChoices(Vector2D) | ||
53 | * World.getChoices(Vector2D)}) | ||
54 | * @param daedalus The world in which the animal moves | ||
55 | * @return The next direction of the animal, chosen in {@code choices} | ||
56 | */ | ||
57 | public final Direction move(Direction[] choices, Daedalus daedalus) { | ||
58 | return this.move(EnumSet.copyOf(Arrays.asList(choices)), daedalus); | ||
59 | } | ||
38 | 60 | ||
39 | } | 61 | } |
diff --git a/src/ch/epfl/maze/physical/ProbabilisticAnimal.java b/src/ch/epfl/maze/physical/ProbabilisticAnimal.java index 650cecf..e461e8c 100644 --- a/src/ch/epfl/maze/physical/ProbabilisticAnimal.java +++ b/src/ch/epfl/maze/physical/ProbabilisticAnimal.java | |||
@@ -4,8 +4,9 @@ import ch.epfl.maze.util.Direction; | |||
4 | import ch.epfl.maze.util.Vector2D; | 4 | import ch.epfl.maze.util.Vector2D; |
5 | 5 | ||
6 | import java.util.ArrayList; | 6 | import java.util.ArrayList; |
7 | import java.util.Arrays; | 7 | import java.util.List; |
8 | import java.util.Random; | 8 | import java.util.Random; |
9 | import java.util.Set; | ||
9 | import java.util.stream.Collectors; | 10 | import java.util.stream.Collectors; |
10 | 11 | ||
11 |