Tic Tac Toe auf DNS

Anfangs wollte ich diesen Beitrag "ein Spiel in 0 Zeilen HTML, JS und CSS" nennen, inspiriert von diesem Beitrag , aber es wäre zu laut. Auf die eine oder andere Weise, die die UX stark verschlechterte, bekam ich Tic-Tac-Toe und arbeitete ausschließlich mit der Kraft des DNS-Protokolls.



Für einen unvorbereiteten Benutzer sieht es natürlich beängstigend aus, aber selbst ein Browser wird für das Spiel nicht benötigt.

Um an dem Spiel teilnehmen zu können, müssen Sie einen Befehl ausführen, der den Zugriff auf meinen DNS-Server beinhaltet:

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

Ich habe auch eine kleine Hilfe gemacht, die in TXT-Datensätzen für die Domain help.game.f1remoon.com ist:



Wie funktioniert es


Zuerst habe ich versucht, bind9 richtig zu konfigurieren, war aber sehr enttäuscht: Die Reihenfolge der Ausgabe von TXT-Datensätzen war zufällig. Dies brachte natürlich etwas Exotik ins Spiel, aber es war absolut inakzeptabel. Ich musste die Idee fallen lassen und auf einen selbstgeschriebenen DNS-Server schauen. Ausgerüstet mit dem Wunsch, etwas Neues zu lernen, nahm ich Golang und die Go DNS-Bibliothek und bekam einen einfachen Server, der sich nicht wesentlich von den Beispielen unterscheidet.

Die nächste Herausforderung waren alle Kombinationen des Spiels. Hier ist ein großes Dankeschön an Sirion : Ich habe seine HTML-Dateien genommen und in ein Format übersetzt, das mir gefallen hat.

Da der Befehl dig im Gegensatz zum Browser die URL nicht speichert und das Stöbern im Feld nicht zulässt, muss der Benutzer dies verlassen. Für das Spiel wurde das Feld als Nummernblock markiert:

 7 8 9 4 5 6 1 2 3 

Wenn Sie einen Zug anfordern, müssen Sie immer den vollständigen Verlauf der Züge im Gegenteil angeben. Der Befehl für den dritten Zug in Zelle „9“ sieht beispielsweise folgendermaßen aus:

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

Vollständiger Abschluss von drei Zügen
 $ 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 $ 


Repository mit Code: github.com/Firemoon777/tic-tac-toe-dns

UPD: Prototik schlägt vor, eine bequemere Option für das Spiel mit der Taste + Kurzschluss zu verwenden:
 $ dig +short TXT @ns.f1remoon.com 9.4.5.game.f1remoon.com. "o" "_" "x" "x" "x" "o" "o" "_" "_" 

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


All Articles