ツール

trax-host: 審判プログラム本体

審判プログラムはシリアル / TCP でプレーヤと接続したり、 標準入力から棋譜を入力して、ターミナルに順次盤面を表示し、 勝敗判定などを行います。

標準入力から入力するには -R オプションとリダイレクトを使って、

% ./trax-host -R < tests/longest-60.trx      
% ./trax-host -R < tests/longest-60.trx | less -R

のようにすることができます。 Forced play (連鎖ルール) が適用される分は棋譜には記録されませんが、 その場合にはこのプログラムにより自動的に適用されます。

盤面には、タイルが +, /, \ で表示され、 VT100 なエスケープシーケンスで色がつきます。 これはタイルの右辺に出る線の色です。慣れれば盤面がみえてきます。

また、ループやラインが成立した場合、 該当するタイルにはアンダーラインが引かれます。

通信する

プレーヤとの通信には Trax 通信プロトコルを使って 2つのクライアントに接続してゲームを進め、 経過を審判プログラムに渡します。先手後手の決定や、 制限時間などはこのプログラムが判断します。

クライアントとの通信方法にはシリアルポートと TCP があり、 両方のクライアントともシリアル、あるいは TCP でも接続できますし、 一方のクライアントにはシリアル、もう一方には TCP でそれぞれ接続接続するような混在環境もサポートしています。 また、シリアルポートのかわりに任意の pty デバイスも指定できますので、 socat などと組み合わせてさまざまなインタフェイスで接続が可能です。

シリアルデバイスを使う場合には、たとえば、

% ./trax-host /dev/cuaU0 /dev/cuaU1

のようにデバイスを指定すれば、/dev/cuaU0, /dev/cuaU1 に接続され、先に指定した /dev/cuaU0 に接続されたクライアントが先手プレーヤーとなります。 シリアルポートの通信速度は 19200bps です。 また、

% ./trax-host 10000 10001

のようにポート番号を指定すれば TCP のポートを開けて接続待ちになり、 クライアントがこれに接続することでゲームが開始されます。この場合も、 先に指定した 10000 番ポートに接続したプレーヤーが ポート番号は 10000-10010 を使用してください。

デバイスやポート番号の指定を省略した場合、ソースコード中にある、 serial_devs[] に基づいて、シリアルデバイスの自動探索が行われます。 自動探索では、ここに列挙されたポートに対して Trax 通信プロトコルの -T コマンドが順次送信され、最初に応答があったものが先手、 次に応答があったものが後手となります。

一手あたりの持ち時間はデフォルトで 10 秒ですが、 これは -t オプションで変更できます (たとえば、-t 5 で5秒になります。) また、先手・後手を入れ替えるには "-r" オプションを使用します。

-l オプションを付けると、 連番のついたファイルに棋譜が保存されます。 また、棋譜の連番を記録しておくために "log-seq" というファイルがカレントディレクトリに生成されます。

おまけ: 標準入出力を TCP に振り替える

TCP で審判プログラムに接続するコードを書くのは、 それほど難しいことではありませんが、入出力が TCP になってしまうと、 デバッグの際になにかと面倒なので、やはり標準入出力を使いたい、 と思うこともあると思います。しかし、通常のパイプやリダイレクトでは、 これは困難です。このような場合に便利なのが、 socat というツールです。

たとえば、

% socat TCP:localhost:10001 exec:"./my_trax",pty,ctty,echo=0

のようにすると、socat が ./my_trax を起動し、 その標準入出力を TCP 経由で localhost の 10001 番を listen している審判プログラムに接続してくれます。開発用にどうぞ。

謝辞

trax-host の通信部分は、 広島市立大の児島先生から寄贈されたコードを元にしています。


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-08-02 (火) 00:12:31