ページ 11

DXライブラリの残り時間表示

Posted: 2018年12月07日(金) 22:33
by Watasuke
お世話になっております。
DXライブラリでタイピングを作っているのですが、タイマー部分がうまくいきません。

コード:

#define TIME_MIN 5
#define WINDOW_X 1280
#define WINDOW_Y 960
int White = GetColor(255,255,255);

void Timer(){
	sec = (GetNowCount() - GameStartTime)/1000;
	min = (sec/60);
	sec = sec%60;
	if(sec == 0){
		sec = 60;
		if(min == 0)
			min = -1;
	}
	if(sec == 60 && min == TIME_MIN) finish();
	DrawFormatStringToHandle(
	WINDOW_X/2 - GetDrawFormatStringWidthToHandle(text,"SCORE  %03d\n TIME  %01d:%02d",Score,TIME_MIN-1 -min,60-sec)/2,
	WINDOW_Y/2+100,White,text,"SCORE  %03d\n TIME  %01d:%02d",Score,TIME_MIN-1 -min,60-sec);
}
見づらいとは思いますがこのようなコードを作っています。
制限時間TIME_MIN分(この場合は5分)で、経過時間ではなく残り時間(4:00や3:21のような)を表示したいのです。
が、これだと残り3分の時に2:00と表示されてしまい、困っています。
どのように上のコードを変えればいいのですか?

情報不足でしたら補足します。

Re: DXライブラリの残り時間表示

Posted: 2018年12月08日(土) 17:44
by みけCAT
分と秒に分けてから残り時間に変換しようとして複雑になっているようなので、
分ける前に60*TIME_MIN-secで残り時間[秒]を出して、
それを分と秒に分けて表示するのがいいと思います。

Re: DXライブラリの残り時間表示

Posted: 2018年12月08日(土) 19:15
by Watasuke
回答ありがとうございます。
どこをどのように変えればいいのかわかりません・・・

Re: DXライブラリの残り時間表示

Posted: 2018年12月09日(日) 15:29
by みけCAT
この方法のままでいくなら、secを変える分の補正を

コード:

		if(min == 0)
			min = -1;
と特殊な場合のみするのではなく、

コード:

		min--;
と一般の場合についてするようにするのがいいでしょう。
finish()を呼ぶかの判定も、それに合わせて変えたほうがいいかもしれません。

Re: DXライブラリの残り時間表示

Posted: 2018年12月09日(日) 18:25
by Watasuke

コード:

void Timer(){
	sec = (GetNowCount() - GameStartTime)/1000;
	min = (sec/60);
	sec = sec%60;
	if(sec == 0){
		sec = 60;
		min--;
	}
	if(sec == 60 && min == TIME_MIN-1) finish();
}
これでできました!ありがとうございました!