Probablemente conozcas Conway's Game of Life , el famoso autómata celular inventado por el matemático John Conway. La vida es un conjunto de reglas que, juntas, le permiten simular un tablero de celdas bidimensional. Las reglas deciden qué células en el tablero viven y cuáles mueren. Con un poco de imaginación, se podría decir que la vida es un juego de cero jugadores: un juego con el objetivo de encontrar patrones con un comportamiento interesante, como el famoso planeador.
Un juego de cero jugadores ... Hasta hoy. Debes escribir un programa que juegue el Juego de la Vida, y lo juegue para ganar, al estilo King of the Hill. Tu oponente (singular), por supuesto, intenta hacer lo mismo. El ganador es el último bot con células vivas o el jugador con más células vivas después de 10000 generaciones.
Reglas del juego
Las reglas son casi las mismas que la vida normal (B3 / S23):
- Una célula viva con menos de dos vecinos amigos muere de hambre.
- Sobrevive una celda viva con dos o tres vecinos amigos.
- Una célula viva con más de tres vecinos amigos muere por sobrepoblación.
- Una celda muerta con exactamente tres vecinos del mismo jugador cobra vida para luchar por ese jugador siempre que no haya vecinos enemigos .
... pero después de cada generación, tanto tú como tu oponente tienen la oportunidad de intervenir. Puedes despertar hasta un máximo de 30 células para luchar por ti. (El servidor decide quién va primero).
El tablero es un cuadrado de celdas (x, y). Todos los cuadrados están inicialmente muertos. Las fronteras no se envuelven (este no es un mundo en forma de toro) y están permanentemente muertas.
Este es un concurso en el espíritu de Battlebots y Core Wars . Hay un servidor central que ejecutará bots y se puede encontrar aquí
Protocolo
El servidor de arena habla un protocolo JSON simple comunicado a través de argv
Donde valores es una cadena codificada JSON
y_size
: el máximo y coords de azulejos antes de que desaparezcanx_size
: el máximo x coords de fichas antes de que desaparezcantick_id
: el número de marca actualboard
: un diccionario con claves en la forma '(y, x)' y valores en la formabot_id
(int)bot_id
: las fichas en el tablero con esta identificación son tuyas
Ejemplo:
{"y_size":2000,"x_size":2000,"board":{},"bot_id":1,"tick_id":1}
Diciéndole al servidor su elección:
- Envíe al servidor una lista de mosaicos para cambiar a su color.
- Solo aquellos que estén vacíos serán cambiados
- Formato de lista de coordenadas anidadas
[[0,0], [0,1], [100,22]...]
NOTA: su bot no tiene que actualizar los mosaicos en absoluto: el servidor realiza la actualización por sí mismo
Normas de competencia
- Si su implementación no sigue el protocolo, se perderá el turno; El servidor asumirá que no hay cambios en el estado.
- No está permitido aprovechar deliberadamente una falla en el servidor de arena.
- Haz que tu IA decida sobre movimientos en un tiempo razonable. Envíe su próximo movimiento lo más rápido posible.
- Finalmente, por favor sea amable con el servidor. Está ahí para su disfrute.
- No seguir estas reglas puede conducir a la descalificación.
- En caso de empate, ambos jugadores tienen 1 victoria añadida a su total.
Ejecutando el controlador usted mismo
La fuente del controlador se puede encontrar aquí . Hay 2 formas de ejecutar el controlador:
- Modo de competencia (terminal)
- Configurar con
python3 get_answers.py
- Realiza una competencia all v all con cada bot enfrentándolo entre sí.
- Configurar con
- Modo de prueba (GUI)
- correr
python3 nice_gui.py
- Hacer clic
Pull Answers
- Si desea agregar su propia respuesta para probarlo antes de publicar, haga clic
File -> Add manual answer
y busque el archivo y elija el idioma en el que está escrito. - Si su idioma no está presente, hágame ping e intentaré instalarlo en el servidor en el que lo ejecutaré (¡las instrucciones de instalación y ejecución también serían buenas!)
- Elige 2 bots para enfrentarse entre sí
- Hacer clic
Run
- Mira el juego...
- correr
- Instalación
- Requiere python3
- get_answers requiere bs4 y html5lib
- el controlador requiere una forma de ejecutar archivos .sh (MinGW en Windows)
Puntuación
El bot con la mayor cantidad de victorias a partir del 12/07/2016
(12 de julio)14/07/2016
(14 de julio, no pudo resolver cómo ejecutar un bot) gana.
Puede solicitar ayuda con el controlador / gui en esta sala de chat
Esta pregunta ha estado en desarrollo desde 2014 y fue la pregunta más votada en el sandbox. Un agradecimiento especial a Wander Nauta (autor original y concepto), PPCG Chat (comentarios y ayuda) y cualquiera que haya comentado en la publicación de sandbox (más comentarios).
Respuestas:
Python 3, Exploder
Coloca pequeños explosores alrededor del lugar, sin importar si ya hay un bloque allí.
fuente
Ruby, interruptingBlockMaker
En lugar de inicializar planeadores como el TrainingBot, intenta crear una máquina de interruptores de creación de bloques de 5x5 como se menciona en Wikipedia en un punto aleatorio en el laberinto. Luego, con sus activaciones restantes, solo encuentra puntos enemigos y trata de acribillar el área cercana con sus células en un intento de interrumpir su crecimiento y posiblemente estropear sus patrones. ¡Tus células morirán en la próxima generación, pero tal vez también detuvieron algo de crecimiento para ralentizar a tu oponente!
v2: Optimizado ligeramente (?) para intentar minimizar los tiempos de espera.
v3: Código de interrupción optimizado para muestrear previamente un subconjunto de bloques activos antes de rechazar nuestras propias ubicaciones de celdas, para evitar tiempos de espera adicionales a costa de cierta efectividad en los ataques de celdas de interrupción.
fuente
bot_score
muestran cuántas victorias tiene cada bot contra otros botsPython 2, TrainingBot
¡Porque todos necesitan uno de estos!
fuente
Java, Troll Bot
Troll Bot lo ha pensado y se da cuenta de que NO le importa el enemigo. De hecho, simplemente envía mensajes a estas fábricas para producir más de sus muchachos al azar en todo el mapa. Después de un tiempo se dio cuenta de que cualquier celda adicional se usa mejor en grupos. ¡Estos bloques de cuatro celdas se unirán y detendrán a los planeadores en su camino! No cree que solo pelea. También es un gran defensor de la programación orientada a objetos detallada. El troll también asume que las coordenadas están en el formato y, x, y está pidiendo que lo prueben. Simplemente póngalo en un archivo llamado "TrollBot.java", ¡y estará listo!
fuente
Python 3, RandomBot
Este bot tiene problemas para tomar decisiones inteligentes, pero al menos sabe que no debe tratar de colocar las cosas por encima de otras. Al azar creará planeadores, botes, C / 2 Orthagonal s y bloques de 2x2 con varias orientaciones, asegurando que cuando se colocan no se superpongan con otra cosa, aliado o enemigo.
Este bot no se probó, ya que recibo todo tipo de errores cuando intento ejecutar la GUI. Además, utilicé TrainingBot como base y simplemente edité, por lo que cualquier similitud en el código probablemente se deba a eso.
fuente
print(sys.argv[1])
línea 3, que desordena la salida (el simulador solo espera la cadena de coordenadas que desea despertar). Además, a la última línea de su programa le falta un par de cierre.html5lib
, luego no encontró la carpeta que contenía todos los bots (tuve que cambiar el código para ambos), y desde entonces la ejecución de cualquiera de los bots de Python ha resultado en un código de retorno distinto de 0 1.Python, GuyWithAGun
Es un chico, tiene una pistola; él está loco. Simplemente arroja pistolas planeadoras en todas partes sin tener en cuenta lo que alguien más está haciendo
fuente
Python 3, SquareBot
Pone cuadrados en todas partes, tal vez
Los cuadrados son objetos estáticos en la vida, no se mueven. Entonces, si coloco suficientes objetos inertes alrededor del lugar, los planeadores y las explosiones que otros crean posiblemente se bloquearán, o al menos se humedecerán.
-Adaptado de TrainingBot
Aunque tengo problemas para probarlo
fuente