ある程度ゲームの枠組みが完成したところで、BGMとSEを実装し、よりゲームと呼べるものにグレードアップしましょう。
シューティングゲームにおけるBGMとSEの実装【Pygame】
まずは、BGMとSEを発生させるタイミングを考えていきましょう。
- ゲーム中に流すBGM
- ゲームクリア時のBGM
- ゲームオーバー時のBGM
- プレイヤーが弾を発射する際のSE
- プレイヤーがダメージを受けた際のSE
- 敵を倒した際のSE
箇条書きにしてみましたが、最低でもこれぐらいのBGM及びSEが必要になりますね。ゲームクリアとゲームオーバーの際に流れるのは厳密に言うとジングルといって、ラジオ番組でコーナーが切り替わるタイミングで流れるような短い音楽なんですけどね。
これらの要点を踏まえて、プログラムに修正を加えていきます。
シューティングゲームにサウンド命令を追記する
PygameでBGMを流したい場合は「pygame.mixer.music.load(〇〇)」でロードして、play(引数)で再生出来ます。また、SEの場合は「pygame.mixer.Sound(○○)」で読み込んでplay()で再生します。
まずは、タイトル画面からゲームプレイ画面に進んだ時点でフィールドBGMを流します。無限ループさせたいので引数には「-1」を指定します。(236~237行目)
ゲームオーバー及びゲームクリア画面に移行したら、「pygame.mixer.music.stop()」でメインBGMを停止させて、各ジングルを再生させます。ここでは、無限ループさせる必要はないので、引数には「0」を指定します。
ジングルの長さをチェックしながら、タイマー変数を調整して、タイトル画面に戻すようにすると良いと思います。
SEに関しては、各タイミングに対応するSE変数を用意してファイルを読み込むようにします。
後は、SEを再生させたいタイミングにて「変数.play()」と記述すればOKです。
ゲームを実行して、BGMとSEが意図した通り再生されるか確認しましょう。私の録画環境が悪くこの動画では若干音ズレしていますが、正しいタイミングで再生出来ています。
BGMとSEを付け加えたことによって、ゲームプレイに爽快感が生まれると思います。