ゲームの基本設計を考える
この種の2次元ゲーム盤を使ったゲームは、「2次元配列のデータ情報が全て」といっていいでしょう。各マス目の情報を管理する2次元配列を用意し、そこにどういう値を収めておくかによってゲーム盤を管理するわけです。ここでは、配列の値の役割を以下のようにしておきます。
-1:ゴーストがいる
0:何もない状態
1:家(支配されていない)
2:家(ゴーストが支配)
3:家(発狂状態)
描画を行う際に、配列の値をチェックし、これらの値に応じて必要なイメージを指定のマス目に描画をすればよいわけです。またゲーム状態のチェックなども、配列の値をチェックしていくことでそのマス目がどういう状況か知ることができます。
またマス目の状況が整理できたら、各状況ごとに表示するイメージとしてどういうものが必要かわかってきます。ここでは「何もない状態」「家(支配されていない)」「家(支配済み)」「家(発狂状態)」、そして「ゴースト」の5種類のイメージが必要となることがわかります。今回は、それぞれ50×50ドットのGIFイメージとして用意することにしました。
今回作成する5つのGIFイメージ。それぞれ50×50ドットで作成し、ソースコードファイルと同じ場所に配置しておきましょう。 |
必要な部品類が用意できたら、プログラムの設計を行いましょう。今回は、2つのクラスとしてプログラムを作成します。ゲーム盤となるJPanel継承クラスと、アプリケーションのウインドウクラスです。それぞれ、以下のように役割を分担します。
●FreeObakeMuraクラス(JFrame継承)
ウインドウクラス。メニューバーを持ち、新規ゲームやリセットなど基本的な操作を行います。メニューを選ぶと、ObakeMuraPanelから必要なメソッドを呼び出しゲームを操作します。
●ObakeMuraPanelクラス(JPanel継承)
ゲーム盤のクラス。ゲームのデータとなる配列を内部に持ち、それを参照しながらゲーム盤の表示を行います。またクリック時の処理、ステージの初期化、ゲーム状態のチェックなどゲーム進行に必要な機能をすべて持ちます。
以上の基本的な設計を頭に入れ、それぞれのクラスにどのような機能を実装したらよいか、ざっとメソッド類を考えてみましょう。
●FreeObakeMuraクラス
mainメソッド:起動時の処理。
コンストラクタ:メニューの作成と、ObakeMuraPanelの作成、組み込み。
●ObakeMuraPanelクラス
コンストラクタ:イメージの読み込み、必要なフィールド類の初期化。
initArraメソッド:ゲームに必要なデータの初期化。
newGameメソッド:新規ゲームの開始処理。
resetStageメソッド:ステージの初期化処理。
renewStageメソッド:ステージを新たに生成する処理。
checkClearメソッド:ステージがクリアされたかどうかをチェックする。
paintComponentメソッド:2次元配列を元にゲーム盤を描画する。
●MouseAdapter継承クラス
マウスイベントを処理するためのObakeMuraPanelの内部クラス。
mouseClicked:ゲーム盤をクリックしたときの処理。
ざっとこんな形でメソッドを実装していけば、プログラムの基本部分はできあがりそうですね。ObakeMuraPanelクラスに、ゲームとしての基本機能を全て実装し、それを外部から必要に応じて呼び出し操作するわけです。2次元ゲーム盤を使ったようなゲームでは、このように「ゲームとして独立して機能するコンポーネント」を作ってしまうのが一番製作しやすいのですね。