今回は Tic-tac-toe14.smallbasic の中からクラス Console とクラス Lamp を移植しました。Console はゲームコンソール全体を取りまとめるクラスで、対人間のインタフェースとも考えられます。Lamp はその中のコントロールで、LEDランプです。先攻・後攻のどちらの番かを表します。もともとSmall Basicにこのようなコントロールがなかったので作成しました。Javaにはラジオボタンがありますが、見栄えがかなり違うので、Javaにも移植することにしました。プログラムは Console15 として公開します。
【図7 Console v1.5】
各種コントロール(ラベル、テキストフィールド、ボタンなど)をJavaのAWTパッケージにあるComponentの機能を使って作成したので、ConsoleクラスはAppletを継承することにしました。そのため、Consoleそのものがアプレットになりました。
まだ作成途中ですが、試合結果を与えて表示できることを確認したので、公開しました。
Small Basicのコントロールは、画面上の座標を指定して位置を決めますが、Javaの場合はレイアウトという仕組みがあり、その作法にしたがってコントロールを配置しました。Javaのレイアウトには、いくつかのオプションがありますが、三目並べの画面に最も馴染みそうなオプションとして、GridBagLayout を選びました。
レイアウトについては「とほほのJava入門」にあるレイアウトの説明が分かりやすいと思います。その中の GridBagLayout を使い、今回は縦6マス、横5マスの格子(グリッド)にそれぞれのコントロールを配置しました。
【図8 GridBagLayoutの適用】
前回は何も継承していなかった盤のクラス Board ですが、今回はコントロールの一つとして配置できるよう、Canvas クラスを継承するようにしました。今回移植した Lamp も Canvas を継承しました。
アプレットビューワで見たときにウィンドウサイズを変更すると画面(レイアウト)が崩れてしまい、元に戻らなくなります。という問題があるのですが、HTML上ではサイズが固定されるので、ひとまずこのまま使っていこうと思います。
これで表示すべきものは移植が済んだので、ゲーム本体の移植に移りたいと思います。
(つづく)