pacman/exercises/25/pacman_ai/README.md

52 lines
1.7 KiB
Markdown
Raw Normal View History

2021-10-05 11:48:15 +00:00
[< Back](../README.md)
2021-10-05 11:44:51 +00:00
# Exercise: PacMan AI
2021-10-05 13:30:50 +00:00
Let's implement a naive AI for PacMan.
2021-10-05 13:30:50 +00:00
## Background: PacMan Moves
At each intersection, check if there is a ghost directly inline with that path. If the path is free of ghosts, you are
allowed to turn there. And if PacMan is moving in a direction, and a ghost enters his path, then pacman will reverse.
For example if pacman is at an intersection and can go either right or up, and there is a ghost in the path going right,
then pacman will go up. Then while pacman is going up, a ghost enters that path, pacman will go back.
You only need to worry about the grid itself and any ghosts on the North/South/East/West axis of PacMan.
2021-10-05 13:30:50 +00:00
## Exercise
1. Implement [PacManAI::pelletClosestToPacman](../../../lib/PacManAI.cpp) and test your implementation with the test
2021-10-05 13:30:50 +00:00
in [testPacmanAI.cpp](../../../test/testPacmanAI.cpp) called _"Find pellet closest to pacman"_
*Hint*:
```cpp
GridPosition PacManAI::pelletClosestToPacman(GridPosition pacmanGridPosition,
std::vector<GridPosition> & pellets) {
return {0, 0};
}
```
2. Implement [PacManAI::isValidMove](../../../lib/PacManAI.cpp) and test your implementation with the test
2021-10-05 13:30:50 +00:00
in [testPacmanAI.cpp](../../../test/testPacmanAI.cpp) called _"Is valid move"_
*Hint*:
```cpp
bool PacManAI::isValidMove(const Move & move) {
return false;
}
```
3. Implement [PacManAI::optimalDirection](../../../lib/PacManAI.cpp) and test your implementation with the test
2021-10-05 13:30:50 +00:00
in [testPacmanAI.cpp](../../../test/testPacmanAI.cpp) called _"Is optimal direction"_
*Hint*:
```cpp
Direction PacManAI::optimalDirection(const std::array<Move, 4> & moves) {
return Direction::NONE;
}
```