「ソフトウェア演習U(3年前期)」という講義の内容より javaによるゲーム/アニメーションプログラミング今回のテーマは「アクションゲーム」です。 下記の要領で段階的にプログラムを作成していきます。 プログラムの知識は不要です。作成した処理(命令)をくっつけるという最後の仕上げをしてもらいます。 演習時間の目安:60分。
ゲーム概要
任天堂のスーパーマリオ風のアクションゲームです。 左右カーソルキーで操作。 上カーソルキー(スペースキー)でジャンプ。 [s]キーで再スタート。 すべてのアイテム(★)を集めるとクリア。 5人失敗するとゲームオーバー。 制限時間有。 完成版のステージは4面まで用意しています。 最後にボスが出てきます。
Eclipseを使う
■前準備 javaによるソフトウェア開発環境であるEclipseを起動し、新規「プロジェクト」を作成します。名前はたとえば「gp」。 「action_en.zip」をダウンロードし、フォルダを解凍します。場所はデスクトップでかまいません。 eclipseのパッケージエクスプローラ上の「gp」に対し、 「action_en」フォルダの中身をコピーします。 ■翻訳(コンパイル)・実行 パッケージエクスプローラ上の「Anim2Dfr」にマウスをあわせて右クリックで 「実行」「javaアプリケーションの実行」とすれば、ウインドウがあがり、ゲームを実行できます。 この後は、プログラムを編集し、同様の実行を行えば変更の加わったプログラムが起動します。プログラム作成方法
Anim2Dfr(Anim2D)クラス にのみ追加・編集していきます。 以下の黄色の枠内の命令をコピーし、eclipseの該当箇所に貼り付けて下さい。 段階的に命令を追加して完成させていきましょう。処理全体の流れをつかもう
通常ゲーム、アニメーションでは1秒あたり数十回も画像を生成・表示することで動いているようにみせます。 パラパラ漫画の要領です。 このアクションゲームでは1コマ分の処理は以下のようになります。
@横スクロール背景表示 Cアイテム表示 E床表示 F敵キャラの移動・表示 キャラクタの移動・表示 B移動+ジャンプ Dアイテムゲット? Gあたり判定 A表示 ゲーム情報の表示とゲーム管理 |
bg.draw(); |
chara.draw(); |
chara.move(false, floor); |
for (int i=0; i < item.length; i++) { item[i].move(); item[i].draw(); } |
chara.checkItem(item); |
for (int i=0; i < floor.length; i++) { floor[i].move(); // 移動 floor[i].draw(); // 表示 } |
chara.move(button, floor); |
for (int i=0; i < enemy.length; i++) { enemy[i].move(); // 移動 enemy[i].draw(); // 表示 } |
if ( chara.collision(enemy) ) { chara.resetTime(); mode = 4; } |
// 4つの敵キャラ生成: (id, s, x, y, w, st, type の順に記述) // E0: 静止 / E1: 左移動 / E2: 左にはねる / E3: 上下移動 enemy = new Enemy[4]; // 4つ enemy[0] = new Enemy(0, 0, 8, 0, 0, Enemy.E0); enemy[1] = new Enemy(1, 1, 0, 0, 1, Enemy.E1); enemy[2] = new Enemy(2, 1, 5, 0, 2, Enemy.E2); enemy[3] = new Enemy(3, 1, 8, 0, 2, Enemy.E3); |
// 床生成: (id, s, x, y, w, type の順に記述) floor = new Floor[3]; // 3つ floor[0] = new Floor(0, 0, 12, 0, 4, P.STOP); floor[1] = new Floor(1, 1, 0, 0, 4, P.LEFT); floor[2] = new Floor(2, 1, 10, 0, 4, P.UP); |
・敵の種類の追加。さまざまな動きの定義が考えられます。 ・アイテムの追加。とると攻撃が可能、等。 ・ステージの追加 ・エンディングの追加 ・サウンド追加・・・グラフィックスの講義なのであえて音は鳴らしませんでした。
今回題材がたまたまゲームでしたが、情報科学部ではゲーム性や芸術性の高いも のを作ることを目的としません。 情報科学部では「情報の表現方法」、「アルゴリズム」や「データ構造」という プログラムを作成するための基礎をゲームプログラミングを通して勉強していきます。