Scriptbot Warz!
¡Los resultados están listos y Assassin es nuestro campeón, ganando 2 de 3 partidos! ¡Gracias a todos los que enviaron sus Scriptbots! Un agradecimiento especial a los cuernos para BestOpportunityBot, que mostró una excelente ruta e hizo pleno uso de todas las opciones de acción.
Mapa 1
Assassin eliminó BestOpportunityBot desde el principio, y el resto del partido fue bastante aburrido. Juego detallado por juego aquí.
- Asesino: 10 HP, 10 Daño infligido, 3 Daño recibido
- The Avoider v3: 10 HP, 0 Daño infligido, 0 Daño recibido
- Tengo que terminar de comer: 10 HP, 0 Daño infligido, 0 Daño recibido
- BestOpportunityBot: 0 HP, 3 Daño infligido, 10 Daño recibido
Mapa 2
BestOpportunityBot hizo la mayor parte del trabajo en este partido, pero Assassin pudo eliminarlo al final. Juego detallado por juego aquí.
- Asesino: 2 HP, 10 Daño infligido, 9 Daño recibido
- BestOpportunityBot: 0 HP, 32 Daño infligido, 10 Daño recibido
- The Avoider v3: 0 HP, 0 Daño infligido, 12 Daño recibido
- Tengo que terminar de comer: 0 HP, 0 Daño infligido, 11 Daño recibido
Mapa 3
BestOpportunityBot empujó a todos a las trampas en este partido. Muy genial. Juego detallado por juego aquí.
- BestOpportunityBot: 10 HP, 30 Daño infligido, 0 Daño recibido
- Asesino: 0 HP, 0 Daño infligido, 0 Daño recibido
- Tengo que terminar de comer: 0 HP, 0 Daño infligido, 0 Daño recibido
- The Avoider v3: 0 HP, 0 Daño infligido, 0 Daño recibido
¡Gracias por tus respuestas! Dado que solo hay 4 Scriptbots, estamos abandonando los planes del torneo para tres partidos gratuitos, uno en cada uno de los mapas a continuación. El scriptbot con el mayor récord de victorias gana. En caso de empate, entraremos en una muerte súbita en la que el scriptbot que rompa el empate primero gana.
Su tarea, si elige aceptarla, es codificar un Scriptbot que pueda atravesar un mapa ASCII y destruir a sus oponentes. Cada batalla tomará la forma de un juego basado en turnos de orden aleatorio donde cada Scriptbot tiene la oportunidad de gastar sus puntos de energía (EP) para realizar acciones. La secuencia de comandos GameMaster alimentará la entrada e interpretará la salida de cada Scriptbot.
Ambiente
Cada Scriptbot está contenida dentro de su propio directorio en el que se puede leer de las map
y los stats
archivos y de lectura / escritura en el data
archivo. El data
archivo se puede usar para almacenar cualquier información persistente que pueda resultarle útil.
El archivo de estadísticas
El stats
archivo contiene información sobre tus oponentes y tiene el siguiente formato. Cada jugador está representado en una fila separada. La primera columna es una identificación de jugador ( @
significa usted). La segunda columna es la salud de ese jugador.
1,9HP
@,10HP
3,9HP
4,2HP
El archivo de mapa
El map
archivo podría verse así ...
####################
# # # #
# 1 # # 2 #
# #
### ###
# #
# # #
# # ! #
# # #
# !#### #
# ####! #
# # #
# ! # #
# # #
# #
### ###
# #
# 3 # # @ #
# # # #
####################
... o esto...
######################################
# # 1 # @ #
# # # #! #
# # # #### #
# # # # # !#! #
# # # # # ##### #
# ### # #### # # #
# # #! ### # #
# ###### # # # ##### #
# #! # ###### # !# #
# ### # # # #
# # 2 # # 4 # #
######################################
... o esto...
###################
###!!!!!!#!!!!!!###
##! !##
#! 1 ! 2 !#
#! ! !#
#! !#
#! !#
#! !!! !#
## !! !!! !! ##
#! !!! !#
#! !#
#! !#
#! ! !#
#! 3 ! @ !#
##! !##
###!!!!!!#!!!!!!###
###################
... o podría verse totalmente diferente. De cualquier manera, los caracteres utilizados y su significado seguirán siendo los mismos:
#
Un muro, intransitable e impenetrable.1
,2
,3
... Un número que representa a un jugador enemigo. Estos números corresponden a la ID del jugador en elstats
archivo.!
Una trampa. Los scriptbots que se mueven a estos lugares morirán de inmediato.@
La ubicación de tu Scriptbot.Espacio abierto en el que puede moverse libremente.
Como se Juega
El script GameMaster asignará un orden de inicio aleatorio a los Scriptbots. Los Scriptbots se invocan en este orden mientras todavía están vivos. Los Scriptbots tienen 10 puntos de vida (HP) y comienzan con 10 puntos de energía (EP) cada turno, que pueden usar para moverse o atacar. Al comienzo de cada turno, un Scriptbot sanará por un HP, o se le otorgará un EP adicional si ya está en 10 HP (por lo tanto, la ejecución puede ser una estrategia viable a veces).
La batalla termina cuando solo un Scriptbot sobrevive o cuando han pasado 100 turnos. Si varios Scriptbots están vivos al final de una batalla, su lugar se determina según los siguientes criterios:
- La mayoría de la salud.
- La mayoría del daño infligido.
- La mayoría del daño recibido.
Scriptbot Input
GameMaster imprimirá el mapa de batalla en un archivo llamado desde el map
cual el Scriptbot tendrá acceso para leer. El mapa puede tomar cualquier forma, por lo que es importante que el Scriptbot pueda interpretarlo. Su Scriptbot se invocará con un parámetro que indica EP. Por ejemplo...
:> example_scriptbot.py 3
Se invocará al Scriptbot hasta que gaste todo su EP o un máximo de 10 11 veces. Los archivos de mapas y estadísticas se actualizan antes de cada invocación.
Salida de Scriptbot
Los scriptbots deberían mostrar sus acciones como robustas. Una lista de posibles acciones son las siguientes:
MOVE <DIRECTION> <DISTANCE>
Cuesta 1 EP por
DISTANCE
. ElMOVE
comando mueve su Scriptbot por el mapa. Si hay algo en el camino, como un muro u otro Scriptbot, GameMaster moverá su Scriptbot lo más lejos posible. Si se da unDISTANCE
EP mayor que el restante del Scriptbot, GameMaster moverá el Scriptbot hasta que se agote su EP.DIRECTION
puede ser cualquier dirección de la brújula deN
,E
,S
, oW
.PUSH <DIRECTION> <DISTANCE>
Cuesta 1 EP por
DISTANCE
. ElPUSH
comando permite que un Scriptbot mueva otro Scriptbot. El Scriptbot que emite el comando debe estar directamente al lado del Scriptbot que se está empujando. Ambos Scriptbots se moverán en la dirección indicada si no hay un objeto que bloquee el Scriptbot que se está empujando.DIRECTION
yDISTANCE
son los mismos que para elMOVE
comando.ATTACK <DIRECTION>
Cuesta un EP. El
ATTACK
comando causa 1 daño a cualquier Scriptbot directamente al lado del Scriptbot emisor y en la dirección especificada.DIRECTION
es lo mismo que para elMOVE
comando.PASS
Termina tu turno.
Idiomas soportados
Para mantener esto razonable para mí, aceptaré los siguientes idiomas:
- Java
- Node.js
- Pitón
- PHP
Está limitado a bibliotecas que normalmente se empaquetan con sus idiomas listos para usar. No me haga localizar bibliotecas oscuras para que su código funcione.
Sumisión y Juicio
¡Publique su código fuente Scriptbot a continuación y asígnele un nombre genial! Indique también la versión del idioma que utilizó. Todos los Scriptbots serán revisados por tonterías, así que por favor comente bien y no ofusque su código.
Puede enviar más de una entrada, pero hágalos totalmente únicos y no versiones de la misma entrada. Por ejemplo, es posible que desee codificar un bot Zerg Rush y un bot Gorilla Warfare. Esta bien. No publique Zerg Rush v1, Zerg Rush v2, etc.
El 7 de noviembre recogeré todas las respuestas y las que pasen la revisión inicial se agregarán a un grupo de torneos. El campeón obtiene la respuesta aceptada. El soporte ideal se muestra a continuación. Como es probable que no haya exactamente 16 entradas, algunos paréntesis pueden terminar siendo solo tres o incluso dos bots. Intentaré hacer que el soporte sea lo más justo posible. Cualquier favoritismo necesario (en el caso de que se necesite una semana de descanso, por ejemplo) se dará a los bots que se enviaron primero.
BOT01_
BOT02_|
BOT03_|____
BOT04_| |
|
BOT05_ |
BOT06_|___ |
BOT07_| | |
BOT08_| | |_BOT ?_
|___BOT ?_|
BOT09_ ___BOT ?_|___CHAMPION!
BOT10_| | _BOT ?_|
BOT11_|__| |
BOT12_| |
|
BOT13_ |
BOT14_|____|
BOT15_|
BOT16_|
Q&A
Estoy seguro de que me he perdido algunos detalles, ¡así que siéntase libre de hacer preguntas!
¿Podemos confiar en que un archivo de mapa siempre está rodeado por # símbolos? Si no, ¿qué sucede en caso de que un bot intente salir del mapa? - BrainSteel
Sí, el mapa siempre estará delimitado por # y su Scriptbot comenzará dentro de estos límites.
Si no hay un bot presente en la dirección especificada en un comando PUSH, ¿cómo funciona el comando? - BrainSteel
GameMaster no hará nada, se gastará cero EP y se volverá a llamar al Scriptbot.
¿El EP no utilizado se acumula? - feersum
No. Cada Scriptbot comenzará la ronda / turno con 10 EP. Cualquier EP no gastado se desperdiciará.
Creo que lo tengo, pero solo para aclarar: con los bots A y B, es el orden de los eventos A @ 10EP-> MOVER MAP_UPDATE B @ 10EP-> PUSH MAP_UPDATE A @ 9EP-> ATTACK MAP_UPDATE B @ 9EP-> ATTACK ..., o A @ 10EP-> MOVE A @ 9EP-> ATTACK ... MAP_UPDATE B @ 10EP-> PUSH B @ 9EP-> ATTACK ... MAP_UPDATE? En otras palabras, ¿todas las acciones en un bucle de consulta controlador-bot son atómicas? Si es así, ¿por qué el bucle? ¿Por qué no devolver un solo archivo con todas las acciones que deben completarse? De lo contrario, los bots tendrán que escribir sus propios archivos de estado para realizar un seguimiento de las secuencias de acción múltiple. El archivo de mapa / estadísticas solo será válido antes de la primera acción. - COTO
Su segundo ejemplo está cerca, pero no del todo bien. Durante un turno, el Scriptbot se invoca repetidamente hasta que se gasta su EP, o un máximo de 11 veces. Los archivos de mapas y estadísticas se actualizan antes de cada invocación. El bucle es útil en el caso de que un bot produzca resultados no válidos. GameMaster se ocupará de la salida no válida e involucrará nuevamente al bot, dándole al bot la oportunidad de corregir su error.
¿lanzarán el script GameMaster para probar? - IchBinKeinBaum
El script GameMaster no se lanzará. Te animo a que crees un mapa y un archivo de estadísticas para probar el comportamiento de tu bot.
Si el robot A empuja al robot B hacia una trampa, ¿se le atribuye al robot A puntos de "daño infligido" igual a la salud actual del robot B? - Mike Sweeney
Si esa es una buena idea. A un bot se le otorgarán puntos de daño iguales a la salud de cualquier bot que empuje a una trampa.
#
y su Scriptbot comenzará dentro de estos límites.
map
archivo siempre está rodeado de#
símbolos? Si no, ¿qué sucede en caso de que un bot intente salir del mapa?