VBAで書いてみた”モグラたたき”のゲームですが、一応、動いたので完成です。
でも、モグラをマウスでクリックした直後、ヒットした状態を音で表現したい。
ウインドウズでは、エラーやメッセージが表示されたらシステム音が鳴ります。
まあ、三十年前のWindows3.1から引き継がれた”wavファイル”もあるぐらい。
結構な数の種類があって、どれかを使えばもぐらたたきの臨場感も増すだろう。
それで、冒頭の再生プレイヤーは、ウインドウズXPまではアクセサリーでした。
簡単な再生プログラムでマクロから呼び出しましたが、XP以降は廃止の憂き目。
現在、動画や音楽ファイル再生は、その代わりに新型MediaPlayerを使います。
ですが、敢えてこのプレイヤーを画面に呼出してまで使う方法ではありません。
機能として呼び出して使うので、モジュールの冒頭で使用をする宣言をします。
Private Declare PtrSafe Function PlaySound Lib "winmm.dll" Alias _
"PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, _
ByVal dwFlags As Long) As Long
Sub Sample()
Dim SoundFile As String
SoundFile = "C:\Windows\Media\Windows Critical Stop.wav"
If Dir(SoundFile) = "" Then
MsgBox SoundFile & vbCrLf & "がありません。", vbExclamation
Exit Sub
End If
PlaySound SoundFile, 1, 1
End Sub
つまり、実行プログラムに当たる"winmm.dll"を指定しているのがミソなんだ。
まあ、プレイヤーの再生画面を登場させなくても、ちゃんと音が流れて来ます。
一方、ウインドウズに実装のアプリを、WindowsAPIで呼び出しす方法もある。
これは、モジュールの冒頭で、同様の宣言をしてからコードを記述する方法だ。
下記の通りですが、APIは他のC#のような他の言語でも使うので汎用性がある。
ところが、実行プロシ―ジャをみても、殆ど似通った記述で違いが分からない。
Private Declare PtrSafe 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
Sub Sample1()
Dim SoundFile As String, rc As Long
SoundFile = "C:\Windows\Media\Windows Critical Stop.wav"
If Dir(SoundFile) = "" Then
MsgBox SoundFile & vbCrLf & "がありません。", vbExclamation
Exit Sub
End If
rc = mciSendString("Play " & SoundFile, "", 0, 0)
End Sub
要するに、エクセルでVBAのコードを書く場合、両方とも使えると言う次第ね。
後は、自分の好みで使っていただくとして、”もぐらたたき”に組み込んでみた。
マウスでクリックしたら叩く音を、そしてどくろが出たらドボンの音なのです。
ですが、コード処理が早いため、この二つの音を再生させることはできないの。
というわけで、叩いた音だけにして、ゲームの臨場感を盛り上げてみた次第ね。
まあ、音の出ないゲームは、味気ない気がしないでもないし、この叩く音がやったぜという達成感が否が応でも増してくれますので、ハッスルもするのですが、
こうしてVBAの研鑽を積むのも悪くはないと思うのでした。
0 件のコメント:
コメントを投稿