Dagaz: el fin de la soledad

Felicidad para todos, para nada
y que nadie se ofenda!

A. y B. Strugatsky "Picnic al margen"


Los bots, no importa qué tan buenos sean, son un mal sustituto de los jugadores en vivo. Si el bot juega mal, esto no es interesante. Si es fuerte, es insultante y nuevamente no es interesante. Es muy difícil mantener el equilibrio (más aún porque es individual para cada jugador). Durante mucho tiempo iba a implementar un juego de red, pero todo dependía de la necesidad de mantener mi propio servidor. Afortunadamente, la decisión vino desde un ángulo inesperado.

Ed van Zon es una persona con la que he estado en contacto durante bastante tiempo. Dio la casualidad de que fue él quien atrapó la bandera caída de Zillions , cuando los desarrolladores (Jeff Mallett y Mark Lefler) de repente perdieron interés en el desarrollo del proyecto. Entonces, todos estos juegos son publicados en el sitio por sus fuerzas. Y también, él y Christian Freeling se dedican al apoyo y desarrollo de su propio sitio (por supuesto, también sobre juegos de mesa):


Pero todo esto fue un dicho. La historia comienza con el hecho de que en este sitio hay un hoyo (o más bien, un hoyo , pero este no es el punto), en el que los jugadores en vivo pueden jugar por correspondencia. Más bien, podrían hacerlo, hasta que la tecnología de los applets de Java se volviera obsoleta. Recientemente, a medida que su uso por simples mortales se ha vuelto difícil, Ed ha estado pensando en soluciones más modernas. Y luego aparecí, junto con mi proyecto .


Después de un breve recorrido de entrenamiento, por mi parte, Ed, durante literalmente un par de meses, instaló tres docenas de juegos nuevos en el motor Dagaz y los publicó en el sitio. Permítame recordarle que la licencia MIT (como yo), admite tales acciones en todos los sentidos.

Hubo, sin embargo, un problema.
Se entendió que los jugadores podían jugar todos estos juegos entre ellos, y no solo con bots, sino que Dagaz, en su implementación inicial, no brindó esa oportunidad. Tuve que pensar rápidamente en algo. Afortunadamente, ya tenía un administrador de sesión que me permitía retroceder moviendo por error. Como beneficio adicional, guardó la historia del juego en RAM y se decidió usar esto.

Guardar
SessionManager.prototype.save = function() { if (_.isUndefined(this.current) || _.isUndefined(this.current.board)) return null; var states = []; var board = this.current.board; while (board.parent !== null) { states.push(board); board = board.parent; } var r = "("; while (states.length > 0) { var board = states.pop(); r = r + ";" + Dagaz.Model.playerToString(board.parent.player); r = r + "[" + Dagaz.Model.moveToString(board.move) + "]"; } r = r + ")"; return r; } 

y cargando
 SessionManager.prototype.load = function(sgf) { var res = Dagaz.Model.parseSgf(sgf); this.states = []; delete this.current; var board = Dagaz.Model.getInitBoard(); this.addState(Dagaz.Model.createMove(), board); for (var i = 0; i < res.length; i++) { var p = res[i].name; if (p != Dagaz.Model.playerToString(board.player)) return false; if (res[i].arg.length != 1) return false; var move = this.locateMove(board, res[i].arg[0]); if (move === null) return false; board = board.apply(move); this.addState(move, board); } this.controller.setBoard(board); return true; } 

Lo hicieron solo unas pocas docenas de líneas (ciertamente no creo que el analizador de formato SGF en sí mismo, cualquiera pueda verlo aquí ). Por cierto, tanto SGF como el administrador de la sesión apoyan trabajar con el árbol, y no solo con la historia del juego, sino que para nuestros propósitos actuales esto no era necesario.

Como el primer juego de Dagaz, con la posibilidad de jugar en la red, quería elegir algo original (especialmente porque Ed ya tenía Checkers , Chess and Go ). La elección recayó en el volumen de negocios . Este juego, en muchos aspectos similar al ajedrez, fue inventado recientemente por Lúcio José Patrocínio Filho.


Las figuras aquí son prefabricadas. El anillo más grande se mueve como un peón de ajedrez , el del medio como un elefante , y el núcleo es una torre . La combinación de una torre y un elefante le da a la reina (lo cual es bastante lógico), y los dos anillos le dan al caballero del ajedrez . Las tres partes juntas forman un castillo, la figura principal que debe protegerse. Vale la pena decir aquí que solo una, la parte más externa, siempre se mueve. Por lo tanto, el anillo exterior del castillo, en cualquier momento, puede moverse con el peón (incluido un salto por el campo), pero el castillo será destruido.

Hay otro problema que aún no se ha resuelto.
Habiendo perdido el último castillo, el jugador pierde. De hecho, el jugador no puede perder todos los bloqueos, ya que el juego tiene las reglas de jaque y jaque mate . Los castillos no pueden dejarse bajo ataque, sino solo con la condición de que todos sean atacados. Además, la intriga en el juego se agrega por el hecho de que se pueden crear nuevas figuras (y también castillos) a partir de componentes a lo largo del camino (incluso a partir del material del oponente). Todo esto hace que la verificación de check and checkmate sea una tarea muy difícil y aquí hay un ejemplo con el que todavía no puede hacer frente:


De hecho, no hay alfombra, pero es bastante difícil. El campo D1 es atacado por un elefante en E2 y este es el último castillo. Los dorados pueden construir un segundo castillo al pasar la torre de C3 a C4, ¡pero este campo también es atacado! El truco es que ambos campos son atacados por la misma figura, ¡y ella no puede comer ambas cerraduras de una vez! Lúcio descubrió este error recientemente y esto es algo en lo que trabajaré en el futuro cercano.

No hay enroques y enfrentamientos en el juego, y de hecho, la rotación no es muy similar al Ajedrez. Hay muchos reyes en el juego, pero no pueden moverse (en cualquier caso, sin destrucción), y los caballos y las reinas son "desechables", ya que al moverse, el anillo exterior destruye la figura. En mi opinión, el juego parece bastante interesante, aunque completamente inexplorado. Puedes jugar aquí:


Para jugar en la red, por supuesto, debes registrarte (el juego es por correspondencia) y enviarle a alguien un "Desafío". Si quieres jugar con el bot (o simplemente mover piezas en el tablero ), no es necesario registrarse. Sin embargo, en este modo, el juego no diferirá mucho del publicado en GitHub . Además, no es necesario registrarse para monitorear juegos actuales o jugados anteriormente.

Como un bono
Dagaz admite otro modo de juego:


Entonces, aquellos que lo deseen pueden intentar jugar a ciegas (esta vez, solo contra el bot).

Las ganancias / pérdidas de facturación aún no se mantienen, pero todo está en sus manos. Si el juego es popular, Ed prometió vincularlo con una calificación. Y, por último, una pequeña encuesta sobre el tema del desarrollo futuro del proyecto:

Source: https://habr.com/ru/post/470065/


All Articles