例外とキー操作、ゲームの「判定」、コンテキストを知る携帯アプリを作って学ぶJava文法の基礎(8)(2/2 ページ)

» 2008年08月21日 00時00分 公開
[緒方聡エスマテック株式会社]
前のページへ 1|2       

アプリケーションにおける「コンテキスト」とは?

 ゲームを問わず、通常のアプリでも大抵は「内部状態」というものを持っています。「コンテキスト」と呼ばれることもあります。

 今回のアプリでは、簡単のため内部状態は3つしか持っていません。「落下開始」にゲーム終了判定をしました。ゲーム終了でなければ内部状態は「落下中」に遷移します。当たり判定を使って、これ以上下に移動できないと判断したら、内部状態は「着地」になります。

図5 Trimisの状態遷移図 図5 Trimisの状態遷移図

 ブロックが着地したら、横一列にそろっているかどうかをチェックして、そろっていればラインを消す処理を行います。

ライン消去処理

 ライン消去処理は連載第4回「コメントと制御文でJavaプログラムに“命”を吹き込め!」のbreak文の説明で引き合いに出しましたが、配列を下から順番に1つずつチェックしていくだけなので、特に難しくはありません。

図6 ライン消去処理の概要 図6 ライン消去処理の概要

 以下はライン消去処理を実装したソースコードです。

 消去する配列のインデックスを覚えておいて、点滅などの演出を行っています。

画竜点睛に向かって、残りを実装しよう

面白くするための「Random」

 現時点の実装では、次に出現するブロックは、常に縦棒になっていますが、これでは面白みがありません。次に出現するブロックをランダムにするためには、JavaのRandomクラスを使用します。以下はランダム処理を実装したソースコードです。

次のブロック表示

 前回、画面設計を以下のように決めました。

 次のブロックを上記の場所に表示させる必要があるので、そのためのメソッドを1つ追加し、それをフィールドの描画と同じタイミングで呼び出せば実現できます。以下は、次のブロック表示を実装したソースコードです。

スコア表示

 次のブロックと同様、消した合計ラインとスコアもメソッドを1つ追加し、同じタイミングで呼び出せば実現できます。以下はスコア表示を実装したソースコードです。

 合計ラインやスコアは、ゲーム開始時に初期化する必要があり、ラインが消えたら更新しなければならないので、各状態で処理を追加しています。

ハードドロップで画竜点睛!

 操作を快適にするためにハードドロップを実装します。キーイベント処理内で上キーが押された際の処理と、キーバッファから取り出したキーが上キーだった際の処理を追加します。

 ハードドロップは一気に下まで落っことす処理というのを特別に用意するのではなく、1つ落としては当たり判定を呼び出す、という繰り返しで実現しています。以下はハードドロップを実装したソースコードです。

ワイドスクリーン機種対応(2008年9月29日追記)

 最近のケータイはワンセグをフル画面で見られるように、画面サイズが従来の機種に比べて縦長(または、横長)になっています。いまのままの実装では、ワイドスクリーン機種では表示が切れてしまう可能性があるので、縦横のサイズがどんな組み合わせでも画面に収まるように対応します。

ソースコードに実装が増えていく体験

 何もないところから機能を追加していき、ソースコードに実装が増えていくという体験を通してプログラミングの方法を説明しましたが、いかがだったでしょうか。最後に、前回と今回の実装の変更個所が段階的に分かる一覧を作成しましたので、おさらいしてみてください。

表 前回と今回の実装の変更ソースコード
追加した機能 変更差分
フィールドを実装 DoJa MIDP
自動落下を実装 DoJa MIDP
キー操作を実装 DoJa MIDP
当たり判定と着地判定を実装 DoJa MIDP
ゲーム終了判定を実装 DoJa MIDP
ライン消去処理を実装 DoJa MIDP
ランダム処理を実装 DoJa MIDP
次に出るブロック描画処理を実装 DoJa MIDP
スコア表示を実装 DoJa MIDP
ハードドロップを実装 DoJa MIDP
ワイドスクリーン対応
(2008年9月29日追記)
DoJa MIDP

 また、今回までに実装したソースコードは以下からダウンロードできます。



前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。