From a842d134397747a0f72d2f70ca604c28784d05a3 Mon Sep 17 00:00:00 2001 From: Pacien TRAN-GIRARD Date: Mon, 23 Nov 2015 12:01:02 +0100 Subject: Implement Clyde A.I. --- src/ch/epfl/maze/physical/pacman/Clyde.java | 46 ++++++++++++++++++++++++----- 1 file changed, 39 insertions(+), 7 deletions(-) (limited to 'src/ch/epfl/maze/physical/pacman') diff --git a/src/ch/epfl/maze/physical/pacman/Clyde.java b/src/ch/epfl/maze/physical/pacman/Clyde.java index 6b3bef3..7e8bdd7 100644 --- a/src/ch/epfl/maze/physical/pacman/Clyde.java +++ b/src/ch/epfl/maze/physical/pacman/Clyde.java @@ -3,35 +3,67 @@ package ch.epfl.maze.physical.pacman; import ch.epfl.maze.physical.Animal; import ch.epfl.maze.physical.Daedalus; import ch.epfl.maze.physical.GhostPredator; -import ch.epfl.maze.util.Direction; import ch.epfl.maze.util.Vector2D; /** * Orange ghost from the Pac-Man game, alternates between direct chase if far * from its target and SCATTER if close. + * + * @author Pacien TRAN-GIRARD */ - public class Clyde extends GhostPredator { + private static double PROXIMITY_THRESHOLD = 4.0d; + /** * Constructs a Clyde with a starting position. * * @param position Starting position of Clyde in the labyrinth */ - public Clyde(Vector2D position) { super(position); - // TODO } + /** + * Checks if Clyde is close to the targeted Prey. + * + * @param daedalus The Daedalus + * @return T(the Prey is reckless) + */ + private boolean closeToTarget(Daedalus daedalus) { + double dist = this + .getPosition() + .sub(this.getPreyPosition(daedalus)) + .dist(); + + return dist < Clyde.PROXIMITY_THRESHOLD; + } + + /** + * Returns the current Mode, forcing the SCATTER Mode if far from the target. + * + * @param daedalus The Daedalus + * @return The current Mode + */ @Override - public Direction move(Direction[] choices, Daedalus daedalus) { - // TODO - return Direction.NONE; + protected Mode getMode(Daedalus daedalus) { + return this.closeToTarget(daedalus) ? super.getMode(daedalus) : Mode.SCATTER; + } + + /** + * Targets directly the current position of the Prey. + * + * @param daedalus The Daedalus + * @return The position of the Prey + */ + @Override + protected Vector2D getPreyTargetPosition(Daedalus daedalus) { + return getPreyPosition(daedalus); } @Override public Animal copy() { return new Clyde(this.getPosition()); } + } -- cgit v1.2.3