Skip to content

Latest commit

 

History

28 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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 -pipe
パイプラインモードで起動。
標準入出力に対しての通信モードとして動作する。

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

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

起動時オプション

オプションはモード指定などの引数の前に指定する。
モード指定時の引数の省略を行わない場合は、後に指定してもよい。

-charset UTF-8
文字コードを指定する。UTF-8部分は、別の文字コードを指定することも可能。
JavaのCharsetに対応している文字コードを指定する。
ただし、UTF-8以外は動作の保証がない。

使い方

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

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

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

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

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

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

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

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

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

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

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

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

テキストファイルです。

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

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

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

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

色を示す値(COLOR)は、整数です。
0xAARRGGBBとなる整数を十進数で表記して下さい。
ただしAAは、0=不透明で255=透明となります。

回数を示す値(N)は、整数です。

.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を標準出力へ出力します。省略した際は空行出力となります。

.gvファイル拡張命令一覧

途中で追加されたので、対応していない実装も存在します。

tl X Y COLOR RADIUS TEXT
命令「tl」: 座標(X, Y)から右側へと(左揃えで)色COLORで、1文字辺りが半径RADIUSの大きさに収まるサイズで、TEXTを文字列として描きます。

tr X Y COLOR RADIUS TEXT
命令「tr」: 座標(X, Y)から左側へと(右揃えで)色COLORで、1文字辺りが半径RADIUSの大きさに収まるサイズで、TEXTを文字列として描きます。

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

f
命令「f」: ただちに今までに送信したデータを表示へ反映します。通信モード時に使用して下さい。

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

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

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

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

ir N
命令「ir」: 非同期入力用に覚えておけるイベントの個数をN個に設定します。初期値でもあるN==0のとき、非同期入力モードはOFFであることと同じになります。通信モード時に使用して下さい。
非同期入力モードでは、行われたイベント操作を後々のために覚えておきます。
イベントを覚えている状態で命令「i」が来た際には、そのあと行われたイベントを返す代わりに、覚えているイベントを忘れ、すぐさま返します。

ip
命令「ip」: 非同期入力の結果を得ます。通信モード時に使用して下さい。
覚えているイベントが存在する場合には命令「i」と同様にすぐさま結果を返します。
覚えているイベントが存在しない場合には、空行をすぐさま返します。

ik KEYGROUPNAME
命令「ik」: キー入力イベントを有効にします。通信モード時に使用して下さい。
有効になっているキーが押されると、命令「i」や命令「ip」は、通常のマウスイベントの代わりに次の様な書式を返します。
k TIME MESSAGE
ここでTIMEは、キー入力が行われた際のシーンを指すTIMEとなります。
KEYGROUPNAMEには、clear, alphabet, number, space, graphic, cursor, enter, delete, backspace, allを指定可能です。
clearを指定した場合、有効なキーリストが空となり、キー入力イベントが無効になっている状態(初期状態)になります。
MESSAGEに使われる値は、表示可能文字(spaceも含みます)の場合は、その表示可能文字1文字だけの結果となります。
そうでない場合、left, right, up, down, enter, delete, backspaceなどの2文字以上の文字列として結果が返ります。

il MESSAGE
命令「il」: 直前の描画命令対象領域を、キー入力イベントとして紐づけます。通信モード時に使用して下さい。
紐づけられた領域がクリックされた場合、ikと同様の書式のイベントを返すようになり、そのさいのMESSAGEは命令「il」で指定したMESSAGEが使われます。

命令「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へと変換します。

:BG
画像背景指定命令「:BG」: 画像描画領域を描画必須領域に含めません。巨大な画像の一部を背景として使用する場合などに用いることができます。

LICENSE

The MIT License (MIT)

Copyright (c) 2015 colun ( Yasunobu Imamura )

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

About

General Visualizer Client

Resources

Stars

10 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages