Esse projeto foi concluído no final do meu primeiro ano da graduação, na disciplina de Algoritmos e Estrutura de Dados I. O objetivo foi colocar em prática o conhececimento adquirido sobre POO. Tentei fazer com que o jogo ficasse o mais parecido possível com o Pac-Man original, porém, devido às limitações da biblioteca usada e também de conhecimento acerca de programação e boas práticas, o projeto final é, de certa forma, bem simples.
Vídeo de demonstração
📺 Esse vídeo foi feito de forma simples, apenas para mostrar como o jogo funciona: Vídeo no Youtube
O jogo possui apenas um mapa, com 244 comidas no total (contando com as especiais). Sempre que as comidas se esgotam, o jogo reinicia no mesmo mapa mantendo apenas a pontução do usuário.
Esse mapa é representado através de uma matriz de tamanho 28x31, que é usada para fazer os testes de colisão do Pac-Man com as paredes (0's representam caminhos e 1's representam paredes). Além disso, ela é utilizada para fazer com que os fantasmas consigam traçar o seu caminho através do Algoritmo A*.
Cada fantasma também tem uma forma específica de se movimentar pelo mapa:
Blinky: Traça o seu caminho para ir diretamente até o Pac-Man (seguindo-o);Pinky: Tem movimentos definidos e fica repetindo-os ao longo do jogo;Clyde: Se movimenta de forma aleatória (tentando se manter no meio do mapa);Inky: Pega o quadrante e o movimento atual do Pac-Man, para tentar interceptá-lo. Se o Pac-Man estiver no quadrante 1 do mapa (parte superior esquerda) e está se movendo para a direita, o Inky vai até o quadrante 2 (parte superior direita) em um ponto pré-definido;
Vale salientar que os fantasmas que precisam traçar os seus caminhos, usam o A* para definir o trajeto. Esse trajeto não é atualizado a todo momento, para não termos problema com memória. Por isso, os movimentos dos fantasmas ficam armazenados em uma lista. Então, toda vez que a lista fica vázia eles traçam uma nova rota.
Algoritmo A*
- Ter
pythoninstalado - Baixar a biblioteca pathfinding:
pip install pathfinding - Rodar o arquivo
main.py