文系人間がプログラミングをはじめてみた。

プログラミング初心者のゼロからの勉強記録。

VBAテトリス 詳細編 ゲーム中に音楽を流す

どうもこんにちは。

 

今回もマクロで作ったテトリスのコード解説をしていきます。

テトリスがどんな感じのものになっているかは以下リンクからご確認ください。

programminghajimetemita.hatenablog.com

 

今回の内容はゲーム中に音楽を流す方法になります。

では内容に入っていきましょう。

 

 

1.ゲーム中に音楽を流すコード

ゲーム中に音楽を流すコードですが、VBAの枠外の力を借りて行います。

具体的には、「mciSendString」という関数を利用します。

この関数の利用により任意の音楽ファイルの再生等を行うことができるようになります。

 

この関数の使い方は以前の記事でキーボードが押されたことを検知する関数を利用したときと似たような感じになります。

programminghajimetemita.hatenablog.com

 

まずは、当該関数をマクロ内で利用できるように、

コードの冒頭で以下の宣言を行います。

 

Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA"
(ByVal lpstrCommand As String, ByVal lpstrReturnString As String,
ByVal uReturnLength As Long, ByVal hwndCallBack As Long) As Long

 

書かれているコードの内容は正直わかりません。笑

内容はわかりませんが、これを書いておけばmciSendString関数は確かです。

詳しい内容が知りたい方はぜひググってみてください。

 

音楽を再生するときは以下のようなコード記述となります。

 

        Call mciSendString("Play " & 音楽ファイルのアドレス, "", 0, 0)

 

赤字部分は自分が流したい音楽ファイルの保存先のアドレスを記載してください。

 

音楽を停止するときは以下のようなコード記述となります。

 

     Call mciSendString("stop " & 音楽ファイルのアドレス, "", 0, 0)

 

赤字部分は再生時と同様、停止したい音楽ファイルの保存先のアドレスを記載してください。

 

以上で音楽を流すために利用するコードの解説を終わります。

次はマクロで作ったテトリスの中でこれをどう活用したかについて解説していきます。

 

2.自作テトリスで実際に記載したコード

自作テトリスの中では、以下の2つの目的で音楽を流すコードを利用しました。

・ ゲーム開始からゲーム終了までゲーム用の音楽を繰り返し再生する

・ ゲーム終了時にゲーム用の音楽を停止し、終了用の音楽を再生する

順に解説していきたいと思います。

 

・ ゲーム開始からゲーム終了までゲーム用の音楽を繰り返し再生する

音楽を再生するのに使うコードは1.で紹介したコードになります。

ここで、当該コードでは一度再生するのみで繰り返し再生は行えません。

ということで、いかにして繰り返し再生を行わせるかがポイントになります。

 

私が作ったプログラムでは、テトリミノの落下に関する繰り返し処理の中に

音楽を再生するコードを入れることで実現しました。

こうすることで、テトリミノが一マス落下するごとに音楽再生コードが実行されるので、

音楽の再生が終了してから再度再生するまでのタイムラグをかなり短くすることができます。

 

なお、音楽再生中に再生コードが実行されても、

再生中の音楽が中断されて最初から再生される、

といったような挙動にはなりません。

 

なので、音楽再生⇒終了⇒再度、音楽再生⇒終了・・・という感じで、

繰り返し再生が行うことができます。

 

・ ゲーム終了時にゲーム用の音楽を停止し、終了用の音楽を再生する

これはゲームオーバーの演出を行うマクロの中に、

ゲーム用の音楽を停止するコードと終了用の音楽を再生するコードを組み込みました。

コードの内容は1.で紹介したとおりです。

実際のコードは以下のようになります。

 

    Call mciSendString("stop " & sound1, "", 0, 0)
    Call mciSendString("Play " & sound2, "", 0, 0)

 

※ sound1はゲーム用の音楽ファイルのアドレス、
sound2は終了用の音楽ファイルのアドレスを指す変数

 

以上で利用方法の解説を終わります。

 

3.おわりに

今回はゲーム中に音楽を流す方法について解説しました。

今回の解説でテトリスのコード解説は終了となります。

 

これまで長々とテトリスの解説を行ってきましたが、いかがでしたでしょうか?

ご興味をもってもらえ、自分でもできそうだなという感覚になってもらえていたらうれしい限りです。

 

次回からはマクロで作った別のゲームのコード解説を行っていこうと思います。

ではまた。