inada-s / gvc

General Visualizer Client

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

General Visualizer Client

GV(General Visualizer)は、プログラミングコンテストなどで手軽にゲーム状況を把握するために作られた、汎用的なビジュアライザを実現するためのプロトコルです。

本リポジトリは、GVに対応したクライアントプログラムとなります。

動作例

https://www.youtube.com/watch?v=LloGlY0smpA

https://www.youtube.com/watch?v=bWVPhEuFSYw

基本的な考え方

プログラミングコンテストでよく必要とされるビジュアライザの目的は、グラフィカルなリポート機能です。

作成中のソルバが何を考えているのかを、コンテスト参加者に対して効率よく表示することが求められます。

傾向として、単一半径円を格子状に色違いで複数記述すれば良いパターンが比較的多い様に思います。

これに加えて、表示したい候補盤面が複数あったり、時間経過の概念が含まれる場合が多くあります。

つまり、以下の様なリポートを作成したいことが多いのです。

newCanvas();
drawCircle(1, 1, red);
drawCircle(2, 1, green);
drawCircle(1, 2, blue);
newCanvas();
drawCircle(1, 1, red);
drawCircle(2, 1, green);
drawCircle(2, 2, blue); nextCanvas();
:
:
:

こうした、時間変化を伴う簡単な2次元図を簡単に作成可能なプロトコル及びその表示クライアントとして、GV及びGVCを作成しました。

起動方法

java -jar gvc.jar [.gvファイル]
.gvファイルの指定がない場合は、sample.gvを読み込みます。

java -jar gvc.jar -server [PORT] サーバーモードで起動。指定したポート番号にてTCP接続を待つ。デフォルトポート番号は11111。 接続元からの.gvファイルフォーマットのリクエストにて、動作する。

java -jar gvc.jar -client HOST [PORT] クライアントモードで起動。HOSTへとTCP接続。デフォルトポート番号は11112。 接続先からの.gvファイルフォーマットのレスポンスにて、動作する。

使い方

カーソルキー右:次の場面に移動します

カーソルキー左:前の場面に移動します

カーソルキー上:マウス位置を中心にズームイン

カーソルキー下:マウス位置を中心にズームアウト

ページアップキー:次の場面方向に20場面移動します

ページダウンキー:前の場面方向に20場面移動します

+キー:現在のウィンドウを複製して、もう1ウィンドウ開きます

テンキー:各方向へ少しスクロール
789
4 6
123

マウスホイール:マウス位置を中心にズームイン/アウト

マウスドラッグ:スクロール

シフトキー+マウスクリック:入力モード時(通信モード時のみ可)に

.gvファイルフォーマット

テキストファイルです。

それぞれの行が命令となります。
各行は半角スペース区切りとなります。

まずはsample.gvを見て下さい。

座標関係に使う値(XnおよびYnおよびRADIUS)は、浮動小数です。
RADIUSが省略可能な場合のデフォルト値は0.5です。

場面を示す値(TIME)は、浮動小数です。
TIMEが省略可能な場合のデフォルト値は、今までの最大値+1となります。

色を示す値(COLOR)は、整数です。
0xRRGGBBとなる整数を十進数で表記して下さい。
将来的に不透明度に対応する予定がありますが、その際、0xAARRGGBBとなる時のAAは、0=不透明で255=透明とする予定です。

.gvファイル命令一覧

n [TIME]
命令「n」: 以降の命令を、時刻TIMEのものとして扱います。

c X Y [COLOR [RADIUS]]
命令「c」: 座標(X, Y)を中心に色COLORで、半径RADIUSの円を塗りつぶします。

t X Y COLOR RADIUS TEXT
命令「t」: 座標(X, Y)を中心に色COLORで、1文字辺りが半径RADIUSの大きさに収まるサイズで、TEXTを文字列として描きます。

l X1 Y1 X2 Y2 COLOR
命令「l」: 座標(X1, Y1)から座標(X2, Y2)へと色COLORの線分を描きます。

p COLOR X1 Y1 X2 Y2 ... Xn Yn 命令「p」: 座標(X1, Y1)から座標(X2, Y2)...座標(Xn, Yn)で囲まれる領域を、色COLORで塗りつぶします。

b X Y W H IMAGE [OPERATION]
命令「b」: 座標(X-0.5, Y-0.5)から幅W高さHの領域に対して、画像IMAGEを描画します。
IMAGEはファイルパスとなります。(※gvファイルからの相対パス指定に対応していません)
OPERATIONに関しては後述します。

o [TEXT] 命令「o」: 場面切り替え時にTEXTを標準出力へ出力します。省略した際は空行出力となります。

通信モード時に使用される命令

r
命令「r」: 直前の命令「n」までロールバックします。通信モード時に使用して下さい。

ra
命令「ra」: 全ての命令をロールバックします。通信モード時に使用して下さい。

a
命令「a」: 自動場面切り替えモードにします。通信モード時に使用して下さい。

i
命令「i」: 入力モードに切り替えます。通信モード時に使用して下さい。
このあと行われた最初の「シフトキー+マウスクリック」操作の座標を、通信相手に下記の書式で送ります。
TIME X Y
上記書式の各値は、全て浮動小数です。 TIMEは命令「n」で指定した際の文字列と一致しない可能性がありますので、ご注意下さい。
命令「c」や命令「t」を整数座標運用している場合、ここで得られたX及びYの整数化に際してはroundを使うこと(+0.5して切り捨てでも良い)をオススメ致します。

命令「b」のOPERATION

OPERATIONは、半角スペース区切りです。
たとえば「:R :S 10 10」の様に、複数の画像加工命令を繋ぎ合わせることができます。

:R
画像加工命令「:R」: 表示時の画像の色を、R(赤)以外無視します。

:G
画像加工命令「:G」: 表示時の画像の色を、G(緑)以外無視します。

:B
画像加工命令「:B」: 表示時の画像の色を、G(緑)以外無視します。

:S W H
画像加工命令「:S」: 現在の画像のサイズを幅W高さHへと変換します。
変換の方式については現在は「:TCO14MR3S」と同じですが、将来的に同じであることが保証されません。
より一般的な変換アルゴリズムに変更となる可能性があります。

:TCO14MR3S W H
画像加工命令「:TCO14MR3S」: Top Coder Open 2014 Marathon Round 3 の問題で使われた画像拡大縮小方式にて、現在の画像のサイズを幅W高さHへと変換します。

LICENSE

The MIT License (MIT)

Copyright (c) 2015 colun ( Yasunobu Imamura )

詳しくは付属のLICENSEファイルをお読み下さい。

About

General Visualizer Client

License:MIT License


Languages

Language:Java 73.7%Language:C++ 26.3%