ページ 11

コンソール入力と時間待ち

Posted: 2014年8月14日(木) 20:06
by にゃあ
ゲームの作成をしており、5秒後に動作をするプログラムを作成していたのですが
5秒以内に特定文字が入力されると他の動作をするプログラムに変更したいのですが
どのようにすればよいのでしょうか

Re: コンソール入力と時間待ち

Posted: 2014年8月14日(木) 21:01
by みけCAT
にゃあ さんが書きました:どのようにすればよいのでしょうか
そのようにプログラムを書き換えればよいと思います。
心配なら、前のプログラムのバックアップを取っておくとさらに良いでしょう。

Re: コンソール入力と時間待ち

Posted: 2014年8月14日(木) 21:40
by Hiragi(GKUTH)
ゲーム開始 -> 5秒待機 -> 次の動作へ を
ゲーム開始 -> 5秒待機 -> 特定の文字が入力されるまで待機 -> 次の動作へ

と変更すればいいと思いますが具体的にどこがどのようにわからないのか教えてくれないと回答の
正確性も落ちますし抽象的なモノになります。
とりあえず現時点でのソースコードを貼りましょう。

Re: コンソール入力と時間待ち

Posted: 2014年8月14日(木) 21:52
by みけCAT
Hiragi(GKUTH) さんが書きました:ゲーム開始 -> 5秒待機 -> 次の動作へ を
ゲーム開始 -> 5秒待機 -> 特定の文字が入力されるまで待機 -> 次の動作へ

と変更すればいいと思いますが
それは最初の質問と合っていない気がします。
このような感じではないですか?
hoge_chart.png
フローチャートカッコカリ
hoge_chart.png (4.27 KiB) 閲覧数: 3873 回
もしくは、このような感じでしょうか?
hoge_chart2.png
フローチャートカッコカリ(2)
hoge_chart2.png (4.3 KiB) 閲覧数: 3873 回
ただ、今回のタイトルは「コンソール入力」を含んでいるので、
「普通」の(DXライブラリで作るような)ゲームに使う手法は通用しないかもしれません。

Re: コンソール入力と時間待ち

Posted: 2014年8月14日(木) 22:17
by にゃあ
みけCATさんの上のフローチャートのような形にプログラムを修正したいです。
ソースですが以下の様な形です。

コード:

int game(game_result result, int field[ROW][COL]){
	char c;
	char re_flag;
	int re;
	int choice[SIZE][SIZE];
	int b_field[ROW][COL];
	int error;
	printf("ゲームスタートは'R'を押して下さい。\n");
	do{
		c = getch();
	}while(c != 'R');
	re = -1;
	error = -1;
	while(error == -1){
		memcpy(b_field,field,sizeof(field));
		system("cls");
		select_block(choice);
		error = check(field, choice);
		show_field(field, result);
		Sleep(5000);
	}
	printf("もう一度やる場合は'R'を押して下さい。\n");
	re_flag = getch();
	if(re_flag == 'R'){
		re = 1;
	}else{
		re = 2;
	}
	return re;
}

Re: コンソール入力と時間待ち

Posted: 2014年8月14日(木) 22:23
by みけCAT
まずは5000ミリ秒一気にSleepしないようにするといいかもしれません。
「5秒経過したか」の判定は、「(今の時刻)-(待機を開始してからの時刻)>=5000 [ms]」という式で判定できます。
ここで利用する時刻は、Windows環境ならtimeGetTime()やGetTickCount()で、
gccならgettimeofday()で得られる値を加工して求めることができます。

Re: コンソール入力と時間待ち

Posted: 2014年8月14日(木) 23:10
by にゃあ
なるほどです。
5000ミリ秒経過したかの判定は出来ました。
ありがとうございます。