トップ


固い敵を作る

敵にライフをつける

固い敵を作る前に、画像を用意しましょう。


Sample4.lzh

新しいオブジェクトRedを作成して準備完了です。

ライフとは敵が一発で死なないようにするためのバリアのような役目を果たすものです。
もっと単純に考えれば、onDieメソッドを呼び出す前に条件をつけてあげれば良さそうです。

Red.tonyu
extends SpriteChar;
function onDie() {
  appear(new Bomb(x , y ,$pat_Sample+4));
}
function atariHantei() {
  for (t in $chars) {
   if ( t is Tama && crashTo(t) )  {
     life=life-1;
     if(life<=0) {
       die();
       $score=$score+30;
     }
     t.die();
   }
  }
  if (crashTo($myChar)) $myChar.die();
}
life=3;
i=0;
if(x<$myChar.x) direction=1;
else direction=-1;
while (y<$screenHeight) {
  i++;
  y=y+1;
  x=x+vx+sin(16*y)*10+direction;
  atariHantei();
  if(p==$pat_Sample+11) vp=1;
  else if(p==$pat_Sample+13) vp=-1;
  if(i%20==0) p=p+vp;
  update();
}

lifeという変数を用いて、3回当たって初めて破壊される敵を作成できました。

life=3;
と初期設定を行い、atariHanteiメソッドの中でlifeを減らし、if文でlifeが0以下かどうかを調べています。
スコアは3回当てないと死なないので少し高めに30と設定しました。

また、Redの動きがYellowとまったく同じではつまらないので、少し変化を加えてみました。
Redオブジェクトが発生したときにmyCharのx座標よりも左側にいれば(x<$myChar.x)右側に少しずつずれてゆくようにしてあります。
また、横に揺れる幅を小さくしてみました。

最後に、Yellow同様にUFOから発生させるようにしましょう。

UFO.tonyu
extends SpriteChar;
function appearEnemy() {
   if (rnd( 50 )==0) appear(new Enemy(x,y,$pat_Sample+2));
   if (rnd( 100 )==0 && $score>100) appear(new Yellow(x,y,$pat_Sample+8));
   if (rnd( 200 )==0 && $score>200) appear(new Red(x,y,$pat_Sample+11));
}
while(1) {
 while(x<$screenWidth) {
   x=x+2;
   appearEnemy();
   update();
 }
 while(x>0) {
   x=x-2;
   appearEnemy();
   update();
 }
}

これで、ライフのついた敵も作成できました。
しかし、あまりライフのある敵をたくさん作りすぎると、ゲームバランスが崩れてつまらないゲームになってしまう恐れもあります。
今回は200分の1の確率で発生するように設定しました。

だんだん、シューティングらしいシューティングに近づいてきたと思います。次に、敵の数も多くなってきましたので、ゲームとしての体裁を整えてみましょう。

  トップ