Pac-Man Mojificado

Bruno Ribas, Bruno Ribeiro, Igor Penha, Lucas Bergholz e Wagner Cunha

Descrição do jogo

Pac-Man é um jogo eletrônico criado por Tōru Iwatani para a empresa Namco, e sendo distribuído para o mercado americano pela Midway Games. Produzido originalmente para Arcade no início dos anos 1980, tornou-se um dos jogos mais jogados e populares no momento, tendo versões modernas para diversos consoles e continuações para tantos outros, inclusive na atualidade.

A mecânica do jogo consiste do jogador controlar uma cabeça redonda amarela que a boca abre e fecha, percorrendo labirintos simples repletos de pastilhas e 4 fantasmas que o perseguem. Se o jogador conseguir comer todas as pastilhas sem ser tocado pelos fantasmas, ele vence o nível. Um elemento extra do jogo é a possibilidade de eliminar os fantasmas, pois, com frutas distribuídas ao longo do mapa, caso o jogador coma elas, por determinado período de tempo, a colisão com o fantasma elimina ele, e não o jogador.

Para esta versão mojificada do Pac-Man, o objetivo do jogo será mojificado. De acordo com a track disputada pelo competidor, o objetivo será:

O jogo, por não ser em tempo real como o original, será dividido em turnos, ou seja, a cada turno o Pac-Man pode se locomover uma célula, após isso, ocorrem os movimentos de todos os fantasmas, para assim o Pac-Man se mover novamente. O jogador está sempre em movimento, ou seja, independente de coletar fruta ou pastilha ou colidir com fantasma, o Pac-Man deve sempre se movimentar para algum lugar.

Além disso, apesar de não obrigatório por mapa terem todos eles, existem 3 tipos de fantasmas:

Importante ressaltar que, caso ocorra, dois fantasmas podem sim coexistir na mesma célula. Outro pormenor do jogo é, como ele acontece em turno, pode vir a acontecer do Pac-Man se mover para uma célula sem o fantasma mas o fantasma em seu turno se mover até ela. Caso isso ocorra, se o Pac-Man tiver com a fruta certa ativada, o fantasma morre, caso contrário, "game-over".

Ademais, cada fantasma possui uma fruta de mesma cor correspondente a ele, na qual, quando o jogador comer ela, poderá eliminar o fantasma a qualquer momento do jogo, em vez de como era no jogo original de apenas por um tempo determinado isso estar disponível. Um ponto importante é: o jogador não pode estar com duas frutas ativas ao mesmo tempo, ou seja, caso ele tenha comido a fruta vermelha (portanto pode comer o fantasma vermelho agora), e, alguns movimentos a seguir, ele comer a fruta azul, então agora ele apenas pode eliminar o fantasma azul.

Outra adição para o Pac-Man Mojificado são os diferentes tipos de chãos:

Esses diferentes tipos de chãos valem apenas para o Pac-Man, já que um fantasma flutua, e, dessa forma, não pode ser afetado nem pelo gelo e nem por portais. Vale ressaltar que, caso um fantasma esteja em cima do gelo e o pacman vá de encontro a ele, as regras de eliminação do fantasma serão aplicadas, e ele continuará seu movimento até o final do gelo, caso tenha o matado, senão, game over. O mesmo vale para os portais, o Pac-Man deverá checar se existe um fantasma tanto na entrada quanto na saída.

Pontuação do jogo

O objetivo do Pac-Man Mojificado, como progressão de aprendizado da classe, é adicionar o conceito de ACTION-COST ao domínio, ou seja, adicionar um "custo" para cada ação realizada pelo jogador. O objetivo do competidor é ter o menor custo possível. Dessa forma, as seguintes regras de jogo também serão adicionadas ao nosso Pac-Man:

O dummy move referido acima é uma tentativa do jogo de emular a possibilidade do Pac-Man ficar parado. Em algumas versões do jogo o Pac-Man está sempre em movimento, em outras não, dessa forma, caso o jogador queira que o Pac-Man fique um turno parado enquanto todos os fantasmas andam, ele aplica o dummy move, tentando se mover na direção de uma parede. Por ter uma parede na frente de seu movimento, o Pac-Man não se move, mas todos os fantasmas tentam fazer seus respectivos movimentos, de acordo com a direção do dummy move.

Dessa forma, caso o jogador opte por aplicar um dummy move para a esquerda, por exemplo, o fantasma verde tentará andar para a esquerda, e o azul para a direita. Esta funcionalidade é opcional, ou seja, o jogador não possui nenhuma obrigatoriedade de tentar implementar ela, apesar de existir uma possibilidade de melhora de desempenho do código com essa mecânica.

Outro detalhe importante do dummy move é, caso tente ser realizado um dummy move e o jogador esteja em cima de um portal, o jogador não deve ativar o portal novamente, apenas realizar o dummy move. Dessa forma, para o jogador reativar um portal, depois de ter entrado em um deles, deve sair de cima dele e voltar para ele.

Descrição do problema

Você deve desenvolver um programa que leia a especificação do desafio, via stdin, obtenha o plano para a conclusão do mapa lido, e gere uma saída, via stdout, no formato especificado na descrição do trabalho. Caso não encontre um plano, encerre seu programa com um exit(120).

Ferramentas e auxiliares

Esta seção descreve as várias ferramentas auxiliares disponíveis para resolver o problema do jogo Pacman. As ferramentas estão organizadas em categorias: planejadores PDDL, planejadores HDDL, SAT-solvers e bibliotecas auxiliares. A localização e a forma de chamada de cada ferramenta estão descritas a seguir.

Planejadores PDDL

Para utilizar dos planejadores PDDL, você precisará de um modelo PDDL do jogo Pacman mojificado, crie os arquivos de domínio e problema PDDL correspondentes, chame o planejador selecionado com os parâmetros corretos. Aqui estão os planejadores PDDL disponíveis:

  1. Planejadores Madagascar (M, Mp, MpC):
  2. Fast Downward:
  3. Planejador em Julia:

Planejadores HDDL

Para utilizar dos planejadores HDDL, você precisará de um modelo HDDL do jogo Pacman mojificado, crie os arquivos de domínio e problema HDDL correspondentes, chame o planejador selecionado com os parâmetros corretos. Aqui estão os planejadores HDDL disponíveis:

  1. Panda:
  2. PandaPI:

SAT-solvers

Para utilizar dos SAT-solvers, você precisará de uma formulação do problema Pacman mojificado em forma de CNF (Conjunctive Normal Form). Aqui estão os SAT-solvers disponíveis e como utilizá-los:

  1. Clasp:
  2. CryptoMiniSat:
  3. MiniSat:
  4. MiniSat+:
  5. PackUp:
  6. PicoSAT:
  7. SAT4J:
  8. Python-SAT:

Como classificar nesta modalidade

Nesta modalidade de classificação, o problema é dividido em três categorias: AGILE, SATISFICING e OPTIMAL. A pontuação é computada da seguinte forma:

Entrada

A entrada é composta com um conjunto de linhas, e deverão ser lidas da entrada padrão. As linhas, da entrada, representam a matriz do jogo, com dimensões sempre retangulares. A entrada termina em EOF.

A seguir são todos os caracteres e seus respectivos significados:

Saída

A saída é composta por uma única linha contendo os movimentos do Pac-Man na ordem de seu acontecimento. Cada movimento é representado por uma letra sendo N para norte, S para sul, E para leste e W para oeste. As letras devem ser separadas pelo caracter ";" (ponto-vírgula). Ao final de todos os movimentos, deve ser passado o valor total dos movimentos e uma quebra de linha em sequência. Para a track Agile, como o valor total dos movimentos é irrelevante, a saída deve terminar com um 0 no final, em vez do custo dos movimentos.

Exemplo

Exemplo de entrada 1

##########
#P$*****B#
#*######*#
#*#  R #*#
#@# *! #*#
#*#    #*#
#*##**##*#
#********#
#        #
#G       #
##########

Saída para o exemplo

E;E;E;E;W;W;W;W;S;S;S;S;S;S;S;S;N;N;E;E;E;N;N;N;E;W;W;67

Saída para o exemplo na track Agile

E;E;E;E;W;W;W;W;S;S;S;S;S;S;S;S;N;N;E;E;E;N;N;N;E;W;W;0

Experimente você mesmo

Pac-Man
👻 PACMAN 👻
Score: 0


Author: Pacman game, mojificado por Bruno Ribas, Bruno Ribeiro, Igor Penha, Lucas Bergholz e Wagner Cunha