SDLでボン○ーマンを作ってみる4


今回は、爆弾を置いた後の爆発する処理と、BGMの再生、効果音の再生する処理を追加。


サンプル画像







ソースコードはこちら

http://www.geocities.jp/finnissy/data/090726.zip




snd.c

#include "snd.h"

static const char *se_path[] = {
	PATH_SE_SOUND01,
	PATH_SE_SOUND02,
};

static const char *bgm_path[] = {
	PATH_SOUND01,
};

static boolean flg_initialize = FALSE;

boolean init_snd(void)
{
	int i;

	if( flg_initialize )
		return TRUE;

	// initialize lib
	if(Mix_OpenAudio(MIX_DEFAULT_FREQUENCY, MIX_DEFAULT_FORMAT, 2, 2048) < 0)
	{
		fprintf(stderr, "Error \"snd.c\" : %s\n",Mix_GetError());
		return FALSE;
	}

	// sound effect loading
	for(i = 0;i < PATH_SE_MAX;i++)
	{
		if( !effect.arr[i] )
		{
			effect.arr[i] = Mix_LoadWAV( se_path[i] );
			if(effect.arr[i] == NULL)
				return FALSE;
		}
	}

	// sound BGM loading
	for(i = 0;i < PATH_SOUND_MAX;i++)
	{
		if( !sounds.arr[i] )
		{
			sounds.arr[i] = Mix_LoadMUS( bgm_path[i] );
			if(effect.arr[i] == NULL)
				return FALSE;
		}
	}

	flg_initialize = TRUE;

	return TRUE;
}


void quit_snd(void)
{
	int i;

	stop_bgm();	//BGM再生停止

	for(i = 0;i < PATH_SE_MAX;i++)
	{
		if(effect.arr[i] != NULL)
			Mix_FreeChunk( effect.arr[i] );
	}

	for(i = 0;i < PATH_SE_MAX;i++)
	{
		if(effect.arr[i] != NULL)
			Mix_FreeChunk( effect.arr[i] );
	}

	Mix_CloseAudio();		//destroy lib

	flg_initialize = FALSE;
}


void play_se(Mix_Chunk *se)
{
	if(se != NULL)
	{
		if(Mix_PlayChannel(-1,se,0) == -1)
			printf("error playing sound effect \n");
	}
	else printf("error playing sound effect \n");
}


void play_bgm(Mix_Music *music)
{
	if(music != NULL)
	{
		if(Mix_PlayMusic(music,-1) < 0)
			printf("error playing sound BGM \n");
	}
	else printf("error playing sound BGM \n");
}


void pause_bgm(void)
{
	Mix_PausedMusic();
}

void stop_bgm(void)
{
	Mix_HaltMusic();
}

void resume_bmg(void)
{
	Mix_ResumeMusic();
}