Scriptbot Warz!
Os resultados estão chegando e Assassin é o nosso campeão, vencendo 2 de 3 partidas! Obrigado a todos que enviaram seus Scriptbots! Agradecimentos especiais aos chifres do BestOpportunityBot, que exibiram um excelente caminho e fizeram pleno uso de todas as opções de ação.
Mapa 1
O assassino eliminou o BestOpportunityBot logo no início, e o resto do jogo foi muito chato. Detalhado play-by-play aqui.
- Assassino: 10 PV, 10 Danos Causados, 3 Danos Recebidos
- The Avoider v3: 10 PV, 0 dano causado, 0 dano recebido
- Tem que terminar de comer: 10 PV, 0 Dano causado, 0 Dano Recebido
- BestOpportunityBot: 0 PV, 3 danos causados, 10 danos causados
Mapa 2
O BestOpportunityBot fez a maior parte do trabalho nesta partida, mas o Assassin conseguiu eliminá-lo no final. Detalhado play-by-play aqui.
- Assassino: 2 PV, 10 Danos Causados, 9 Danos Recebidos
- BestOpportunityBot: 0 PV, 32 danos causados, 10 danos causados
- The Avoider v3: 0 PV, 0 dano causado, 12 danos causados
- Tem que terminar de comer: 0 PV, 0 Dano causado, 11 Dano recebido
Mapa 3
BestOpportunityBot empurrou todos para as armadilhas nesta partida. Muito legal. Jogo detalhado por jogo aqui.
- BestOpportunityBot: 10 PV, 30 Dano causado, 0 Dano Recebido
- Assassino: 0 PV, 0 Dano causado, 0 Dano Recebido
- Tem que terminar de comer: 0 PV, 0 Dano causado, 0 Dano Recebido
- The Avoider v3: 0 PV, 0 dano causado, 0 dano recebido
Obrigado por suas respostas! Como existem apenas 4 Scriptbots, estamos abandonando os planos do torneio para três partidas gratuitas para todos, uma em cada um dos mapas abaixo. O scriptbot com o maior recorde de vitórias vence. Em caso de empate, entraremos em morte súbita, em que o scriptbot que quebra o empate vence primeiro.
Sua tarefa, se você optar por aceitá-la, é codificar um Scriptbot que pode atravessar um mapa ASCII e destruir seus oponentes. Cada batalha terá a forma de um jogo baseado em turnos de ordem inicial aleatória, onde cada Scriptbot tem a chance de gastar seus pontos de energia (EP) para realizar ações. O script GameMaster alimentará a entrada e interpretará a saída de cada Scriptbot.
Meio Ambiente
Cada Scriptbot está contido dentro de seu próprio diretório onde se pode ler os map
e stats
arquivos e leitura / gravação para o data
arquivo. O data
arquivo pode ser usado para armazenar qualquer informação persistente que você possa achar útil.
O arquivo de estatísticas
O stats
arquivo contém informações sobre seus oponentes e está formatado da seguinte forma. Cada jogador é representado em uma linha separada. A primeira coluna é um ID do jogador ( @
significa você). A segunda coluna é a saúde desse jogador.
1,9HP
@,10HP
3,9HP
4,2HP
O arquivo de mapa
O map
arquivo pode ser algo como isto ...
####################
# # # #
# 1 # # 2 #
# #
### ###
# #
# # #
# # ! #
# # #
# !#### #
# ####! #
# # #
# ! # #
# # #
# #
### ###
# #
# 3 # # @ #
# # # #
####################
... ou isto...
######################################
# # 1 # @ #
# # # #! #
# # # #### #
# # # # # !#! #
# # # # # ##### #
# ### # #### # # #
# # #! ### # #
# ###### # # # ##### #
# #! # ###### # !# #
# ### # # # #
# # 2 # # 4 # #
######################################
... ou isto...
###################
###!!!!!!#!!!!!!###
##! !##
#! 1 ! 2 !#
#! ! !#
#! !#
#! !#
#! !!! !#
## !! !!! !! ##
#! !!! !#
#! !#
#! !#
#! ! !#
#! 3 ! @ !#
##! !##
###!!!!!!#!!!!!!###
###################
... ou pode parecer totalmente diferente. De qualquer maneira, os caracteres usados e seu significado permanecerão os mesmos:
#
Uma parede intransitável e impenetrável.1
,2
,3
... Um número que representa um jogador inimigo. Esses números correspondem ao ID do jogador nostats
arquivo.!
Uma armadilha. Os scriptbots que se mudarem para esses locais morrerão imediatamente.@
A localização do seu Scriptbot.Espaço aberto no qual você é livre para se deslocar.
Jogabilidade
O script GameMaster atribuirá uma ordem inicial aleatória aos Scriptbots. Os Scriptbots são invocados nessa ordem enquanto ainda estão vivos. Os Scriptbots têm 10 Pontos de Vida (HP) e começam com 10 Pontos de Energia (EP) a cada turno, que podem ser usados para mover ou atacar. No início de cada turno, um Scriptbot recupera um HP ou recebe um EP adicional se já tiver 10 HP (portanto, rodar pode ser uma estratégia viável às vezes).
A batalha termina quando apenas um Scriptbot sobrevive ou quando 100 turnos se passaram. Se vários Scriptbots estiverem ativos no final de uma batalha, seu lugar será determinado com base nos seguintes critérios:
- Mais saúde.
- Maior dano causado.
- Maior dano recebido.
Entrada Scriptbot
O GameMaster imprimirá o mapa de batalha em um arquivo chamado do map
qual o Scriptbot terá acesso para leitura. O mapa pode ter qualquer forma, por isso é importante que o Scriptbot possa interpretá-lo. Seu Scriptbot será chamado com um parâmetro indicando EP. Por exemplo...
:> example_scriptbot.py 3
O Scriptbot será invocado até que ele gaste todo o seu EP ou no máximo 10 11 vezes. Os arquivos de mapa e estatísticas são atualizados antes de cada chamada.
Saída Scriptbot
Os scriptbots devem exibir suas ações como stout. Uma lista de ações possíveis é a seguinte:
MOVE <DIRECTION> <DISTANCE>
Custa 1 PE por
DISTANCE
. OMOVE
comando move seu Scriptbot pelo mapa. Se houver algo como um muro ou outro Scriptbot, o GameMaster moverá o seu Scriptbot o máximo possível. Se umDISTANCE
EP maior que o restante do Scriptbot for fornecido, o GameMaster moverá o Scriptbot até que o EP acabe.DIRECTION
pode ser qualquer um compasso deN
,E
,S
, ouW
.PUSH <DIRECTION> <DISTANCE>
Custa 1 PE por
DISTANCE
. OPUSH
comando permite que um Scriptbot mova outro Scriptbot. O Scriptbot que emite o comando deve estar diretamente próximo ao Scriptbot que está sendo enviado. Os dois Scriptbots se moverão na direção indicada se não houver um objeto bloqueando o Scriptbot que está sendo enviado.DIRECTION
eDISTANCE
são os mesmos que para oMOVE
comando.ATTACK <DIRECTION>
Custa um EP. O
ATTACK
comando causa 1 dano a qualquer Scriptbot diretamente ao lado do Scriptbot emissor e na direção especificada.DIRECTION
é o mesmo que para oMOVE
comando.PASS
Termina a sua vez.
Idiomas suportados
Para manter isso razoável, aceitarei os seguintes idiomas:
- Java
- Node.js
- Pitão
- PHP
Você está limitado a bibliotecas que normalmente são fornecidas com seus idiomas prontas para uso. Por favor, não me faça localizar bibliotecas obscuras para que seu código funcione.
Submissão e Julgamento
Publique seu código-fonte Scriptbot abaixo e dê um nome legal! Por favor, liste também a versão do idioma que você usou. Todos os Scriptbots serão revisados para o tomfoolery, portanto, comente bem e não ofusque seu código.
Você pode enviar mais de uma entrada, mas faça com que sejam entradas totalmente exclusivas, e não versões da mesma entrada. Por exemplo, você pode codificar um bot de Zerg Rush e um bot de Gorilla Warfare. Isso é bom. Não publique Zerg Rush v1, Zerg Rush v2, etc.
No dia 7 de novembro, coletarei todas as respostas e as que passarem na revisão inicial serão adicionadas ao suporte de torneio. O campeão recebe a resposta aceita. O suporte ideal é mostrado abaixo. Como provavelmente não haverá exatamente 16 entradas, alguns colchetes podem acabar sendo apenas três ou até dois bots. Vou tentar tornar o suporte o mais justo possível. Qualquer favoritismo necessário (no caso de uma semana de despedida ser necessária, por exemplo) será dado aos bots que foram enviados primeiro.
BOT01_
BOT02_|
BOT03_|____
BOT04_| |
|
BOT05_ |
BOT06_|___ |
BOT07_| | |
BOT08_| | |_BOT ?_
|___BOT ?_|
BOT09_ ___BOT ?_|___CHAMPION!
BOT10_| | _BOT ?_|
BOT11_|__| |
BOT12_| |
|
BOT13_ |
BOT14_|____|
BOT15_|
BOT16_|
Perguntas e Respostas
Tenho certeza de que perdi alguns detalhes, fique à vontade para fazer perguntas!
Podemos confiar que um arquivo de mapa esteja sempre cercado por # símbolos? Caso contrário, o que acontece no caso de um bot tentar sair do mapa? - BrainSteel
Sim, o mapa sempre será delimitado por # e seu Scriptbot começará dentro desses limites.
Se não houver nenhum bot presente na direção especificada em um comando PUSH, como o comando funciona? - BrainSteel
O GameMaster não fará nada, será gasto zero EP e o Scriptbot será chamado novamente.
O EP não utilizado se acumula? - feersum
Não. Cada Scriptbot começará a rodada / turno com 10 EP. Qualquer EP não gasto será desperdiçado.
Acho que entendi, mas apenas para esclarecer: com os robôs A e B, é a ordem dos eventos A @ 10EP-> MOVE MAP_UPDATE B @ 10EP-> PUSH MAP_UPDATE A @ 9EP-> ATAQUE MAP_UPDATE B @ 9EP-> ATAQUE ..., ou A @ 10EP-> MOVER A @ 9EP-> ATAQUE ... MAP_UPDATE B @ 10EP-> EMPURRAR B @ 9EP-> ATAQUE ... MAP_UPDATE? Em outras palavras, toda ação em um loop de consulta do controlador-bot é atômica? Se sim, por que o loop? Por que não retornar um único arquivo com todas as ações a serem concluídas? Caso contrário, os robôs terão que gravar seus próprios arquivos de estado para acompanhar as seqüências de várias ações. O arquivo de mapa / estatísticas só será válido antes da primeira ação. - COTO
Seu segundo exemplo está próximo, mas não totalmente certo. Durante um turno, o Scriptbot é invocado repetidamente até que o EP seja gasto, ou no máximo 11 vezes. Os arquivos de mapa e estatísticas são atualizados antes de cada chamada. O loop é útil no caso de um bot fornecer saída inválida. O GameMaster irá lidar com a saída inválida e involuirá o bot novamente, dando ao bot a chance de corrigir seu erro.
você lançará o script GameMaster para teste? - IchBinKeinBaum
O script GameMaster não será lançado. Eu o incentivaria a criar um mapa e um arquivo de estatísticas para testar o comportamento do seu bot.
Se o robô A empurra o robô B para uma armadilha, o robô A é creditado com pontos de "dano causado" iguais à saúde atual do robô B? - Mike Sweeney
Sim, é uma boa ideia. Um bot receberá pontos de dano iguais à saúde de qualquer bot que ele empurre em uma armadilha.
#
e seu Scriptbot começará dentro desses limites.
map
arquivo está sempre cercado por#
símbolos? Caso contrário, o que acontece no caso de um bot tentar sair do mapa?