package ch.epfl.maze.physical.pacman; import ch.epfl.maze.physical.Animal; import ch.epfl.maze.physical.Daedalus; import ch.epfl.maze.physical.Prey; import ch.epfl.maze.physical.stragegies.picker.RandomPicker; import ch.epfl.maze.physical.stragegies.planner.DistanceCalculator; import ch.epfl.maze.physical.stragegies.reducer.CostReducer; import ch.epfl.maze.util.Direction; import ch.epfl.maze.util.Vector2D; import java.util.Set; /** * Pac-Man character, from the famous game of the same name. * * @author EPFL * @author Pacien TRAN-GIRARD */ public class PacMan extends Prey implements DistanceCalculator, CostReducer, RandomPicker { /** * Constructs a new Pac-Man. * * @param position Starting position of the Pac-Man in the Daedalus */ public PacMan(Vector2D position) { super(position); } @Override public int getChoiceCost(Direction choice, Daedalus daedalus) { return (-1) * daedalus .getPredatorSet() .stream() .map(pred -> this.getDistanceTo(choice, pred.getPosition())) .map(dist -> dist * 100.0d) .min(Double::compare) .get() .intValue(); } @Override public Direction move(Set choices, Daedalus daedalus) { Set smartChoices = this.reduce(choices, daedalus); return this.pick(smartChoices); } @Override public Animal copy() { return new PacMan(this.getPosition()); } }