Gomoku o Five in a row es un juego de mesa jugado por dos jugadores en una cuadrícula con piedras blancas y negras. Quien sea capaz de colocar piedras en una fila (horizontal, vertical o diagonal) gana el juego.5
Reglas
En este KoTH jugaremos la regla Swap2, lo que significa que un juego consta de dos fases: en la fase inicial, los dos jugadores determinan quién va primero / quién juega negro, después de eso colocarán una piedra cada ronda comenzando con el jugador quien escogió negro.
Fase inicial
Deje que los jugadores sean A y B, y A abrirá el juego:
- A coloca dos piedras negras y una blanca en el tablero
- B puede elegir uno de los siguientes tres movimientos:
- el jugador B decide jugar negro: la fase inicial ha terminado
- el jugador B decide colocar una piedra blanca y juega blanco: la fase inicial ha terminado
- el jugador B decide jugar una piedra negra y una blanca: A elige el color
Fase del juego
Cada jugador coloca una piedra de su color en el tablero, comenzando con el jugador que juega negro, esto continúa hasta que no haya más espacios libres para jugar (en cuyo caso es un empate) o un jugador logra jugar piedras en un fila (en cuyo caso ese jugador gana).
Una fila significa horizontal, vertical o diagonal. Una victoria es una victoria: no importa si el jugador logró anotar más de una fila.
Reglas del juego KoTH
- cada jugador juega uno contra el otro dos veces:
- inicialmente se decidirá al azar quién va primero
- en el próximo juego el jugador que jugó el último va primero
- una victoria vale 2 puntos, un empate 1 y una derrota 0
- el objetivo es anotar tantos puntos como sea posible
Su bot
Para que este desafío sea accesible para tantos idiomas como sea posible, la entrada / salida se realizará mediante stdin / stdout (basado en línea). El programa de jueces le indicará a su programa imprimiendo una línea en la entrada estándar de su bot y su bot imprimirá una línea en la salida estándar .
Una vez que reciba un EXIT
mensaje, se le dará medio segundo para terminar de escribir en los archivos antes de que el juez cierre el proceso.
Aleatoriedad
Para que los torneos sean verificables, el juez utiliza la asignación al azar sembrada y su bot también debe hacerlo, por la misma razón. Al bot se le dará una semilla a través de un argumento de línea de comandos que debe usar, consulte la siguiente sección.
Argumentos
El bot recibe dos argumentos de línea de comandos:
- nombre del oponente
- semilla de aleatoriedad
Estado del usuario
Debido a que su programa siempre comenzará de nuevo para cada juego, necesitará usar archivos para conservar cualquier información que desee conservar. Se le permite leer / escribir cualquier archivo o crear / eliminar subcarpetas en su directorio actual. ¡No está permitido acceder a ningún archivo en ningún directorio principal!
Formato de entrada / salida
BOARD
((X,Y),COLOR)
X
Y
COLOR
"B"
"W"
SP
XY
(X,Y)
|
En la fase inicial hay tres tipos diferentes de mensajes:
Prompt (judge) -> Answer (bot)
"A" SP "[]" -> XY XY XY
"B" SP BOARD -> "B" | "W" SP XY | XY XY
"C" SP BOARD -> "B" | "W"
- El primer mensaje pide tres tuplas, las dos primeras serán las posiciones de las piedras negras y la tercera la posición de las blancas.
- El segundo mensaje pide:
"B"
-> elegir negro"W" SP XY
-> elige blanco y coloca una piedra blanca enXY
XY XY
-> coloca dos piedras (la primera negra y la segunda blanca)
- El último solo pregunta qué color quieres jugar
Después de eso, comenzará el juego normal y los mensajes serán mucho más simples.
N BOARD -> XY
N
XY
Hay un mensaje adicional que no espera una respuesta.
"EXIT" SP NAME | "EXIT TIE"
donde NAME
está el nombre del bot que ganó. El segundo mensaje se enviará si el juego termina debido a que nadie gana y no hay más espacios libres para colocar piedras (esto implica que su bot no puede ser nombrado TIE
).
Formateo
Dado que los mensajes del bot pueden decodificarse sin espacios, todos los espacios serán ignorados (por ejemplo, (0 , 0) (0,12)
se trata de la misma manera que (0,0)(0,12)
). Los mensajes del juez solo contienen un espacio para separar diferentes secciones (es decir, como se señaló anteriormente con SP
), lo que le permite dividir la línea en espacios.
Cualquier respuesta no válida resultará en una pérdida de esa ronda (aún recibirá un EXIT
mensaje), vea las reglas.
Ejemplo
Aquí hay algunos ejemplos de mensajes reales:
A []
B [((0,0),"B"),((0,1),"W"),((14,14),"B")]
1 [((0,0),"B"),((0,1),"W"),((1,0),"B"),((1,1),"W"),((14,14),"B")]
Juez
Puede encontrar el programa de jueces aquí : para agregarle un bot, simplemente cree una nueva carpeta en la bots
carpeta, coloque sus archivos allí y agregue un archivo que meta
contenga nombre , comando , argumentos y una marca 0/1 (deshabilitar / habilitar stderr ) cada uno En una línea separada.
Para ejecutar un torneo solo debes ejecutar ./gomoku
y depurar una sola ejecución de bot ./gomoku -d BOT
.
Nota: Puede encontrar más información sobre cómo configurar y usar el juez en el repositorio de Github. También hay tres bots de ejemplo ( Haskell , Python y JavaScript ).
Reglas
- en cada cambio de bot * el torneo se volverá a ejecutar y el jugador con más puntos gana (el desempate es la primera presentación)
- puedes enviar más de un bot siempre que no jueguen una estrategia común
- no se le permite tocar archivos fuera de su directorio (por ejemplo, manipular los archivos de otros reproductores)
- Si su bot se bloquea o envía una respuesta no válida, el juego actual se termina y usted pierde esa ronda.
- Si bien el juez (actualmente) no aplica un límite de tiempo por ronda, se le recomienda que mantenga el tiempo bajo, ya que podría no ser factible probar todas las presentaciones **
- abusar de los errores en el programa de jueces cuenta como escapatoria
* ¡Se le recomienda usar Github para enviar su bot por separado directamente en el bots
directorio (y posiblemente modificarlo util.sh
)!
** En caso de que se convierta en un problema, se le notificará, diría que cualquier cosa por debajo de 500 ms (¡eso es mucho!) Debería estar bien por ahora.
Charla
Si tiene preguntas o desea hablar sobre este KoTH, ¡siéntase libre de unirse al Chat !
Respuestas:
KaitoBot
Utiliza una implementación muy cruda de los principios MiniMax. La profundidad de la búsqueda también es muy baja, porque de lo contrario lleva demasiado tiempo.
Podría editar para mejorar más tarde.
También trata de jugar al negro si es posible, porque Wikipedia parece decir que el negro tiene una ventaja.
Nunca he jugado a Gomoku, así que configuré las primeras tres piedras al azar por falta de una mejor idea.
EDICIONES: hizo que la semilla cambiara dinámicamente porque, de lo contrario, cuando las semillas superaran los 2 ^ 52, JavaScript no podría manejar el incremento correctamente
fuente