トップ


ゲームオーバーをつける。

ゲームオーバーをつけてみましょう。ゲームオーバーの前に爆発したときなどの効果音も付け加えて見ましょう。

効果音をつける

まず、爆発したときの効果音が無いのはちょっと寂しいです。爆発したときの効果音を付けてみましょう。

sound_effect.lzh

このFileからbomb.wavとshoot.wavを先ほどと同じ手順で「BGM・効果音」から追加してみましょう。

Enemy.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+mark;
       $mplayer.play($se_bomb,0,60);
     }
     t.die();
   }
  }
  if (crashTo($myChar)) $myChar.die();
}
myChar.tonyu
extends SpriteChar;
 
function onDie() {
  appear(new Bomb($myChar.x , $myChar.y ,$pat_Sample+4));
}

function atariHantei() {
  for (t in $chars) {
   if ( t is Item && crashTo(t) )  {
     if(t.p==22) if(a.get(0)>=11) a.set(0,a.get(0)-1);
     if(t.p==17) if(a.get(1)<=3) a.set(1,a.get(1)+1);
     t.die();
   }
  }
}
a=new Array();
a.add(20);
a.add(1);
while(1) {
  i++;
  if (getkey(39)>0 && x<$screenWidth-20 ) x=x+3;
  if (getkey(37)>0 && x>20) x=x-3;
  if (getkey(32)>1 && i>a.get(0)) {
    $mplayer.play($se_shoot,0,80);
    for(ii=1;ii<=a.get(1);ii++) appear(new Tama((x-5*(a.get(1)-1-2*(ii-1))),y,$pat_Sample+1));
    i=0;
  }
  atariHantei();
  update();
}

Bombクラスに直接効果音を鳴らさせることは推奨されません。なぜならば、画面外に敵が出たときにもdie()関数が呼ばれてしまうため、敵をやっつけてもいないのに効果音がなってしまうからです。
また、同様にTamaクラスに$se_shootを置くことも推奨されません。myCharが2つ以上弾を出す時があります。

ゲームオーバー画面をつける

まず、myCharがいなくなった場合に、敵が出てこないようにしましょう。

UFO.tonyu
extends SpriteChar;

function appearEnemy() {
   if (rnd( 400 )==0) appear(new Item(rnd(530)+15,y,22));
   if (rnd( 1600 )==0) appear(new Item(rnd(530)+15,y,17));
   if (rnd( 50 )==0) appear(new skyBlue(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));
   if (rnd( 800 )==0 && $score>300) appear(new Green(x,y+20,$pat_Sample+19));
   if (rnd( 1600 )==0 && $score>400) appear(new Blue(x,y+20,$pat_Sample+22));
}
vx=2;
while(1) {
  if(! $myChar.isDead()) {
    x=x+vx;
    if(x>$screenWidth - 40 || x<40) vx=-vx;
    appearEnemy();
  }
  update();
}

以前のソースに変更も加えて見やす訂正も加えました。$mychar.isDead()の時には動作は止まり敵も出現しなくなります。つまり、myCharが死んでいる場合には、敵は出現してこなくなります。

次に、画面を暗くして、Game Overという文字を出させましょう。

Text.tonyu
extends TextChar;

$bgcolor=11816980;
$score=0;
$se_shootingsample1.play();
i=255;
while(1) {
  text="Score:"+$score;
  if($myChar.isDead()) {
    if(i>0) i--;
    if(i==250) for(t in $chars) if(t is Enemy) t.die();
if(i==200) appear(new Blue($screenWidth/2,$UFO.y,$pat_Sample+22));
if(i==1) $UFO.die(); $bgcolor=color( 0, 0, i); drawText($screenWidth/2-130,$screenHeight/2-30,"Game Over",color(255-i,255-i,255-i),50); update(); } else update(); }

画面は青色からだんだん暗くなり、文字は黒からだんだんと白色に変わってゆきます。
変数iが250の時にEnemyクラスを継承する全てのオブジェクトのdie関数を呼び、変数iが200の時にBlueをxは中心、yはUFOの場所に呼び出しました。
また、変数iが1の時にUFOが消えるようにしてみました。
これで、最後はスコアとGameOverの文字と手を振るBlueが残されるはずです。

次に、ゲームオーバー時の音楽を加えて見ましょう。

shootingsample_gameover.lzh

myChar.tonyu
extends SpriteChar;
 
function onDie() {
  appear(new Bomb($myChar.x , $myChar.y ,$pat_Sample+4));
  $mplayer.stop();
  $mplayer.play($se_shootingsample_gameover,0,80);
}

function atariHantei() {
  for (t in $chars) {
   if ( t is Item && crashTo(t) )  {
     if(t.p==22) if(a.get(0)>=11) a.set(0,a.get(0)-1);
     if(t.p==17) if(a.get(1)<=3) a.set(1,a.get(1)+1);
     t.die();
   }
  }
}
a=new Array();
a.add(20);
a.add(1);
while(1) {
  i++;
  if (getkey(39)>0 && x<$screenWidth-20 ) x=x+3;
  if (getkey(37)>0 && x>20) x=x-3;
  if (getkey(32)>1 && i>a.get(0)) {
    $mplayer.play($se_shoot,0,80);
    for(ii=1;ii<=a.get(1);ii++) appear(new Tama((x-5*(a.get(1)-1-2*(ii-1))),y,$pat_Sample+1));
    i=0;
  }
  atariHantei();
  update();
}

音楽は念のため、一度止めてからゲームオーバーの音楽を鳴らせるようにしておきました。
これで、ゲームオーバーの画面も完成です。

次は、いよいよボスを作ってみましょう。

  トップ