El lenguaje de programación de Zillions-of-Games utiliza expresiones S. Las reglas se almacenan en un archivo de texto con la extensión ".zrf" (archivo de reglas de Zillions). Los usuarios pueden crear sus propios archivos ZRF y hacer que la IA de Zillions-of-Games juegue el juego que acaban de crear. La definición de juegos suele contener el siguiente patrón: [5]
Título del juego . Un ZRF puede contener más de un juego y el título del juego permite al usuario seleccionar un juego determinado.
Descripción, historia y estrategia del juego . Se trata de un texto que se muestra al usuario cuando lo solicita para explicar las reglas del juego, la historia y dar consejos generales sobre el juego.
Jugadores . Esta es una lista de los nombres de los jugadores que se utilizan en el juego. Por ejemplo, en ajedrez sería Blanco , Negro . El nombre del jugador se utiliza en otros lugares, por ejemplo, en las definiciones de la posición inicial o del objetivo del juego. Puede haber un solo jugador (por ejemplo, para los rompecabezas), dos o más.
Orden de turnos Esto especifica el orden de movimientos que realizan los jugadores. En el ejemplo anterior, el jugador X comienza, el jugador O mueve y luego se repite toda la secuencia. La definición de orden de turno puede ser más compleja, por ejemplo, para ajedrez equilibrado de doble movimiento sería: (orden de turno Blancos repetir Negro Negro Blanco Blanco) , que especifica el siguiente orden de movimientos: Blancos, Negros, Negros, Blancos, Blancos, Negros, Negros, Blancos, Blancos, etc.
Definición del tablero. Esta sección especifica la geometría del tablero de juego, las posiciones separadas del tablero y las conexiones entre ellas. La definición del tablero en el ejemplo anterior especifica primero una imagen de mapa de bits que se utilizará para el tablero. Se define un tablero bidimensional utilizando las coordenadas de píxeles del mapa de bits. La definición ("arriba/medio/abajo" (0 112)) especifica las notaciones que se utilizarán para las filas, así como un desplazamiento en píxeles entre filas. La notación de texto se utiliza en la lista de movimientos, así como para guardar el juego jugado en el archivo ".zsg" (juego guardado de Zillions). Las conexiones entre las posiciones del tablero se especifican en la declaración (direcciones ...) . El ejemplo anterior define cuatro direcciones: n (norte): un paso hacia arriba, e (este): un paso hacia la derecha, nw : diagonalmente arriba a la izquierda y ne : diagonalmente arriba a la derecha. Las direcciones se utilizan en las definiciones de movimientos, así como en las definiciones de objetivos del juego.
Definición de piezas. Define las piezas que se utilizan en el juego, sus nombres y cómo se mueven. En el ejemplo anterior se define una pieza, Man , que se puede colocar en cualquier posición vacía del tablero. También se especifican dos imágenes de mapa de bits para los jugadores X y O.
Configuración del tablero. Especifica la posición inicial del juego. El ejemplo anterior define que el tablero está vacío inicialmente y que cada lado tiene 5 piezas fuera del tablero, que se pueden dejar caer.
Objetivo del juego. Condición en la que uno de los jugadores gana o cuando se produce un empate. En el juego de tres en raya, la condición de victoria (tres en raya) se define como configuraciones relativas de las piezas, utilizando las instrucciones n , e , ne y nw de la definición del tablero.
Poco después de su lanzamiento al mercado a finales de 1998, los usuarios de Zillions of Games comenzaron a programar nuevos juegos y acertijos para él, creando muchos de ellos ellos mismos. Pronto comenzaron a aparecer dos grandes colecciones de archivos de reglas de Zillions (ZRF). Una estaba en el sitio web de Zillions-of-Games y la otra en el sitio web de Chess Variant Pages . [6] La primera recopilaba todo tipo de ZRF, mientras que la segunda se centraba en los ZRF para variantes del ajedrez . En noviembre de 2017, la interfaz de ZILLIONS tenía 2577 ZRF, creados por 462 autores de ZRF, [7] y la colección de Chess Variant Pages tenía 794 ZRF de variantes del ajedrez.
Millones de juegos se pueden utilizar para lo siguiente:
Jugando a cualquiera de los juegos o rompecabezas que vienen con él.
Jugar a cualquiera de los juegos y puzzles gratuitos que han sido programados por los usuarios.
Jugar juegos con usuarios remotos a través de Internet o una conexión de acceso telefónico.
Jugar juegos enviándose archivos ZSG por correo electrónico de ida y vuelta.
Programarlo para jugar nuevos juegos y rompecabezas.
Usándolo como herramienta de desarrollo para la creación de nuevos juegos y rompecabezas.
Probar nuevos juegos para comprobar si son empates o no y otras cualidades haciendo que Zillions los juegue contra sí mismo.
Resolver acertijos o asegurarse de que los acertijos recién creados puedan resolverse.
Creación de diagramas que se puedan recortar a partir de capturas de pantalla.
Capacidades
Zillions representa tableros y piezas con imágenes de mapa de bits; el usuario puede reasignarlas. Los tableros pueden ser gráficos dirigidos arbitrarios, pero los tableros estándar con forma de cuadrícula son más fáciles de producir y tienen soporte integrado para detectar la colinealidad . Las condiciones de victoria, derrota y empate disponibles incluyen jaque mate, ahogamiento, repetición, captura de piezas, configuración absoluta, configuración relativa y varios tipos de recuento de piezas. Estas permiten la creación de una variedad de juegos y rompecabezas diferentes.
Además de definir cómo se mueven las piezas, Zillions puede definir cómo se pueden soltar las piezas. Esto sirve para introducir nuevas piezas en un juego. No es útil para el shogi, que "suelta" las piezas capturadas almacenadas en los laterales del tablero. Es útil para juegos como Go, Reversi y Tic-Tac-Toe, que permiten a los usuarios añadir habitualmente nuevas piezas al tablero. Al igual que con el movimiento de las piezas, esto se define algorítmicamente y puede ser algo tan sencillo como dejar que una nueva pieza caiga solo en un espacio vacío o seguir reglas más complejas.
Desde la versión 2.0, Zillions tiene la capacidad adicional de aplicar reglas de captura máxima (usadas en algunas versiones de Checkers ) y un motor de juego Go con todas las funciones.
Zillions incluye un "jugador aleatorio" que selecciona aleatoriamente entre sus movimientos disponibles; esto puede usarse para simular dados en juegos de carreras y similares al backgammon . [4]
Si es necesario, el motor de IA estándar puede reemplazarse por motores creados por el usuario. Estos motores pueden utilizar libros de apertura u otras funciones que no están disponibles para la IA estándar. [8]
Limitaciones
A pesar de su versatilidad, Zillions of Games tiene una serie de limitaciones no triviales:
Zillions Of Games está diseñado para jugar exclusivamente a juegos con información perfecta . Esto hace que sea de poca o ninguna utilidad para jugar de manera justa a juegos con información imperfecta u oculta contra la IA, como juegos de cartas o juegos de mesa con valores de piezas ocultos como Stratego . En cambio, el programa utilizará automáticamente toda la información disponible para sí mismo, incluidas las cartas en la baraja y las cartas en manos de todos los demás jugadores. Los juegos aún pueden ser jugados por jugadores humanos, aunque no hay soporte para revelar información selectivamente a un solo jugador. [4]
Su lenguaje de programación carece de soporte para operaciones aritméticas, funciones y variables más allá de algunos indicadores booleanos. [4]
El motor no tiene soporte integrado para objetivos basados en conexión como en Hex ; por lo tanto, estos objetivos deben implementarse manualmente. [4]
Tampoco hay soporte para tener múltiples piezas por ubicación, o para piezas que cubran múltiples ubicaciones a la vez. Por lo tanto, se requieren soluciones alternativas complicadas para juegos que necesitan estas características, como Mancala , Laska o Quoridor . [4]
Como ocurre con la mayoría de los programas de IA para juegos, el motor predeterminado funciona mal en juegos con grandes factores de ramificación, como el shogi . [4]
En algunos aspectos vitales, el programa es demasiado restrictivo en lo que permite.
Aunque puede reconocer la repetición, el único tipo que puede reconocer es la repetición triple .
Aunque puede comprobar varias condiciones de victoria, derrota y tablas al final de un movimiento, no puede comprobar ninguna de ellas al evaluar los posibles movimientos de una pieza. En consecuencia, en el shogi, por ejemplo, no se puede programar para que siempre aplique con precisión la regla contra el jaque mate a un rey con la caída de un peón.
Muchas variantes de ajedrez para varios jugadores no se pueden jugar porque el juego se detendrá inmediatamente cuando el primer jugador reciba jaque mate o quede ahogado .
En algunos casos, la calidad del juego se ve comprometida debido a que la IA calcula automáticamente los valores de las piezas de manera incorrecta y no hay ninguna opción disponible para anularlos manualmente con valores de piezas precisos.
Muchas de estas limitaciones se pueden evitar utilizando extensiones como Axiom Development Kit. [9]
Referencias
^ Generación de contenido procedimental basado en búsquedas: una taxonomía y un estudio , Julian Togelius , Georgios N. Yannakakis , Kenneth O. Stanley , Cameron Browne, IEEE Transactions on Computational Intelligence and AI in Games 3(3):172 - 186 · Octubre de 2011 doi :10.1109/TCIAIG.2011.2148116
^ Asociación Alemana Chu Shogi
^ David NL Levy (2006). Robots sin límites . AK Peters, Ltd. ISBN1-56881-239-6.
^ abcdefg "¿Puede Zillions soportar este juego?" Preguntas frecuentes de Zillions Development Corp.
^ La especificación completa del lenguaje de script de Zillions-of-Games se puede encontrar en la Referencia del lenguaje de Zillions , que se encuentra en la instalación de Zillions .
^ Millones de partidas: colección de variantes de ajedrez de páginas de variantes de ajedrez para Millones de partidas
^ Juegos complementarios gratuitos para Zillions-of-Games
^ Capacidades de Zillions, Capacidades agregadas en la versión 2.0
^ Greg Schmidt (16 de abril de 2016). «Axiom Development Kit» . Consultado el 4 de agosto de 2016 .