問題

前回のプログラムを改良し,ユーザがマウスをクリックするとUFOが複数の弾を同時に撃てるようにせよ.

実行例:

ヒント:

多数の弾を扱う,これは,Bulletクラスのインスタンスが複数個同時に存在することになる.
よって配列の出番となる.

具体的には,いままで扱う弾の数が1個であるので,UFOのbullet属性は以下のように宣言していた.

Bullet bullet;

これでは1個の弾しか存在することができない.よって配列を使用し,

Bullet[] bullet;

とする.

配列が生成された時点で,配列の各場所には"空"であることを示す

null

が代入されている.

そのため,例えば配列のi番目が空かどうかは,以下のように判定できる

if (bullet[i] == null)
{
  //bulletのi番目が空であれば...する
}

空の場所に対して何らかのメソッドを実行しようとすると,不正な処理としてプログラム実行中に,プログラムが停止してしまうので注意すること.

具体的には,配列が空でないかをチェックしてから,メソッドを実行しなければいけない.よって,次のようなプログラムとなる.

if (bullet[i] != null)//配列のi番目が空でなければ...
{
  //i番目の弾を動かす
  bullet[i].move();
}

プログラムひな形(UFOクラス):

class UFO
{
 float x;
 float y;
 float sx = 2;
 int type;

 Bullet[] bullet;
 
 UFO(float x, float y, int type)
 {
   this.x = x;
   this.y = y;
   this.type = type;
   //配列を生成する
 }
 
 void shoot()
 {
   //配列内の空き場所に弾を生成する
 }
 
 void removeBullets()
 {
   //配列内の不要な弾(画面外にでてしまった弾)を削除する
 }
 
 void moveBullets()
 {
   //配列内の弾を全て動かす
 }
 
 void drawBullets()
 {
   //配列内の弾を全て描画する
 }
 
 void move()
 {
   //UFOの移動(省略)
   
   removeBullets();
   moveBullets();
 }
   
 void draw()
 {
   //UFOの描画(省略)
   
   drawBullets();
 }
}

添付ファイル: filetoi.wmv 1330件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-01-09 (水) 16:31:37