「3Dっぽい縦シューティングゲームをつくる」は前回で終わりにしたのですが、プログラミング講座 第34回【シューティングゲーム作成(最終回)/JavaScript】で宿題を出されていたのでできそうなもので面白そうなものをやっておきます。

BGMや効果音がないのはさみしいので付け加えます。C#で音を鳴らすにはどうすればいいかはMIDI、MP3などの音楽ファイルを再生する – .NET Tips (VB.NET,C#…)が参考になります。このなかの「Windows Media Playerをフォームに配置せずに再生する」方法を採用します。

MCIを使用する方法だと停止しないと再生できません。しかしWindows Media Player Controlを使用する方法であればWindows Media Player Controlを複数生成することで同時に音を鳴らすことができます。BGMと効果音を同時に鳴らすことができるのです。

BGMは以下を使います。

戦闘曲30 無料ダウンロード/魔王魂 フリーのゲーム音楽素材

戦闘曲33 無料ダウンロード/魔王魂 フリーのゲーム音楽素材

途中でBGMが終了して途切れてしまわないようにBGMが終了する時刻にボス戦の前なのか最中なのかを調べて適切なBGMを再生します。

また効果音も入れます。効果音はここからいただきました。

戦闘[2]|効果音ラボ

まずは敵弾を食らったときの音です。

次に自機が弾丸を発射したときや敵に命中したときの音を鳴らそうとするとちょっとした問題が発生。

短い間隔で連続して音を鳴らそうとすると実際に音がなりはじめる前に次の音を鳴らそうとして前の音がキャンセルされてしまうのか、音が出なくなってしまうのです。

そこで3つのWMPLib.WindowsMediaPlayerオブジェクトを作成して交互に使うことにします。それから自機が弾丸を発射したときと敵に命中したときの両方で音をならそうとしてもうまく聞こえないので、命中時のみ音を鳴らすことにします。

ボスを倒したときは長めの爆発音にします。このときザコ敵がいるときはいっしょに爆発させていますが、単にenemy.IsDead = trueでは点数が加算されないので、Lifeプロパティを0にしています。これだと点数が加算されます。