Programa Pac-Man
Configuração
Você joga como Pac-Man. Você deseja coletar pellets, frutas e pellets potentes antes de qualquer outra pessoa, evitando fantasmas.
Regras
- Todo Pac-Man válido estará em um único labirinto. O jogador com a maior pontuação acumulada após 10 jogos vencerá.
- Um jogo termina quando todos os Pac-Men estão mortos, todos os pellets desaparecem ou se passam 500 turnos
- Se um Pac-Man morre, ele continua a jogar como um fantasma
- Comer um pellet Power fará com que você fique invencível por 10 turnos e permite que você coma Ghosts
- Comer um fantasma teleportará o fantasma para um local aleatório
- Fantasmas não podem comer nada, exceto Pac-Men, e não recebem pontos
- Ao comer os seguintes itens como Pac-Man, você obterá os seguintes pontos:
- Pellet: 10
- Pelota de poder: 50
- Fruta: 100
- Fantasma: 200
O labirinto
Se houver n Pac-Men, em seguida, um labirinto de tamanho sqrt(n)*10
por sqrt(n)*10
será gerada usando o algoritmo de Prim (devido à sua baixo fator de rio), então trançado completamente, dando preferência a becos sem saída já existentes. Além disso, essa trança pode ser feita através das bordas, para que haja alguns caminhos de cima para baixo e da esquerda para a direita.
Haverá:
2n
Fantasmas4n
Power Pellets2n
Frutan
Pac-Men em locais onde os quadrados dos vizinhos conectados estão vazios.- Todos os pontos vazios restantes serão preenchidos com pellets
Portanto, um mapa inicial com 10 jogadores será mais ou menos assim (Ghosts = verde, Pellets = aqua, fruta = vermelho, Pac-Man = amarelo):
Entrada / Saída
No início do jogo , você receberá uma única linha de caracteres, representando as paredes em todos os quadrados do mapa. Para cada quadrado, começando com o canto superior esquerdo, movendo para a direita e passando para a próxima linha, você receberá um dígito hexadecimal representando a situação da parede:
0: No walls
1: North wall
2: East wall
3: East & North wall
4: South wall
5: South & North wall
6: South & East wall
7: Won't occur
8: West wall
9: West & North wall
A: West & East wall
B: Won't occur
C: West & South wall
D: Won't occur
E: Won't occur
F: Won't occur
Simplificando, Norte = 1, Leste = 2, Sul = 4 e Oeste = 8, somados.
Então, a cada turno , você receberá sua posição atual e os itens em sua linha de visão (se você é um Pac-Man. Todos os fantasmas recebem todos os quadrados de -5 a +5 de sua posição relativa). Sua linha de visão será baseada na direção em que você viajou no último turno. Se você viajou para o norte, receberá todos os quadrados diretamente ao norte, leste e oeste de você até que uma parede interrompa sua vista e um único quadrado noroeste e nordeste, se nenhuma parede interromper sua vista. Se você optar por não se mover, você receberá os quadrados nas 8 direções.
Para o visual, I
significa invisível, V
significa visível, P
significa Pac-Man (assumindo que o Pac-Man esteja voltado para o norte):
|I I|V|I|
|I V|V V|
|V V P|I|
|I I|I|I|
Cada quadrado será dado por uma coordenada e, em seguida, seu conteúdo. Seu conteúdo é representado pelos seguintes caracteres:
P
: 1 ou mais Pac-ManG
: 1 ou mais fantasmaso
: PelotaO
: Pelota do poderF
: Pedaço de frutaX
: Nada
Se houver um fantasma e mais alguma coisa em um quadrado, G
será retornado.
Portanto, se você estivesse no quadrado 23,70
, você acabou de se mudar para o norte, o quadrado acima de você é um beco sem saída e contém um pellet de energia, e você tem paredes em ambos os lados, sua entrada seria:
23,70X 22,70O
No seu quadrado atual, ele mostrará G
se você é um fantasma, P
se houver outro Pac-Man no seu quadrado, caso contrário, umX
Em seguida, você retornará os seguintes itens via STDOUT:
Um único caractere representando uma direção ( N
orth, E
ast, S
outh, W
est ou X
Stay).
Antes de passar em uma direção, você também pode passar em qualquer coordenada como x,y
e as paredes desse quadrado serão passadas de volta (como descrito acima)
O programa deve estar em execução contínua até que Q
seja transmitido a ele via STDIN. Os programas serão reiniciados para cada jogo.
Não é permitido acessar outras informações fora do que é transmitido ao STDIN (incluindo outros dados do Pac-Men ou os dados mantidos pelo programa host).
Se você não retornar um movimento dentro de 1000 ms, o programa será encerrado (executando na minha máquina Win8 bastante decente). Você terá 2 segundos para processar o layout inicial do labirinto quando for fornecido
O host será escrito em Python, e o código para testar seu bot está disponível.
Casos excepcionais
- Se vários Pac-Men terminarem no mesmo local, não obtenha o conteúdo do quadrado atual, a menos que exatamente 1 deles seja invencível; nesse caso, o invencível Pac-Man receberá o pellet.
- Um Pac-Man comido por um fantasma não será teleportado para outro lugar. Se dois Pac-Men estiverem em um quadrado e um for invencível, o fantasma será teleportado.
- Ser teleportado como um fantasma impede que você se mova por 1 turno. Ao jogar como um fantasma, você simplesmente terá sua vez ignorada
- Tentar mover-se através de uma parede será interpretado como "Permanecer"
Cada um dos fantasmas iniciais receberá um dos quatro traços de personalidade, conforme descrito aqui , com a seguinte modificação:
- Os erros descritos não serão duplicados
- Todos eles estarão ativos desde o início
- Eles são vulneráveis apenas ao jogador que comeu o pellet
- Eles mudarão indefinidamente de dispersão para perseguição, cada um com um número fixo de turnos antes da troca
- Ao mudar para perseguir, eles encontrarão o Pac-Man mais próximo a perseguir e perseguirão esse Pac-Man pela duração de sua perseguição. (Se houver um empate por proximidade, o Pac-Man será escolhido pseudo-aleatoriamente)
- Blinky não vai acelerar
- Inky escolherá o fantasma mais próximo para basear seus cálculos depois de mudar para perseguir.
- Clyde encontrará todos os jogadores a 8 quadrados de distância e seguirá o jogador mais distante.
- Todos os fantasmas, exceto Clyde, não terão como alvo um jogador a mais de 5 quadrados de distância
Aceitarei código compilável de um idioma padrão ou um .exe (com o código que o acompanha).
Dicas de programação
Você pode com o meu controlador. Você precisa colocar uma pasta / bots / your_bot_name / no mesmo diretório que o programa. Dentro da pasta, você precisa adicionar um command.txt contendo um comando para executar seu programa (ex python my_bot.py
:) e seu bot.
O código do controlador está no Github (código Python, requer Pygame se você quiser gráficos). Testado no Windows e Linux
PONTUAÇÃO
ghostbuster: 72,840 pontos
pathy: 54.570 pontos
míope: 50.820 pontos
evitarinteração: 23,580 pontos
físico: 18,330 pontos
randomwalk: 7.760 pontos
dumbpac: 4.880 pontos