ページ 11

タイマーで指定した時間に音を鳴らしたい2

Posted: 2014年11月05日(水) 15:42
by ノダッシー
お久しぶりです。前回作成した(して頂いた)タイマーに指定した時間に音がなるようにソースコードを追加してみましたが時間になっても音がなりません
Cは新C言語入門 スーパービギナー編 (C言語実用マスターシリーズ) を読ん後少しゲームプログラミングの館を進め
分からない関数はリファレンスを見て分からなければググります
何の処理をしているのか分からない個所があります
お手数おかけしますが、コメントと解説多めでよろしくお願いします

具体的に弄った個所は

コード:

		int kizyunZikoku[16][2] = {
			//↓test3.wavを鳴らしたい
			{ 8, 56  },{  9, 0 },
			{ 9, 55  },{ 10, 0 },
			{ 10, 55 },{ 11, 0 },
			{ 12, 0  },{ 12, 40 },
			{ 13, 40 },{ 13, 45 },
			{ 14, 45 },{ 14, 50 },
			{ 16, 0  },{ 16, 5 },
			{ 17, 0  },{ 18, 0}
				//↑test2.wavを鳴らしたい
ここと、

コード:

		bool zikanWoHyouziSuru[16] = {
			true, true,
			true, true,
			true, true,
			true, true,
			true, true,
			true, true,
			true, true,
			true, true,
		};
ここ

コード:

if (maeNiOtoWoNarasitaZikantai != imaNoZikantai) {
			maeNiOtoWoNarasitaZikantai = imaNoZikantai;
			if (Date.Hour == 18 && Date.Min == 0){
				PlaySoundFile("test1.wav", DX_PLAYTYPE_BACK);
			}
			if (Date.Hour == 17 && Date.Min == 0){
				PlaySoundFile("test2.wav", DX_PLAYTYPE_BACK);
			}
			if (Date.Hour == 16 && Date.Min == 5){
				PlaySoundFile("test2.wav", DX_PLAYTYPE_BACK);
			}
			if (Date.Hour == 8 && Date.Min == 56){
				PlaySoundFile("test3.wav", DX_PLAYTYPE_BACK);
			}else{
				PlaySoundFile("test.wav", DX_PLAYTYPE_BACK);
			}
		}
ここです

↓が全体のソースコードです

コード:

#pragma warning(disable : 4819)
#include    "DxLib.h"
#include    <fstream>
#include    <string>
#include    <iostream>
#include    <stdio.h>




//アニメーション数
#define ANIME_MAX 5





//アニメーション
//画像番号
int animeno = 1;
bool animeleft = false;
bool animeright = true;
int Image[6];

// キャラクタのアニメーション
void CharaAnimeUpdate()
{
	//現在の時間を調べる
	static LONGLONG startanime = GetNowHiPerformanceCount();

	//300ミリ秒ごとにアニメーションの更新処理
	if (GetNowHiPerformanceCount() - startanime >= 300000)
	{
		startanime = GetNowHiPerformanceCount();

		if (animeleft == true && animeright == false)
		{
			animeno--;
		}
		if (animeright == true && animeleft == false)
		{
			animeno++;
		}
	}

	if (animeno == 0)
	{
		animeright = true;
		animeleft = false;
	}
	if (animeno == ANIME_MAX)
	{
		animeleft = true;
		animeright = false;
	}

}


// プログラムは WinMain から始まります
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
	LPSTR lpCmdLine, int nCmdShow)
{

	int minute;

	// 未使用の引数の警告を潰す
	(void)hInstance; (void)hPrevInstance; (void)lpCmdLine; (void)nCmdShow;

	SetOutApplicationLogValidFlag(FALSE); //ログ出力をするか否か
	ChangeWindowMode(TRUE); // ウインドウモードかフルスクリーンか
	SetGraphMode(1280, 800, 16); //画面サイズを設定します
	SetAlwaysRunFlag(TRUE);

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

	SetBackgroundColor(0xFF, 0xFF, 0xFF); //背景の色を設定します

	int moziNoIro = GetColor(0, 0, 0);
	int keikaZikanNoIro = GetColor(217, 150, 148);
	int nokoriZikanNoIro = GetColor(0, 176, 80);
	int geeziNoKyoukaiSenNoIro = GetColor(56, 93, 138);
	int migiNoSenNoIro = GetColor(106, 255, 106);
	int hidariNoSenNoIro = GetColor(63, 93, 141);

	DATEDATA Date;

	int A = 1280; //最大の値
	int B = 0; //最小の値
	int C = 0;//???
	int D = 0; //カウントダウン
	int E = 0; //表示用
	int X1 = 0;
	int X2 = 1280;
	int Y1 = 150;
	int Y2 = 250;
	int g_smallfont = CreateFontToHandle("メイリオ", 40, -1, DX_FONTTYPE_ANTIALIASING);		//小フォント
	int g_middlefont = CreateFontToHandle("メイリオ", 70, -1, DX_FONTTYPE_ANTIALIASING);	//中フォント
	int g_Lagefont = CreateFontToHandle("メイリオ", 100, -1, DX_FONTTYPE_ANTIALIASING);		//大フォント
	int jikann;
	int gogo;
	//int Handle;//背景画像描画用
	//int Handle_wav;


	//全体を表すゲージ
	int zenntai = 7 * 60;   //7時間 * 60分 = 420分
	int NowJikann = zenntai; //現在の残り時間
	int F = 7 * 60;         //全体の残り時間初期値420分
	int Width = 480;
	int G;


	//円グラフ描画に使う変数
	int GrHandle = LoadGraph("gauge.bmp");//円の画像を読み込む
	int CenterX = 600, CenterY = 540, Percent = 100, StartPercent = 0.0;


	int maeNiOtoWoNarasitaZikantai = -1;
	bool saisyoNoFureemuDeAru = true;

	// 時刻の設定
	int hazimariNoZikoku = 60 * (60 * 9 + 0) + 0; // 開始時刻 09:00:00
	int owariNoZikoku = hazimariNoZikoku + 60 * zenntai; // 終了時刻

	LoadDivGraph("neko.bmp", 6, 6, 1, 138, 86, Image);
	while (1){
		if (ProcessMessage() == -1)break; //ウインドウのメッセージを処理する
		GetDateTime(&Date);

		/* テスト用
		// 時刻を60倍の速さで進ませる
		Date.Hour = Date.Min % 24;
		Date.Min = Date.Sec;
		Date.Sec = 0;
		*/
		SetDrawScreen(DX_SCREEN_BACK); //描画する画面を設定します
		ClearDrawScreen(); //画面に描画されている内容を消します

		// テスト用に認識している現在時刻を表示する
		//DrawFormatString(500, 350, GetColor(0, 0, 0), "%02d:%02d:%02d", Date.Hour, Date.Min, Date.Sec);





		//時間に合わせてメッセージが変わる
		const char* messages[18] = {
			"",
			" ",
			" ",
			" ",
			" ",
			" ", // 5
			" ",
			" ",
			"おはようござます",
			"おはようございます",
			"今日も一日頑張りましょう!", // 10
			"もうすぐお昼休みだ!",
			"休憩時間です!",
			"午後も頑張りましょう",
			"こんにちは",
			"残り1時間をきりました", // 15
			"お疲れ様でした",
			"お疲れ様でした"
		};




		// 基準時刻
		int kizyunZikoku[16][2] = {
			//↓test3.wavを鳴らしたい
			{ 8, 56  },{  9, 0 },
			{ 9, 55  },{ 10, 0 },
			{ 10, 55 },{ 11, 0 },
			{ 12, 0  },{ 12, 40 },
			{ 13, 40 },{ 13, 45 },
			{ 14, 45 },{ 14, 50 },
			{ 16, 0  },{ 16, 5 },
			{ 17, 0  },{ 18, 0}
				//↑test2.wavを鳴らしたい
		};
		// その基準時刻と次の基準時刻の間でゲージを動かすか
		bool zikanWoHyouziSuru[16] = {
			true, true,
			true, true,
			true, true,
			true, true,
			true, true,
			true, true,
			true, true,
			true, true,
		};

		// 今の時刻がどこに該当するかを計算する
		int imaNoZikoku = 60 * (60 * Date.Hour + Date.Min) + Date.Sec;//秒に変換
		int maeNoKizyunZikoku = 0;
		int tugiNoKizyunZikoku = 0;
		int imaNoZikantai = -1;
		for (int i = 0; i < 12; i++) {
			int miteiruKizyunZikoku = 60 * (60 * kizyunZikoku[i][0] + kizyunZikoku[i][1]);//現在の時間を秒に変換
			if (imaNoZikoku < miteiruKizyunZikoku) {   //    -1 < 32400
				if (i > 0) {	//i = 0
					imaNoZikantai = i - 1;
					maeNoKizyunZikoku = 60 * (60 * kizyunZikoku[i - 1][0] + kizyunZikoku[i - 1][1]);
					tugiNoKizyunZikoku = 60 * (60 * kizyunZikoku[i][0] + kizyunZikoku[i][1]);
				}
				break;
			}
		}
		if (saisyoNoFureemuDeAru) {
			maeNiOtoWoNarasitaZikantai = imaNoZikantai;
			saisyoNoFureemuDeAru = false;
		}

		// 経過時間と残り時間を計算し、ゲージのパラメータを設定する
		if (imaNoZikantai >= 0 && zikanWoHyouziSuru[imaNoZikantai]) {
			// 表示する時間
			minute = (imaNoZikoku - maeNoKizyunZikoku) / 60;
			E = (tugiNoKizyunZikoku - maeNoKizyunZikoku) / 60;
			D = (tugiNoKizyunZikoku - imaNoZikoku) / 60;
			// ゲージのパラメータ
			A = tugiNoKizyunZikoku;
			B = maeNoKizyunZikoku;
			C = imaNoZikoku;
		}
		else {
			// 表示する時間
			minute = 99;
			E = 99;
			D = 99;
			// ゲージのパラメータ
			A = 640;
			B = 0;
			C = 0;
		}

		// 全体の残り時間を計算する
		if (imaNoZikoku < hazimariNoZikoku) {
			// 始まっていない
			F = 60 * zenntai;
		}
		else if (owariNoZikoku < imaNoZikoku) {
			// 終わった後
			F = 0;
		}
		else {
			// 実行中
			F = owariNoZikoku - imaNoZikoku;
		}
		// 円グラフのパラメータを設定する
		Percent = (60 * zenntai - F) * 100 / (60 * zenntai);

		// 棒グラフのパラメータを設定する
		G = F * Width / (60 * zenntai);
		
		// 残り時間を分に変換する
		F = (F + 59) / 60;

		// 情報が正しくなるように補正する
		if (imaNoZikoku % 60 == 0) D--;

		// 午前と午後を分ける
		if (Date.Hour >= 13){
			jikann = Date.Hour - 12;
			gogo = 1;
		}
		else{
			jikann = Date.Hour;
			gogo = 0;
		}


		//壁紙
		//Handle = LoadGraph(""); // 画像をロード
		//DrawGraph(0, 0, Handle, TRUE); // データハンドルを使って画像を描画
		int YzahyounoHyouji = 0;
		int XzahyounoHyouji = 0;
		DrawFormatStringToHandle(XzahyounoHyouji +100, YzahyounoHyouji + 280, keikaZikanNoIro, g_middlefont, "経過時間"); //説明
		DrawFormatStringToHandle(XzahyounoHyouji +950, YzahyounoHyouji + 280, nokoriZikanNoIro, g_middlefont, "残り時間"); //説明
		DrawFormatStringToHandle(XzahyounoHyouji + 100, YzahyounoHyouji + 350, keikaZikanNoIro, g_Lagefont, "%d分", minute); //経過時間を描画します
		DrawFormatStringToHandle(XzahyounoHyouji + 450, YzahyounoHyouji + 350, moziNoIro, g_Lagefont, "/%d分/", E); //全体の時間を描画します
		DrawFormatStringToHandle(XzahyounoHyouji + 950, YzahyounoHyouji + 350, nokoriZikanNoIro, g_Lagefont, "%d分", D + 1); //残り時間
		DrawFormatStringToHandle(XzahyounoHyouji +430, YzahyounoHyouji + 650, moziNoIro, g_smallfont, "全体の残り時間%d分", F);//420分


		if (maeNiOtoWoNarasitaZikantai != imaNoZikantai) {
			maeNiOtoWoNarasitaZikantai = imaNoZikantai;
			if (Date.Hour == 18 && Date.Min == 0){
				PlaySoundFile("test1.wav", DX_PLAYTYPE_BACK);
			}
			if (Date.Hour == 17 && Date.Min == 0){
				PlaySoundFile("test2.wav", DX_PLAYTYPE_BACK);
			}
			if (Date.Hour == 16 && Date.Min == 5){
				PlaySoundFile("test2.wav", DX_PLAYTYPE_BACK);
			}
			if (Date.Hour == 8 && Date.Min == 56){
				PlaySoundFile("test3.wav", DX_PLAYTYPE_BACK);
			}else{
				PlaySoundFile("test.wav", DX_PLAYTYPE_BACK);
			}
		}


		DrawFormatStringToHandle(XzahyounoHyouji +750, YzahyounoHyouji +700, moziNoIro, g_middlefont, "%s%d時%d分", gogo ? "午後" : "午前", jikann, Date.Min);

		//ゲージの描画
		DrawBox(0, 150, 1920, 250, nokoriZikanNoIro, TRUE);
		int geeziNoKawarime = X1 + (X2 - X1)*(C - B) / (A - B);

		DrawBox(X1, Y1, geeziNoKawarime, Y2, keikaZikanNoIro, TRUE);
		

		//背景
		LoadGraphScreen(20, 50, "haikei.png", TRUE);

		//キャラを表示する
				CharaAnimeUpdate();
				DrawGraph(geeziNoKawarime-150, 73, Image[animeno], TRUE);

	


		////////////////////////////////////////////////////
		//円の描画 ここに円グラフを表示する
		DrawCircle(CenterX, CenterY, 85, nokoriZikanNoIro, TRUE);
		DrawCircleGauge(CenterX, CenterY, Percent, GrHandle, StartPercent = 0.0);
		//////////////////////////////////////////////////////

		/////////////////////////////////////////////////////
		//全体のゲージが徐々に減っていく
		//DrawBox(0, 420, 640, 480, nokoriZikanNoIro, TRUE);
		//DrawBox(0, 420, G, 480, keikaZikanNoIro, TRUE);//全体の経過時間
		////////////////////////////////////////////////////



		if (1 <= Date.Hour && Date.Hour <= 17) {
			if (Date.Hour == 12 && Date.Min > 40){
				DrawFormatStringToHandle(XzahyounoHyouji + 0, YzahyounoHyouji + 0, moziNoIro, g_Lagefont, messages[Date.Hour + 1], D); //メッセージを表示
			}
			else
				DrawFormatStringToHandle(XzahyounoHyouji + 0, YzahyounoHyouji + 0, moziNoIro, g_Lagefont, messages[Date.Hour], D); //メッセージを表示
		}



		ScreenFlip(); //DX_SCREEN_BACKに描画した画像を表示します


	}

	DxLib_End(); // DXライブラリ使用の終了処理

	return 0; // ソフトの終了 
}

Re: タイマーで指定した時間に音を鳴らしたい2

Posted: 2014年11月05日(水) 18:47
by みけCAT
修正してみました。

コード:

#pragma warning(disable : 4819)
#include    "DxLib.h"
#include    <fstream>
#include    <string>
#include    <iostream>
#include    <stdio.h>




//アニメーション数
#define ANIME_MAX 5





//アニメーション
//画像番号
int animeno = 1;
bool animeleft = false;
bool animeright = true;
int Image[6];

// キャラクタのアニメーション
void CharaAnimeUpdate()
{
	//現在の時間を調べる
	static LONGLONG startanime = GetNowHiPerformanceCount();

	//300ミリ秒ごとにアニメーションの更新処理
	if (GetNowHiPerformanceCount() - startanime >= 300000)
	{
		startanime = GetNowHiPerformanceCount();

		if (animeleft == true && animeright == false)
		{
			animeno--;
		}
		if (animeright == true && animeleft == false)
		{
			animeno++;
		}
	}

	if (animeno == 0)
	{
		animeright = true;
		animeleft = false;
	}
	if (animeno == ANIME_MAX)
	{
		animeleft = true;
		animeright = false;
	}

}


// プログラムは WinMain から始まります
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
	LPSTR lpCmdLine, int nCmdShow)
{

	int minute;

	// 未使用の引数の警告を潰す
	(void)hInstance; (void)hPrevInstance; (void)lpCmdLine; (void)nCmdShow;

	SetOutApplicationLogValidFlag(FALSE); //ログ出力をするか否か
	ChangeWindowMode(TRUE); // ウインドウモードかフルスクリーンか
	SetGraphMode(1280, 800, 16); //画面サイズを設定します
	SetAlwaysRunFlag(TRUE);

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

	SetBackgroundColor(0xFF, 0xFF, 0xFF); //背景の色を設定します

	int moziNoIro = GetColor(0, 0, 0);
	int keikaZikanNoIro = GetColor(217, 150, 148);
	int nokoriZikanNoIro = GetColor(0, 176, 80);

	DATEDATA Date;

	int A = 1280; //最大の値
	int B = 0; //最小の値
	int C = 0;//???
	int D = 0; //カウントダウン
	int E = 0; //表示用
	int X1 = 0;
	int X2 = 1280;
	int Y1 = 150;
	int Y2 = 250;
	int g_smallfont = CreateFontToHandle("メイリオ", 40, -1, DX_FONTTYPE_ANTIALIASING);		//小フォント
	int g_middlefont = CreateFontToHandle("メイリオ", 70, -1, DX_FONTTYPE_ANTIALIASING);	//中フォント
	int g_Lagefont = CreateFontToHandle("メイリオ", 100, -1, DX_FONTTYPE_ANTIALIASING);		//大フォント
	int jikann;
	int gogo;
	//int Handle;//背景画像描画用
	//int Handle_wav;


	//全体を表すゲージ
	int zenntai = 7 * 60;   //7時間 * 60分 = 420分
	int F = 7 * 60;         //全体の残り時間初期値420分


	//円グラフ描画に使う変数
	int GrHandle = LoadGraph("gauge.bmp");//円の画像を読み込む
	int CenterX = 600, CenterY = 540, Percent = 100, StartPercent = 0.0;


	int maeNiOtoWoNarasitaZikantai = -1;
	bool saisyoNoFureemuDeAru = true;

	// 時刻の設定
	int hazimariNoZikoku = 60 * (60 * 9 + 0) + 0; // 開始時刻 09:00:00
	int owariNoZikoku = hazimariNoZikoku + 60 * zenntai; // 終了時刻

	LoadDivGraph("neko.bmp", 6, 6, 1, 138, 86, Image);
	while (1){
		if (ProcessMessage() == -1)break; //ウインドウのメッセージを処理する
		GetDateTime(&Date);

		/* テスト用
		// 時刻を60倍の速さで進ませる
		Date.Hour = Date.Min % 24;
		Date.Min = Date.Sec;
		Date.Sec = 0;
		*/
		SetDrawScreen(DX_SCREEN_BACK); //描画する画面を設定します
		ClearDrawScreen(); //画面に描画されている内容を消します

		// テスト用に認識している現在時刻を表示する
		//DrawFormatString(500, 350, GetColor(0, 0, 0), "%02d:%02d:%02d", Date.Hour, Date.Min, Date.Sec);





		//時間に合わせてメッセージが変わる
		const char* messages[18] = {
			"",
			" ",
			" ",
			" ",
			" ",
			" ", // 5
			" ",
			" ",
			"おはようござます",
			"おはようございます",
			"今日も一日頑張りましょう!", // 10
			"もうすぐお昼休みだ!",
			"休憩時間です!",
			"午後も頑張りましょう",
			"こんにちは",
			"残り1時間をきりました", // 15
			"お疲れ様でした",
			"お疲れ様でした"
		};




		// 基準時刻の数 
		int kizyunZikokuNoKazu = 16;
		// 基準時刻
		int kizyunZikoku[16][2] = {
			//↓test3.wavを鳴らしたい
			{ 8, 56  },{  9, 0 },
			{ 9, 55  },{ 10, 0 },
			{ 10, 55 },{ 11, 0 },
			{ 12, 0  },{ 12, 40 },
			{ 13, 40 },{ 13, 45 },
			{ 14, 45 },{ 14, 50 },
			{ 16, 0  },{ 16, 5 },
			{ 17, 0  },{ 18, 0}
				//↑test2.wavを鳴らしたい
		};
		// その基準時刻と次の基準時刻の間でゲージを動かすか
		bool zikanWoHyouziSuru[16] = {
			true, true,
			true, true,
			true, true,
			true, true,
			true, true,
			true, true,
			true, true,
			true, true,
		};
		// 鳴らす音の候補
		const char* otoNoFairuMei[4] = {
			"test.wav",
			"test1.wav",
			"test2.wav",
			"test3.wav"
		};
		// その基準時刻で鳴らす音の番号 
		int narasuOtoNoBangou[16] = {
			3, 0,
			0, 0,
			0, 0,
			0, 0,
			0, 0,
			0, 0,
			0, 2,
			2, 1
		};

		// 今の時刻がどこに該当するかを計算する
		int imaNoZikoku = 60 * (60 * Date.Hour + Date.Min) + Date.Sec;//秒に変換
		int maeNoKizyunZikoku = 0;
		int tugiNoKizyunZikoku = 0;
		bool geeziWoHyouziSuruBeki = false;
		// どこにもひっかからなければ、最後の時間帯にいる
		int imaNoZikantai = kizyunZikokuNoKazu - 1;
		for (int i = 0; i < kizyunZikokuNoKazu; i++) {
			// 次の基準時刻[秒]を取得する
			int miteiruKizyunZikoku = 60 * (60 * kizyunZikoku[i][0] + kizyunZikoku[i][1]);//現在の時間を秒に変換
			if (imaNoZikoku < miteiruKizyunZikoku) {   //    -1 < 32400
				// 次の基準時刻が現在時刻より最初に後になった場合
				// 最初の基準時刻より後なら、時間帯を設定する
				imaNoZikantai = i - 1;
				if (i > 0) {	//i = 0
					// この時間帯の最初と最後の時刻[秒]を取得する
					maeNoKizyunZikoku = 60 * (60 * kizyunZikoku[i - 1][0] + kizyunZikoku[i - 1][1]);
					tugiNoKizyunZikoku = 60 * (60 * kizyunZikoku[i][0] + kizyunZikoku[i][1]);
					// ゲージを表示するべき時間帯であることを伝える
					geeziWoHyouziSuruBeki = true;
				}
				break;
			}
		}
		if (saisyoNoFureemuDeAru) {
			// 最初のフレームでは、音を鳴らす処理の状態を初期化する
			maeNiOtoWoNarasitaZikantai = imaNoZikantai;
			saisyoNoFureemuDeAru = false;
		}

		// 経過時間と残り時間を計算し、ゲージのパラメータを設定する
		if (geeziWoHyouziSuruBeki && zikanWoHyouziSuru[imaNoZikantai]) {
			// 表示する時間
			minute = (imaNoZikoku - maeNoKizyunZikoku) / 60;
			E = (tugiNoKizyunZikoku - maeNoKizyunZikoku) / 60;
			D = (tugiNoKizyunZikoku - imaNoZikoku) / 60;
			// ゲージのパラメータ
			A = tugiNoKizyunZikoku;
			B = maeNoKizyunZikoku;
			C = imaNoZikoku;
		}
		else {
			// 表示する時間
			minute = 99;
			E = 99;
			D = 99;
			// ゲージのパラメータ
			A = 640;
			B = 0;
			C = 0;
		}

		// 全体の残り時間を計算する
		if (imaNoZikoku < hazimariNoZikoku) {
			// 始まっていない
			F = 60 * zenntai;
		}
		else if (owariNoZikoku < imaNoZikoku) {
			// 終わった後
			F = 0;
		}
		else {
			// 実行中
			F = owariNoZikoku - imaNoZikoku;
		}
		// 円グラフのパラメータを設定する
		Percent = (60 * zenntai - F) * 100 / (60 * zenntai);

		// 残り時間を分に変換する
		F = (F + 59) / 60;

		// 情報が正しくなるように補正する
		if (imaNoZikoku % 60 == 0) D--;

		// 午前と午後を分ける
		if (Date.Hour >= 13){
			jikann = Date.Hour - 12;
			gogo = 1;
		}
		else{
			jikann = Date.Hour;
			gogo = 0;
		}


		//壁紙
		//Handle = LoadGraph(""); // 画像をロード
		//DrawGraph(0, 0, Handle, TRUE); // データハンドルを使って画像を描画
		int YzahyounoHyouji = 0;
		int XzahyounoHyouji = 0;
		DrawFormatStringToHandle(XzahyounoHyouji +100, YzahyounoHyouji + 280, keikaZikanNoIro, g_middlefont, "経過時間"); //説明
		DrawFormatStringToHandle(XzahyounoHyouji +950, YzahyounoHyouji + 280, nokoriZikanNoIro, g_middlefont, "残り時間"); //説明
		DrawFormatStringToHandle(XzahyounoHyouji + 100, YzahyounoHyouji + 350, keikaZikanNoIro, g_Lagefont, "%d分", minute); //経過時間を描画します
		DrawFormatStringToHandle(XzahyounoHyouji + 450, YzahyounoHyouji + 350, moziNoIro, g_Lagefont, "/%d分/", E); //全体の時間を描画します
		DrawFormatStringToHandle(XzahyounoHyouji + 950, YzahyounoHyouji + 350, nokoriZikanNoIro, g_Lagefont, "%d分", D + 1); //残り時間
		DrawFormatStringToHandle(XzahyounoHyouji +430, YzahyounoHyouji + 650, moziNoIro, g_smallfont, "全体の残り時間%d分", F);//420分


		if (maeNiOtoWoNarasitaZikantai != imaNoZikantai) {
			// 時間帯が変化している場合、音を鳴らす
			maeNiOtoWoNarasitaZikantai = imaNoZikantai;
			if(imaNoZikantai >= 0) {
				PlaySoundFile(otoNoFairuMei[narasuOtoNoBangou[imaNoZikantai]], DX_PLAYTYPE_BACK);
			}
		}


		DrawFormatStringToHandle(XzahyounoHyouji +750, YzahyounoHyouji +700, moziNoIro, g_middlefont, "%s%d時%d分", gogo ? "午後" : "午前", jikann, Date.Min);

		//ゲージの描画
		DrawBox(0, 150, 1920, 250, nokoriZikanNoIro, TRUE);
		int geeziNoKawarime = X1 + (X2 - X1)*(C - B) / (A - B);

		DrawBox(X1, Y1, geeziNoKawarime, Y2, keikaZikanNoIro, TRUE);
		

		//背景
		LoadGraphScreen(20, 50, "haikei.png", TRUE);

		//キャラを表示する
				CharaAnimeUpdate();
				DrawGraph(geeziNoKawarime-150, 73, Image[animeno], TRUE);

	


		////////////////////////////////////////////////////
		//円の描画 ここに円グラフを表示する
		DrawCircle(CenterX, CenterY, 85, nokoriZikanNoIro, TRUE);
		DrawCircleGauge(CenterX, CenterY, Percent, GrHandle, StartPercent = 0.0);
		//////////////////////////////////////////////////////

		/////////////////////////////////////////////////////
		//全体のゲージが徐々に減っていく
		//DrawBox(0, 420, 640, 480, nokoriZikanNoIro, TRUE);
		//DrawBox(0, 420, G, 480, keikaZikanNoIro, TRUE);//全体の経過時間
		////////////////////////////////////////////////////



		if (1 <= Date.Hour && Date.Hour <= 17) {
			if (Date.Hour == 12 && Date.Min > 40){
				DrawFormatStringToHandle(XzahyounoHyouji + 0, YzahyounoHyouji + 0, moziNoIro, g_Lagefont, messages[Date.Hour + 1], D); //メッセージを表示
			}
			else
				DrawFormatStringToHandle(XzahyounoHyouji + 0, YzahyounoHyouji + 0, moziNoIro, g_Lagefont, messages[Date.Hour], D); //メッセージを表示
		}



		ScreenFlip(); //DX_SCREEN_BACKに描画した画像を表示します


	}

	DxLib_End(); // DXライブラリ使用の終了処理

	return 0; // ソフトの終了 
}

Re: タイマーで指定した時間に音を鳴らしたい2

Posted: 2014年11月06日(木) 11:52
by ノダッシー
コメント大変勉強になりました
ありがとうございます