Tic Tac Toe在DNS上

最初,由于这篇文章的启发,我想称这篇文章为“用0行HTML,JS和CSS编写的游戏”,但这太响了。 一种或另一种方式,使UX严重恶化,我一触即发,仅靠DNS协议的力量工作。



对于没有准备的用户来说,它看起来确实很吓人,但是游戏甚至不需要浏览器。

为了进入游戏,您需要运行一个涉及访问我的dns服务器的命令:

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

我也做了一点帮助,可以在help.game.f1remoon.com域的TXT记录中找到该help.game.f1remoon.com



如何运作?


刚开始,我试图正确配置bind9,但感到非常失望:发出TXT记录的顺序是随机的。 当然,这给游戏带来了一些异国情调,但这绝对是不能接受的。 我不得不放弃这个想法,而转向一个自写的DNS服务器。 怀着学习新知识的愿望,我使用了golang和Go DNS库,并得到了一个简单的服务器,与示例没有太大区别。

下一个挑战是游戏的所有组合。 非常感谢Sirion :我带走了他的html文件,并将其翻译成我喜欢的格式。

由于dig命令与浏览器不同,它不存储url且不允许在字段中戳戳,因此用户将不得不离开此地址。 对于游戏,该字段被标记为小键盘:

 7 8 9 4 5 6 1 2 3 

请求移动时,始终需要提供相反方向的完整移动历史记录,例如,单元格“ 9”中第三次移动的命令如下所示:

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

完成三步走
 $ 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 $ 


代码仓库: github.com/Firemoon777/tic-tac-toe-dns

UPD: Prototik建议使用带键+短键的游戏更方便的选择:
 $ dig +short TXT @ns.f1remoon.com 9.4.5.game.f1remoon.com. "o" "_" "x" "x" "x" "o" "o" "_" "_" 

Source: https://habr.com/ru/post/zh-CN419333/


All Articles