Javaプログラミング/Javaプログラミング関連情報

2次元ゲーム盤を使ったパズルゲーム(3ページ目)

2次元のゲーム盤の基本を理解してオリジナルのパズルゲームを作ってみましょう。

執筆者:掌田 津耶乃

プログラムのポイントをチェック!


では、今回作成するプログラムで、いくつかポイントとなる部分を取り上げ説明しておくことにしましょう。次ページのソースコードと照らし合わせながら読んでください。

●イメージの読み込みはgetResourceで!
ObakeMuraPanelでは、newされる際に必要なイメージを読み込んでフィールドに設定しています。この「イメージの読み込み」は、以下のような形で行われます。

URL url1 = this.getClass().getResource("jimen.gif");
jimen = Toolkit.getDefaultToolkit().getImage(url1);

イメージの読み込みにはToolkitのgetImageを使う、ということはよく知られていますが、その引数にはファイル名ではなくURLを指定します。このURLは、getClassで取得したClass内のgetResourceを使って取得します。なぜこんなやり方をするのか?というと、getImageでファイル名をそのまま指定した場合には、JARにまとめたときイメージが読み込めなくなるという問題があるからです。

今回のプログラムは、最終的にJARですべてまとめて配布します。ということは、イメージファイルも、実はファイルではなく「JARファイル内のデータの一つ」として組み込まれることになります。このため、ファイルでもJAR内のデータでも関係なくイメージデータを取得できるようにしておく必要があるのです。それが、getResourceによるURLの取得と、そのURLを使ったgetImageによるImage取得です。これはJAR内のデータを扱う場合の基本と考えましょう。

●マス目の周辺のチェックについて
ゲームのマス目の状況は、その周辺のマス目をチェックして調べる必要があります。これは、2次元配列のインデックス番号を増減して取得すればよいでしょう。例えば、現在のマス目がarr[i][j]だとすると、その左隣は、arr[i - 1][j]というようにして得ることができます。

ただし、直接このようにして配列を参照すると、途端にエラーになりますから注意が必要です。なぜなら、もし調べるマス目が一番左端になった場合、直接arr[i - 1][j]を取り出そうとすると-1のインデックス番号の要素を指示することになってしまうからです。そこで、このプログラムでは、指定した位置のデータを取得する専用メソッドを用意し、これを使ってマス目の値をチェックしています。

public int getData(int x0,int y0){
  return (x0 < 0 || x0 >= x || y0 < 0 || y0 >= y) ? 0 : arr[x0][y0];
}

縦横の位置を示す引数がゼロ未満または縦横の要素数以上だった場合には無条件でゼロを返し、そうでない場合のみ配列の値を返しています。

●クリック地点のマス目について
クリックしたときの処理はmouseClickedメソッドで行っています。これは引数にMouseEventインスタンスが渡され、そこからクリック地点の縦横位置を得ることができます。この縦横位置を、マス目の縦横の幅で割れば、何番目のマス目をクリックしたか調べることができます。

int x0 = ev.getX() / w;
int y0 = ev.getY() / h;

これでOK。そしてpaintComponentで指定位置のマス目を画面に描画する際には、マス目の縦横位置にマス目の縦横幅をかけた位置にイメージを描画すればいい、というわけです。

g.drawImage(jimen,i * w,j * h,this);
if (arr[i][j] == 1)
  g.drawImage(house,i * w,j * h,this);
if (arr[i][j] == 2)
  g.drawImage(house2,i * w,j * h,this);
if (arr[i][j] == 3)
  g.drawImage(house3,i * w,j * h,this);
if (arr[i][j] == -1)
  g.drawImage(obake,i * w,j * h,this);

このように「マス目の幅で割ったりかけたりする」というのが、この種のゲーム盤での表示を行う基本といえます。慣れると、案外簡単ですよ。

今回のプログラムはゲームをプレイする必要最低限の機能は揃っていますので、まずは実際に遊んでみてください。そして、これに更に機能を追加するなどしてアレンジしてみると、2次元ゲーム盤の扱い方がわかってくると思いますよ。まずは、スコアの計算と表示あたりから挑戦してみるとよいでしょう。

  • 前のページへ
  • 1
  • 2
  • 3
  • 4
  • 5
  • 次のページへ

あわせて読みたい

あなたにオススメ

    表示について

    カテゴリー一覧

    All Aboutサービス・メディア

    All About公式SNS
    日々の生活や仕事を楽しむための情報を毎日お届けします。
    公式SNS一覧
    © All About, Inc. All rights reserved. 掲載の記事・写真・イラストなど、すべてのコンテンツの無断複写・転載・公衆送信等を禁じます