Você provavelmente conhece o Jogo da Vida de Conway , o famoso autômato celular inventado pelo matemático John Conway. A vida é um conjunto de regras que, juntas, permitem simular uma placa bidimensional de células. As regras decidem quais células no quadro vivem e quais morrem. Com alguma imaginação, você poderia dizer que Life é um jogo de zero jogadores: um jogo com o objetivo de encontrar padrões com comportamentos interessantes, como o famoso planador.
Um jogo de zero jogadores ... Até hoje. Você deve escrever um programa que jogue o Jogo da Vida - e jogue para vencer, no estilo King of the Hill. Seu oponente (singular), é claro, tenta fazer o mesmo. O vencedor é o último bot com células vivas ou o jogador com mais células vivas após 10000 gerações.
Regras do jogo
As regras são quase as mesmas da vida normal (B3 / S23):
- Uma célula viva com menos de dois vizinhos amigos morre de fome.
- Uma célula viva com dois ou três vizinhos amigos sobrevive.
- Uma célula viva com mais de três vizinhos amigos morre de superpopulação.
- Uma célula morta com exatamente três vizinhos do mesmo jogador ganha vida para lutar por esse jogador, desde que não haja vizinhos inimigos .
... mas após cada geração, você e seu oponente têm a oportunidade de intervir. Você pode acordar até um máximo de 30 células para lutar por você. (Quem vai primeiro é decidido pelo servidor.)
O quadro é um quadrado de células (x, y). Todos os quadrados estão inicialmente mortos. As bordas não se enrolam (não é um mundo em forma de toro) e estão permanentemente mortas.
Este é um concurso no espírito de Battlebots e Core Wars . Existe um servidor central que irá executar bots e pode ser encontrado aqui
Protocolo
O servidor arena fala um protocolo JSON simples comunicado através do argv
Onde Valores é uma sequência codificada em JSON
y_size
: o máximo de y cordões de peças antes que desapareçamx_size
: o máximo x cordões de peças antes que desapareçamtick_id
: o número atual do tickboard
: um dicionário com chaves no formato '(y, x)' e valores no formatobot_id
(int)bot_id
: as peças no quadro com esse ID são suas
Exemplo:
{"y_size":2000,"x_size":2000,"board":{},"bot_id":1,"tick_id":1}
Dizendo ao servidor sua escolha:
- Envie ao servidor uma lista de peças para mudar para a sua cor.
- Somente aqueles que estão vazios serão alterados
- Formato de lista de cordas aninhadas
[[0,0], [0,1], [100,22]...]
NOTA: Seu bot não precisa atualizar os blocos - o servidor faz a atualização por si só
Regras da competição
- Se sua implementação falhar em seguir o protocolo, a sua vez será perdida; O servidor não assumirá nenhuma mudança de estado
- Você não tem o direito de tirar proveito de uma falha no servidor da arena.
- Faça sua IA decidir sobre os movimentos em um momento são. Envie sua próxima jogada o mais rápido possível.
- Por fim, seja gentil com o servidor. Está lá para sua diversão.
- Não seguir estas regras pode levar à desqualificação.
- Em caso de empate, os dois jogadores têm 1 vitória adicionada ao total
Executando o controlador você mesmo
A fonte do controlador pode ser encontrada aqui . Existem 2 maneiras de executar o controlador:
- Modo de competição (terminal)
- Setup with
python3 get_answers.py
- Execute uma competição all v all com cada bot colocando-o um contra o outro.
- Setup with
- Modo de teste (GUI)
- Corre
python3 nice_gui.py
- Clique
Pull Answers
- Se você quiser adicionar sua própria resposta para experimentá-la antes de postar, clique
File -> Add manual answer
e encontre o arquivo e escolha o idioma em que está escrito. - Se o seu idioma não estiver presente, envie-me um ping e tentarei instalá-lo no servidor em que o executarei (as instruções de instalação e execução também serão boas!)
- Escolha 2 bots para jogar um contra o outro
- Clique
Run
- Assista o jogo...
- Corre
- Instalação
- Requer python3
- get_answers requer bs4 e html5lib
- O controlador requer uma maneira de executar arquivos .sh (MinGW no Windows)
Pontuação
O bot com mais vitórias a partir de 12/07/2016
(12 de julho)14/07/2016
(14 de julho, não conseguia descobrir como executar um bot) vence.
Ajuda com o controlador / GUI pode ser solicitada nesta sala de bate-papo
Esta pergunta está em desenvolvimento desde 2014 e foi a pergunta mais votada na sandbox. Agradecimentos especiais a Wander Nauta (autor e conceito original), PPCG Chat (comentários e ajuda) e a qualquer pessoa que tenha comentado na caixa de areia (mais comentários).