Mrうどんの備忘録

プログラムの備忘録

キーボードを打ったら音がなるやつを作ってみた

どーも久しぶりです(・ω・)
今回はタイトルの通りdxlibを使ってキーボードを打つと音が鳴るやつを作ったので紹介します。

使用言語:C
使用ライブラリ:dxlib
開発IDEMicrosoft Visual Studio(今回は2017Community)
OS:Windows 10

dxlibは簡潔に言うと、プログラムがあまり書けない人でも簡単にゲームが作れるようにされているライブラリです。

以下が全プログラムです。コピペして遊んでみてください( •̀ᴗ•́ )/

プログラムの開始、終了時にダイアログが出ます。
escapeキーを押すと終了します。
音声ファイルは.slnと同じディレクトリ内(場所)に置かないとならないので注意⚠

遊ぶ場合は一度Visual Studioでリリースビルドでexeファイルにするとよいでしょう
そうするとReleaseフォルダにexeファイルが作られるので毎回Visual Studioを開かなくてもexeファイルを開くだけで動かすことができます
まとめました。よかったらご覧下さい。
udon-bibouroku.hatenablog.com
exeファイルを開くときは音声ファイルを同じディレクトリ(場所)に置いてください

#include "DxLib.h"
#include <stdio.h>
void message_box(char *string) {//ダイアログを作る
	char str[30];
	sprintf(str,"Keyboardsoundsを%sします",string);
	MessageBox(
		NULL,
		TEXT(str),
		TEXT("Keyboardsounds"),
		MB_OK | MB_ICONINFORMATION | MB_SERVICE_NOTIFICATION);
}
int keycheck(char *Buf)//キーのチェック
{
	if (Buf[KEY_INPUT_ESCAPE] == 1) return 1;//escが押されたら終了
	else if (Buf[KEY_INPUT_RETURN] == 1) {//returnが押されたらa11.wavを再生
		PlaySoundFile("a11.wav", DX_PLAYTYPE_BACK);
	}
	else {
		for (int i = 0; i < 256; i++) {
			/*日本語入力モードになると112番目( カタカナひらがなキー )と148番目( 半角/全角キー )のキーが
			押されっぱなしになるのはOSの仕様なので『何かキーが押されているか』の判定で除外していただくしかありません */
			if (i == 112 || i == 148) continue;
			if (Buf[i] == 1) PlaySoundFile("b11.wav", DX_PLAYTYPE_BACK);// キーが押されたらb11.wavを再生
		}
	}
}
// プログラムは WinMain から始まります
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	char Buf[256];//キー入力監視用

	ChangeWindowMode(TRUE);   // ウィンドウモードで起動
	SetWindowVisibleFlag(FALSE);//ウィンドウを非表示
	SetUseDirectInputFlag(TRUE);//非アクティブ時のキー入力
	SetAlwaysRunFlag(TRUE);   //非アクティブ画面でも処理を続ける

	if (DxLib_Init() == -1) return -1;// DXライブラリ初期化処理 エラーが起きたら直ちに終了

	message_box("開始");
	while (1)
	{
		GetHitKeyStateAll(Buf);// すべてのキーの状態を得る
		if (keycheck(Buf) == 1) { message_box("終了"); break; }//1が返ってきたらbreak
	}
	DxLib_End();// dxlibの終了処理
	return 0;// ソフトの終了 
}

P.S.

以下のURLに今回作ったプログラムをexeファイルにしたものを載せましたので良かったらダウンロードしてみてください
https://drive.google.com/open?id=0B2KK7u6dfPNqeEZNYl9EVVhvYkE