|
|
 |
課題
Java
簡単なインベーダーゲーム |
|
1.プログラムの仕様
パソコンの初期の時代に流行ったゲームとしてインベーダーゲームがありました。
今回は画面を簡単にして最低限の機能を持ったインベーダーゲームをアプレットで作成します。
概要は、上から流れてくるボール(弾)をラケットで打ち返し、標的(インベーダー:侵入者)に当て、全て打ち消したら勝ち、ボール(弾)を何回かそらしたら負けというものです。
ゲームのルールを次のように決めます。
- 標的のブロックは1列に10個で、3列で合計30個とする。
- ラケットはアプレットの範囲内のマウスの動きに応じて左右に動き、上下には動かない。
- ボールは上部ランダムな横位置から、斜め下、真下と方向を変えて落ちてくる。
- ボールが左右又は上部の壁に当たった場合は、ボールはそのまま反転する。
- ラケットでボールを弾いた場合は、ボールはそのまま反転する。
但し、垂直に落ちてきた場合は、ラケットの左端ならば左上に反転し、右端ならば右上に反転する。
- ボールをそらした場合は、ボールは下部の壁の下に消え、次のボールが生成される。
- ボールは3個あり、3回そらした場合はゲームオーバーになる。
- ボールを標的のブロックに当てると、そのブロックは消え、ボールは反転する。
- 標的のブロックが1つ消えるたびに得点は1点加算される。(30点満点)
- 標的のブロックには2種類あり、赤のブロックではボールの反射後のスピードが2倍に速くなる。
- 全ての標的のブロックを消したら勝ちで、ゲーム終了。
- ゲーム開始時とゲーム終了時にはボタンを表示し、クリックすることでゲームが再開する。
では先に動きとフォーム内容を確認したい方は確認テストのページを参照して下さい。
使用する画像ファイルはボールのみで、8×8ドットのただの円球です。(ball.gif)
|
2.仮想画面の利用
アップレットでの簡単なアニメーションでは「動くもの」を1コマずつスレッドで描画しますが、今回はボール(弾)の動きが「動くもの」となります。
ここでは得点の表示、標的のブロックの消去、ボール(弾)の流れ、ラケットの動きと全てが1コマずつ変わるので、
これらを順番通りに画面に表示しては、多少のずれにより全体がぎこちない表示になってしまいます。
ここで「仮想画面」と呼ばれる手法で複数の「動くもの」をまとめて表示させ、一様に動くように見せかけるようにします。
仮想画面はその名の通り、メモリ上の仮想の画面で実際には見えません。この上にいろいろな画像を書き込み、1コマまとめて実画面に書き込みをします。
さらに実画面に表示中に次の内容の画像を書き進めています。ディスク上でのキャッシュメモリ的な役割を果たすので「ダブルバッファ」とも呼ばれます。
このほかに更新する部分を変化した部分のみにするために updateメソッドをオーバーライドすることも忘れてはいけません。
これでよりいっそうスムーズな動きに見えるでしょう。
|
 |
| 仮想画面の利用 |
|
|
| |
 |
|