Add Imported Classを使ってなにをするのか。少しばかり調べてみましたので報告しようと思います。
そもそも
モジュール化しているゲームに「指揮範囲は司令部ユニットから6ヘクス以内。
ただし河川ヘクスサイドは超えられない」という内容のルールがあるとしましょう。
"ただし"以降のルールがなければ、司令部ユニットのメニューに指揮範囲を表示するような機能を付けるのは容易にできそうです。
しかし"ただし"以降のルールがあると、どうやらVASSALのモジュールではできないように見えます。
さてMMPの「A Victory Lost」のモジュールを開いて、とりあえず司令部ユニットを一つ選んで、右クリックして指揮範囲の表示をしてみると、地形を考慮して、ルール通りの指揮範囲を適切に選んでいるではないですか。
と思っていたら、JAVAを仕事で使っている私に、「A Victory Lost」のこの機能を自作のモジュールに、追加できないかという質問をいただきました。確かに便利です。モジュールを利用させてもらっている私としては、貢献できれば、それは大変うれしいところです。
というわけで調べてみました。
VASSALのサイトにあるチュートリアルには、JAVAのプログラムで、プラグインを作成して組み込む方法がかかれています。このプラグインを使うときに、このAdd Imported Classを使うことになります。
「A Victory Lost」のモジュールには、VASSAL本体に組み込むために開発中の、ヘクスやグリッド毎に地形データを持たせる機能の試作版を、プラグインの形で組み込んであるようです。
「A Victory Lost」のモジュールの製作者の方が、そもそもVASSAL本体のこの機能を開発されているようで、プロトタイプを「A Victory Lost」に合わせて修正して組み込んだとのことのようです。
ということは、直接これをほかのモジュールに移すためには、このプラグイン自体を修正する必要がありそうです。
またVASSALのサイトには、数は少ないのですが、特定のモジュール用に作られ、便利で他にも使えそうだけど、いくつかの事情で組み込まれていない部品というのもありました。モジュールにどうぞ組み込んでくださいとも書いてあります。
ということは、逆に言うとJAVAのプログラムができれば、機能の追加はできそうです。
いきなりマップの地形を判定して、指揮範囲やら移動範囲を表示する機能が組み込めるかはわかりませんが、VASSALの機能を拡張する方向で、何かできるか、しばらくの間調べてみて、ここで随時報告していければと思っています。
補足
VASSAL本体は、一定の制約のもとに改編して、再配布してもよいような使用許諾で配布されていますが、A Victory Lostに含まれるプログラムの部分についてはどういった使用許諾なのか調べることができませんでした。
できるからと言って、やってはいけない可能性が残っています。
もうひとつ補足
地形判定の機能の完成度は50%となっていました。どうやら地形の判定などは、ある程度できているが、地形データの設定方法や、地形データ自体がとても大きくなる可能性があることが課題のようです。
Add Imported Classをするまでの手順
以下で、実際にモジュールで独自のプラグインを使うまでの手順を説明しておきます。
そもそも独自のプラグインがなければ、意味はありませんが。。。。
Classって何
VASSALはJAVAでできていますが、ClassというのはJAVAのプログラムの最小単位で、classという拡張子のファイルで保存されています。
Add Imported Classとは、JAVAによるプログラムであるプラグインを、モジュールに追加するということになります。
Importedって何
追加するのは"Class"ではなく、"ImportされたClass"です。
追加したいClassは、あらかじめImportしておくことが必要になります。
VASSAL本体があれば利用できるMapやPieceのような部品に、利用できる部品を新しく追加することが、このImportにあたります。
公開されているヘルプやドキュメントを見た結果、モジュールにClassをImportする機能はVASSALには、用意されていないようです。
この点について、本家VASSSALサイトのモジュールの作り方のチュートリアルに記述がありました。
"VASSALのモジュールはZIP形式の圧縮ファイルだから解凍して、中にあるbuildFileと同じディレクトリを基準に、作ったclassファイルを、適切なパスで保存して再圧縮しろ"
ということのようです。
"適切なパス"については後述します。
fully-quallified nameって何
"Add Imported Class"を実施すると、
"Enter fully-qualified name of Java class to import"
と、文字の入力を求められます。
"importするJava classのfully-qualified nameを入力せよ"
ということですが、"import"と"Java class"は上述の通りです。
fully-quallified nameとはなにかというと、ここからJAVAのプログラムの話になってきます。
JAVAのプログラムの最小単位は上記のとおり、classと呼ばれるものです。そしてclassには名前があります。ここでは、この名前を入力することになります。
classの名前は、「住所」と「名前」で構成されています。
「日本の東京の山田さん家の太郎」という感じです。
こういうclassがあったとすると、fully-quallified nameは、日本.東京.山田さん家.太郎となります。
さて、先ほどの"適切なパス"がここで登場します。
JAVAで作られたプログラムは実行するときに、必要なclassを探しにいきます。
実際には、このclassを表しているファイルを読み込むわけですが、classの住所をファイルのパスとして探しに行きます。
先ほどの、"日本.東京.山田さん家.太郎"というclassを探す場合、基準となるディレクトリから、"日本\東京\山田さん家\太郎.class"というファイルを探しに行くことになります。
つまり上記のImportするファイルのパスと、ここで指定するfully-quallified nameは、区切り記号は異なりますが、内容が一致する必要があるわけです。
なおfully-quallified nameは拡張子classファイルの中にも書かれていています。ファイル名と、その中に書かれた名前が異なると、プログラムは異常を知らせててきて、期待通りには動いてくれなくなります。
最終更新:2008年11月06日 01:02