#pragma once #include "Blinky.hpp" #include "Direction.hpp" #include "Inky.hpp" #include "PacMan.hpp" #include "Pellets.hpp" #include "Pinky.hpp" #include "Position.hpp" #include "SuperPellets.hpp" namespace pacman { class PacManAI { public: struct Move { Direction direction = Direction::NONE; GridPosition position; double distanceToTarget = std::numeric_limits::infinity(); }; void update(const PacMan & pacMan, const Pellets & pellets); Direction suggestedDirection() const; GridPosition pelletClosestToPacman(GridPosition pacmanGridPosition, std::vector & pellets); bool isValidMove(const Move & move); Direction optimalDirection(const std::array & moves); void reset(); private: Position pos; Direction direction = Direction::RIGHT; }; } // namespace pacman