Dagaz: O Fim da Solidão

Felicidade para todos, por nada
e não deixe ninguém ficar ofendido!

A. e B. Strugatsky "Piquenique à margem"


Os bots, por melhores que sejam, são um mau substituto para os jogadores ao vivo. Se o bot jogar mal - isso não é interessante. Se é forte, é um insulto e, novamente, não é interessante. É muito difícil manter o equilíbrio (ainda mais porque é individual para cada jogador). Durante muito tempo eu estava implementando um jogo em rede, mas tudo dependia da necessidade de manter meu próprio servidor. Felizmente, a decisão veio de um ângulo inesperado.

Ed van Zon é uma pessoa com quem estou em contato há algum tempo. Aconteceu que foi ele quem capturou a bandeira de queda do Zillions , quando os desenvolvedores (Jeff Mallett e Mark Lefler) de repente perderam o interesse no desenvolvimento do projeto. Então, todos esses jogos são publicados no site por suas forças. Além disso, ele e Christian Freeling estão envolvidos no suporte e desenvolvimento de seu próprio site (é claro, também sobre jogos de tabuleiro):


Mas tudo isso foi um ditado. A história começa com o fato de que neste site existe um buraco (ou melhor, um buraco , mas esse não é o ponto), no qual jogadores ao vivo podem jogar por correspondência. Em vez disso, eles poderiam, até que a tecnologia dos applets Java se tornasse obsoleta. Recentemente, como seu uso por meros mortais se tornou difícil, Ed tem pensado em soluções mais modernas. E então eu apareci, junto com o meu projeto .


Depois de uma turnê de treinamento muito curta, da minha parte, Ed, por apenas alguns meses, conseguiu três dúzias de novos jogos no mecanismo Dagaz e os publicou no site. Deixe-me lembrá-lo de que a licença do MIT (como eu) suporta essas ações de todas as formas.

Havia, no entanto, um problema.
Entendeu-se que os jogadores podiam jogar todos esses jogos entre si, e não apenas com bots, mas o Dagaz, em sua implementação inicial, não ofereceu essa oportunidade. Eu tive que inventar algo rapidamente. Felizmente, eu já tinha um gerente de sessão que me permitia reverter movimentos feitos por engano. Como bônus, ele salvou o histórico do jogo na RAM e foi decidido usá-lo.

Salvando
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; } 

e carregamento
 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; } 

Eles fizeram isso apenas algumas dezenas de linhas (eu certamente não acho que o analisador de formato SGF em si, qualquer um pode vê-lo aqui ). A propósito, tanto o SGF quanto o gerente de sessão apóiam o trabalho com a árvore, e não apenas com o histórico do jogo, mas para nossos propósitos atuais isso não era necessário.

Como o primeiro jogo da Dagaz, com a possibilidade de jogar na rede, eu queria escolher algo original (principalmente porque o Ed já tinha Damas , Xadrez e Go ). A escolha recaiu sobre o volume de negócios . Esse jogo, em muitos aspectos semelhante ao xadrez, foi recentemente inventado por Lúcio José Patrocínio Filho.


As figuras aqui são pré-fabricadas. O anel maior se move como um peão de xadrez , o do meio como um elefante , e o núcleo é uma torre . A combinação de uma torre e um elefante dá à rainha (o que é bastante lógico), e os dois anéis dão ao cavaleiro do xadrez . Todas as três partes juntas formam um castelo - a figura principal que precisa ser protegida. Vale dizer aqui que apenas uma, a parte mais externa, sempre se move. Assim, o anel externo do castelo, a qualquer momento, pode se mover com o peão (incluindo um salto no campo), mas o castelo será destruído.

Há outro problema que ainda não foi resolvido.
Tendo perdido o último castelo, o jogador perde. De fato, o jogador não pode perder todos os bloqueios, já que o jogo tem as regras de check e checkmate . Castelos não podem ser deixados sob ataque, mas apenas com a condição de que todos sejam atacados. Além disso, a intriga no jogo é adicionada pelo fato de que novas figuras (e castelos também) podem ser criadas a partir de componentes ao longo do caminho (inclusive do material do oponente). Tudo isso torna a verificação do cheque e do xeque-mate uma tarefa muito difícil e aqui está um exemplo com o qual ela ainda não consegue lidar:


De fato, não há tapete, mas é bastante difícil. O campo D1 é atacado por um elefante no E2 e este é o último castelo. Os dourados podem construir um segundo castelo subindo a torre de C3 para C4, mas esse campo também é atacado! O truque é que ambos os campos são atacados pela mesma figura e ela não pode comer os dois cachos de uma só vez! Lúcio descobriu esse erro recentemente e é algo em que trabalharei no futuro próximo.

Não há jogo de castelos e corredores no jogo e, de fato, a rotatividade não é muito semelhante ao xadrez. Existem muitos reis no jogo, mas eles não podem se mover (em qualquer caso, sem destruição), e os cavalos e rainhas são "descartáveis", pois, ao se mover, o anel externo destrói a figura. Na minha opinião, o jogo parece bastante interessante, embora completamente inexplorado. Você pode jogar aqui:


Para jogar na rede, é claro, você precisa se registrar (o jogo é por correspondência) e enviar a alguém um "Desafio". Se você quiser brincar com o bot (ou apenas mover as peças no tabuleiro ), não é necessário registrar-se. No entanto, nesse modo, o jogo não será muito diferente do publicado no GitHub . Além disso, o registro não é necessário para monitorar os jogos atuais ou jogados anteriormente.

Como bônus
Dagaz suporta outro modo de jogo:


Então, quem quiser pode tentar jogar às cegas (desta vez, apenas contra o bot).

As vitórias / perdas de rotatividade ainda não são mantidas, mas tudo está em suas mãos. Se o jogo é popular, Ed prometeu atribuir uma classificação a ele. E, finalmente, uma pequena pesquisa sobre o tema do desenvolvimento do projeto:

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


All Articles