現在、タイピングゲームを製作しているのですが、メイン動作の部分で
入力受け付け、正誤判定、出力などの動作を行いながら
制限時間のカウントダウン出力を同時に行う方法ってありますか?
GetNowCount()関数を用いれば確かに現在の時間を取得することができますが、
別の処理を行っている場合、1秒ごとにカウントダウン出力をしようとしても別の処理が終わらない限りそれが出力されません。
どうにかして別の処理と並行してカウントダウン出力を行いたいのです。
他の動作とカウントダウン動作を同時に行う手段がないか調べてみたのですが、
私の疑問を解決してくれるサイトは見つかりませんでした。
分かる方、ご教授願います。
参考としてメイン動作部分のプログラムの一部を掲載しておきます。
// 問題数の数だけ反復
while (i < QuestionNum) {
char Kana[BUF]; // 問題文を格納
char Alpha[BUF]; // 答えとなるローマ字列を格納
char InputChar; // 入力の格納
ClearDrawScreen();
DrawGraph(MAIN_X, MAIN_Y, MainHandle, TRUE);
//DrawGraph(TIMEBAR_X, TIMEBAR_Y, BarHandle, TRUE);
RondomRead = rand() % QuestionNum;
// ファイルから読み込んだデータを格納
// ランダムの行数だけ読み込むことで疑似的にランダムに出題
for (RondomQuestion = 0; RondomQuestion <= RondomRead; RondomQuestion++) {
FileRead_gets(Kana, BUF, QFileHandle);
FileRead_gets(Alpha, BUF, AFileHandle);
}
DrawStringToHandle(QUESTION_X, QUESTION_Y, Kana, BLACK, FontHandle);
DrawStringToHandle(ANSWER_X, ANSWER_Y, Alpha, BLACK, FontHandle);
AlphaLen = strlen(Alpha);
StartTime = GetNowCount();
// 入力と正誤判定
for (j = 0; j < AlphaLen; j++) {
InputChar = GetInputCharWait(TRUE);
Typing[0] = InputChar;
// 正誤判定
if (Typing[0] != Alpha[j]) {
// 1回目のGetInputCharWait関数より先に1回目の正誤判定が行われるため
// IsFirstで1回目の正誤判定を飛ばす
if (IsFirst == 0) {
j--;
IsFirst = 1;
continue;
}
// ミス時の画像を表示
Typing[0] = Alpha[j];
DrawGraph(MAIN_X, MAIN_Y, MissHandle, TRUE);
DrawStringToHandle(ANSWER_X + j * FONT_SIZE / 2, ANSWER_Y, Typing, RED, FontHandle);
MissTypeCount++;
j--;
}
else {
// 正解時の画像を表示
DrawGraph(MAIN_X, MAIN_Y, MainHandle, TRUE);
DrawStringToHandle(ANSWER_X + j * FONT_SIZE / 2, ANSWER_Y, Typing, LIGHTBLUE, FontHandle);
TypeCount++;
}
}
EndTime = GetNowCount();
TotalTime += EndTime - StartTime;
DrawGraph(MAIN_X, MAIN_Y, SuccessHandle, TRUE);
DrawFormatStringToHandle(400, 350, BLACK, FontHandle, "%d", TotalTime);
WaitTimer(WAIT_TIME);
// ここでもう一度開くことにより終端の判定をさせない
QFileHandle = FileRead_open("Question.dat");
AFileHandle = FileRead_open("Answer.dat");
i++;
}