summaryrefslogtreecommitdiff
path: root/src/ch/epfl/maze/physical
diff options
context:
space:
mode:
Diffstat (limited to 'src/ch/epfl/maze/physical')
-rw-r--r--src/ch/epfl/maze/physical/zoo/Hamster.java37
1 files changed, 31 insertions, 6 deletions
diff --git a/src/ch/epfl/maze/physical/zoo/Hamster.java b/src/ch/epfl/maze/physical/zoo/Hamster.java
index 2a610f2..27706a5 100644
--- a/src/ch/epfl/maze/physical/zoo/Hamster.java
+++ b/src/ch/epfl/maze/physical/zoo/Hamster.java
@@ -1,15 +1,23 @@
1package ch.epfl.maze.physical.zoo; 1package ch.epfl.maze.physical.zoo;
2 2
3import ch.epfl.maze.physical.Animal; 3import ch.epfl.maze.physical.Animal;
4import ch.epfl.maze.physical.ProbabilisticAnimal;
4import ch.epfl.maze.util.Direction; 5import ch.epfl.maze.util.Direction;
5import ch.epfl.maze.util.Vector2D; 6import ch.epfl.maze.util.Vector2D;
6 7
8import java.util.ArrayList;
9import java.util.List;
10
7/** 11/**
8 * Hamster A.I. that remembers the previous choice it has made and the dead ends 12 * Hamster A.I. that remembers the previous choice it has made and the dead ends
9 * it has already met. 13 * it has already met.
14 *
15 * @author Pacien TRAN-GIRARD
10 */ 16 */
11 17
12public class Hamster extends Animal { 18public class Hamster extends ProbabilisticAnimal {
19
20 private final List<Vector2D> deadPaths;
13 21
14 /** 22 /**
15 * Constructs a hamster with a starting position. 23 * Constructs a hamster with a starting position.
@@ -19,7 +27,24 @@ public class Hamster extends Animal {
19 27
20 public Hamster(Vector2D position) { 28 public Hamster(Vector2D position) {
21 super(position); 29 super(position);
22 // TODO 30 this.deadPaths = new ArrayList<>();
31 }
32
33 /**
34 * Discard directions known to lead to dead ends.
35 *
36 * @param choices An array of choices
37 * @return An array of smart choices
38 */
39
40 private Direction[] excludeDeadPaths(Direction[] choices) {
41 List<Direction> smartChoices = new ArrayList<>();
42
43 for (Direction dir : choices)
44 if (!this.deadPaths.contains(this.getPosition().addDirectionTo(dir)))
45 smartChoices.add(dir);
46
47 return smartChoices.toArray(new Direction[smartChoices.size()]);
23 } 48 }
24 49
25 /** 50 /**
@@ -29,13 +54,13 @@ public class Hamster extends Animal {
29 54
30 @Override 55 @Override
31 public Direction move(Direction[] choices) { 56 public Direction move(Direction[] choices) {
32 // TODO 57 Direction[] smartChoices = this.excludeDeadPaths(choices);
33 return Direction.NONE; 58 if (smartChoices.length == 1) this.deadPaths.add(this.getPosition()); // dead end
59 return super.move(smartChoices);
34 } 60 }
35 61
36 @Override 62 @Override
37 public Animal copy() { 63 public Animal copy() {
38 // TODO 64 return new Hamster(this.getPosition());
39 return null;
40 } 65 }
41} 66}