記事ソース:csdn 著者:陳万飛
著者について
Chen Wanfei (男性) は、中南大学で数学とソフトウェアの学士号を取得しており、Beijing Great Wall Software の上級プログラマーおよびシステム アナリストであり、j2se および j2ee の開発に豊富な経験を持っています。現在、j2meの研究に取り組んでいます。連絡先は [email protected] です。
まとめ
この記事では、MIDP1.0 に基づいたテトリス ゲームの設計計画を示し、完全な実装ソース コードを示します。ゲームの最大の特徴は、さまざまな携帯電話や PDA の画面サイズに関係なく、常に最適な表示効果が得られることです。このゲームは、J2me ワイヤレス ツールキット 2.1 の 4 つのエミュレータでテストされています。
免責事項: このゲーム コードはもともと日本のオープンソース プロジェクト (参考文献 1 を参照) から来ており、作者によって大幅に変更されています。
以下にゲームのスクリーンショットをいくつか示します。
デザイン
1. 運用プロセス
このゲームの操作プロセスは非常に簡単で、ユーザーが MIDlet を起動すると、ゲームのメイン画面に入り、ようこそ画面が表示されます。 [スタート]ボタンを押した後、一時停止したい場合は再度[スタート]ボタンを押すと、ゲームが一時停止されます。一時停止してもゲームは続行します。 [終了]ボタンを押すたびに、ゲーム MIDlet が終了します。
ゲーム画面のフローチャートは以下の通りです。
2. アルゴリズム
MIDP ゲーム デザインは基本的に、スレッドまたはタイマーを使用して再描画イベントを生成し、スレッドとユーザー入力を使用してゲームの状態を変更します。このゲームも例外ではなく、MIDlet を起動すると、すぐに再描画スレッドが生成され、50 ミリ秒ごとに画面が描画されます。もちろん、再描画の際に最適化策はありますが、画面上のすべてのピクセルを再描画する必要はありませんが、ゲーム キャンバス上に固定されている落下物などの選択もあります (落下物は全部で 7 種類あります)。 、4つの小さなレンガで構成されており、各落下オブジェクトは固定色を持ち、上下左右に回転できるため、再描画する必要はありません。ゲーム キャンバスは、ユーザーのキーボード コマンドを受け入れ、落下するオブジェクトの左、右、下、回転のアクションを制御できる CommandListener です。ゲーム全体のフロー制御は、ゲームキャンバスオブジェクトのpaint()メソッドに反映されます。 Paint() は、現在のゲーム状態に基づいて現在のゲーム画面を描画します。ウェルカム画面とゲームオーバー画面は非常に簡単に描画できます。ゲームの一時停止画面の描画も非常に簡単で、paint() の実行時に実際に再描画アクションを実行する必要がないようにフラグを設定するだけです。ゲーム実行時の画面描画では、現在の落下物位置に落下物を描画する必要があります。落下物を描画する前に、落下物がまだ落下できるかどうかを判断し、落下できる場合は 1 マス落下させてから、落下物がゲームオーバー状態であるかどうかを判断します。ゲームがオーバー状態である場合、ゲームがオーバー状態でない場合、次回再描画されるときにキャンバスにゲームオーバー画面が描画されるように、ゲーム状態をゲームオーバー状態に設定します。 、 Over 状態では、落下オブジェクトが固定され、同時にゲーム キャンバス上で落下オブジェクトの現在の行の下のすべての行がチェックされ、行の削除が必要かどうかが確認されます。行の削除が必要な場合は、そのデータが削除されます。ゲームマップ上の削除された行はクリアされ、削除された行は背景色で描画されます。次に、新しい落下オブジェクトを初期化し、この新しい落下オブジェクトを描画します。ペイント方法のフローチャートは次のとおりです。
3.データ構造
このゲームには以下のデータ構造が含まれます。
ゲームエリア
ゲーム領域は携帯電話または PDA 画面の一部であり、その辺の長さは 16 で均等に割り切れる必要があります (ロシアのゲーム領域は、長さが 16 個の小さなレンガと 16 個の小さなレンガからなる正方形であるため)。広い)。この領域は、水平方向と垂直方向の両方で画面の中央に配置する必要があります。ゲームエリアは水平方向に 2 つの部分に分割されており、1 つの部分はゲーム コンテナを表示するための 12 個の小さなレンガ幅で、もう 1 つの部分は 4 つの小さなレンガ幅で次の落下オブジェクトとスコアを表示します。
小さなレンガ
小さなレンガはドロップおよびゲーム コンテナの一部です。辺の長さがゲームエリアの辺の長さの 1/16 の正方形として表示されます。小さなレンガを描画する際に、レンガとレンガの間に隙間ができるように四辺を1ピクセル残して白またはグレーで描画します。それぞれの小さなレンガにも 1 から 8 までの ID が付いています。カラー配列 (プログラムでは BRICK_COLORS と呼ばれます) を使用して、これら 8 色を保存できます。ある小さなレンガの ID が 3 の場合、その小さなレンガの色は BRICK_COLORS[3-1] になります。
落下物
ドロップは基本的に 16 個の小さなレンガで作られた正方形です。落ち物は「フィールド」の形や「L」の形など全部で7種類あります。落下物ごとに 4 つの回転バリエーションがあります。 落下物にはそれぞれ 1 から 7 までの ID が付いています。落下物は色が決まっているからです。 BRICK_COLORS 配列内のその色の添字値に 1 を加えたものを、落下するオブジェクトの ID として使用することもできます。
たとえば、「L」字型の落下物体の ID は 3 で、そのバリエーションは次のとおりです。
では、落下物体を格納するためにどのようなデータ構造が使用されるのでしょうか。説明するために、「L」字型の落下物体を例に挙げてみましょう。
各落下物体には 4 つの状態があるため、長さ 4 の配列を使用して落下物の 4 つの状態を格納することを検討できます。配列内の各要素は落下物の状態を表します。では、落下物の特定の状態を表現するには何を使用すればよいでしょうか? 上の図からわかるように、落下物の状態を格納するには 4X4 の 2 次元配列を使用するのが最適です。色付きのレンガが表示される場合、値は 1 になり、背景色のみで描画する必要がない場合、値は 0 になります。したがって、「L」字型の落下物全体の 4 つの状態は、3 次元配列で表すことができます。
protected int blockpattern3[][][] = {
{{0, 1, 0, 0}、{0, 1, 0, 0}、{0, 1, 1, 0}、{0, 0, 0, 0}}、
{{0, 0, 0, 0}、{0, 1, 1, 1}、{0, 1, 0, 0}、{0, 0, 0, 0}}、
{{0, 0, 0, 0}、{0, 1, 1, 0}、{0, 0, 1, 0}、{0, 0, 1, 0}}、
{{0, 0, 0, 0}、{0, 0, 1, 0}、{1, 1, 1, 0}、{0, 0, 0, 0}}
};
ゲームマップ
ゲーム マップは、ゲーム コンテナ上に固定タイルを格納するために使用されます。ゲーム コンテナは、左右 2 つの壁と下のコンテナの底部を含め、幅が 12 個の小さなレンガ ユニット、高さが 16 個の小さなレンガ ユニットです。したがって、16X12 の 2 次元配列 (プログラムではマップデータと呼ばれます) が固定ブリックの格納に使用されます。 mapdata[i][j]=k(k!=0) の場合、ゲーム コンテナの行 i 列 j に固定の小さなレンガがあり、その小さなレンガの色の値が BRICK_COLORS[k] であることを意味します。 -1]。k=0 の場合、行 i と列 j にレンガがないことを意味します。
したがって、次のゲーム実行時間の場合、マップデータの値は {{8,0,0,0,0,0,0,0,0,0,0,8}{8,0,0,0,0 、0,0,0,0,0,0,8}{8,0,0,0,0,0 ,0,0,0,0,0,8}{8,0,0,0,0,0,0,0,0,0,0,8}{8,0,0,0,0,0 ,0,0,0,0,0,8}{8,0,0,0,0,0,0,0,0,0,0,8}
{8,0,0,0,0,0,0,0,0,0,0,8}{8,0,0,0,0,0,0,0,0,0,0,8} {}{8,0,0,0,0,0,0,0,0,0,0,8}{8,0,0,0,0,0,0,0,0,0,0, 8}
{8,0,0,0,0,0,0,0,0,1,1,8}{8,0,0,0,0,0,0,0,0,1,1,8} {8,0,0,0,0,0,7,7,5,1,1,8}{8,0,5,0,0,7,2,5,5,1,1,8}
{8,8,8,8,8,8,8,8,8,8,8,8}}
ソースコードと実行可能コード
合計 3 つのファイルがあります: src.rar、ketrisgame.jad、ketrisgame.jar 注: src.rar にはすべてのソース コードが含まれています。 ketrisgame.jar にはプログラムの実行に必要なリソース ファイルもあります。wtk2.1 をインストールした後、ketrisgame.jad と ketrisgame.jar を同じディレクトリに配置し (ディレクトリ パスに漢字やスペースを含めることはできないことに注意してください)、 ketrisgame.jad ファイルを使用すると、エミュレータでゲームを実行できます。
参考文献
http://www.javadrive.jp/j2me/game/3/index.html
<j2me の概要>
<Java携帯電話・PDAプログラミング入門>