Tic Tac Toe no DNS

Inicialmente, eu queria chamar esse post de "um jogo em 0 linhas de HTML, JS e CSS", inspirado neste post , mas seria muito alto. De um jeito ou de outro, deteriorando bastante o UX, consegui o tic-tac-toe, trabalhando exclusivamente pelo poder do protocolo DNS.



Para um usuário despreparado, é claro que parece assustador, mas mesmo um navegador não é necessário para o jogo.

Para entrar no jogo, você precisa executar um comando que envolve acessar meu servidor DNS:

$ dig @ns.f1remoon.com game.f1remoon.com. TXT 

Também fiz uma pequena ajuda, disponível nos registros TXT para o domínio help.game.f1remoon.com :



Como isso funciona?


No começo, tentei apenas configurar o bind9 corretamente, mas fiquei muito decepcionado: a ordem de emissão dos registros TXT era aleatória. Isso, é claro, trouxe algum exotismo ao jogo, mas era absolutamente inaceitável. Eu tive que largar a ideia e procurar um servidor DNS auto-escrito. Armado com o desejo de aprender algo novo, peguei o golang e a biblioteca Go DNS e consegui um servidor simples, não muito diferente dos exemplos.

O próximo desafio foi todas as combinações do jogo. Aqui está um grande obrigado a Sirion : peguei os arquivos html e os traduzi para um formato que gostei.

Como o comando dig, diferentemente do navegador, não armazena o URL e não permite bisbilhotar o campo, o usuário terá que deixar isso. Para o jogo, o campo foi marcado como numpad:

 7 8 9 4 5 6 1 2 3 

Ao solicitar uma movimentação, você sempre precisa fornecer o histórico completo das movimentações do lado oposto, por exemplo, o comando para a terceira movimentação na célula "9" terá a seguinte aparência:

 $ dig @ns.f1remoon.com 9.4.5.game.f1remoon.com. TXT 

Conclusão completa de três movimentos
 $ dig @ns.f1remoon.com 5.game.f1remoon.com. TXT ; <<>> DiG 9.11.3-1ubuntu1.1-Ubuntu <<>> @ns.f1remoon.com 5.game.f1remoon.com. TXT ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12656 ;; flags: qr rd; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0 ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;5.game.f1remoon.com. IN TXT ;; ANSWER SECTION: 5.game.f1remoon.com. 0 IN TXT "o" "_" "_" 5.game.f1remoon.com. 0 IN TXT "_" "x" "_" 5.game.f1remoon.com. 0 IN TXT "_" "_" "_" ;; Query time: 135 msec ;; SERVER: 159.65.145.145#53(159.65.145.145) ;; WHEN: Sun Aug 05 20:16:16 UTC 2018 ;; MSG SIZE rcvd: 148 $ dig @ns.f1remoon.com 4.5.game.f1remoon.com. TXT ; <<>> DiG 9.11.3-1ubuntu1.1-Ubuntu <<>> @ns.f1remoon.com 4.5.game.f1remoon.com. TXT ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9301 ;; flags: qr rd; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0 ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;4.5.game.f1remoon.com. IN TXT ;; ANSWER SECTION: 4.5.game.f1remoon.com. 0 IN TXT "o" "_" "_" 4.5.game.f1remoon.com. 0 IN TXT "x" "x" "o" 4.5.game.f1remoon.com. 0 IN TXT "_" "_" "_" ;; Query time: 131 msec ;; SERVER: 159.65.145.145#53(159.65.145.145) ;; WHEN: Sun Aug 05 20:16:23 UTC 2018 ;; MSG SIZE rcvd: 156 $ dig @ns.f1remoon.com 9.4.5.game.f1remoon.com. TXT ; <<>> DiG 9.11.3-1ubuntu1.1-Ubuntu <<>> @ns.f1remoon.com 9.4.5.game.f1remoon.com. TXT ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40450 ;; flags: qr rd; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0 ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;9.4.5.game.f1remoon.com. IN TXT ;; ANSWER SECTION: 9.4.5.game.f1remoon.com. 0 IN TXT "o" "_" "x" 9.4.5.game.f1remoon.com. 0 IN TXT "x" "x" "o" 9.4.5.game.f1remoon.com. 0 IN TXT "o" "_" "_" ;; Query time: 131 msec ;; SERVER: 159.65.145.145#53(159.65.145.145) ;; WHEN: Sun Aug 05 20:16:30 UTC 2018 ;; MSG SIZE rcvd: 164 $ 


Repositório com o código: github.com/Firemoon777/tic-tac-toe-dns

UPD: Prototik sugere usar uma opção mais conveniente para o jogo com a tecla + curta:
 $ dig +short TXT @ns.f1remoon.com 9.4.5.game.f1remoon.com. "o" "_" "x" "x" "x" "o" "o" "_" "_" 

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


All Articles