Задержка побега с помощью кнопки в игре
Привет, у меня проблема с куском кода для игры. Я хотел бы знать, как нарушить временную задержку, если я нажму кнопку.
В конце игры ваш конечный счет записывается на жидкокристаллический дисплей в течение 10 секунд. И возвращается к ожиданию старта. Я хочу сохранить это как есть - единственное, что я хочу включить, это то, что если я нажму кнопку в течение этих 10 секунд, я хочу, чтобы она немедленно вернулась к ожиданию запуска.
**************************************************************************************
Код функции находится здесь
void DrawGameScore() { //&RFONT_8X12 &RFONT_16X26 //char key; //key = KBD_GetKey(); char txt[10]; UG_FontSelect(&RFONT_16X26); UG_SetForecolor(C_WHITE); switch (level){ case 1: UG_PutString(60,130,"Peasant Score:"); sprintf(txt,"%d",score); UG_PutString(120,160,txt); _delay_ms(10000); break; case 2: UG_PutString(60,130,"Knight Score:"); sprintf(txt,"%d",score); UG_PutString(120,160,txt); _delay_ms(10000); break; case 3: UG_PutString(60,130,"Queen Score:"); sprintf(txt,"%d",score); UG_PutString(120,160,txt); _delay_ms(10000); break; case 4: UG_PutString(60,130,"King Score:"); sprintf(txt,"%d",score); UG_PutString(120,160,txt); _delay_ms(10000); break; case 5: UG_PutString(60,130,"God Score:"); sprintf(txt,"%d",score); UG_PutString(120,160,txt); _delay_ms(10000); break; } //UG_PutString(60,130,"Final Score:"); //sprintf(txt,"%d",score); //UG_PutString(120,160,txt); //_delay_ms(1000); }
*************************************************************************************
Когда игра заканчивается, эта функция рисует ваш счет в зависимости от вашего уровня. В этой следующей функции я вызываю функцию drawgamescore, которая находится в dsip_end_score makro.
int EndOfGame() { char key; //static int state; int result = 1; key = KBD_GetKey(); display_msg = DSIP_END_SCORE; if (key == BTN_OK){ //display_msg = DISP_REFRESH_ALL; //display_msg = DSIP_END_SCORE; return result; } return result; }
****************************************************************
Вот основная игровая функция
void Game() { static int state; int result; switch (state) { case 1: //waiting for game start result = WaitForStart(); if (result == 1) state++; break; case 2: //Play the game result = PlayTheGame(); if (result == 1) state++; break; case 3: //Display the score result = EndOfGame(); if (result == 1) state=0; break; default: //0 or unknown value: reset the game state = 1; break; } }
Спасибо.
Что я уже пробовал:
Я пытался
int EndOfGame() { char key; static int state; int result = 1; key = KBD_GetKey(); display_msg = DSIP_END_SCORE; if (key == BTN_OK){ //display_msg = DISP_REFRESH_ALL; //display_msg = DSIP_END_SCORE; return result; } return result; } /* display_msg = DSIP_END_SCORE; if (key != 0){ switch (key) { case BTN_OK: return result; break; } } */ /* switch (state) { case 0: display_msg = DSIP_END_SCORE; state++; break; case 1: key = KBD_GetKey(); if (key != 0){ switch (key) { case BTN_OK: return result; break; } break; } } return result; */ //display_msg = DISP_REFRESH_ALL; //display_msg = DSIP_END_SCORE; //return result; /* char key; int result=0; //static int state; key = KBD_GetKey(); if (KBD_isKeyStatePressed(BTN_OK)) { display_msg = DSIP_END_SCORE; result = 1; } else { result = 1; } //return result; */ /* switch (state){ case 0: KBD_flush(); //empty buffer //display_msg = DISP_REFRESH_ALL; display_msg = DSIP_END_SCORE; return result; state++; break; case 1: key = KBD_GetKey(); //kbd read dela background services if (key == BTN_OK){ //display_msg = DISP_REFRESH_ALL; display_msg = DSIP_END_SCORE; return result; break; } break; } return result; */ /* key = KBD_GetKey(); if (key == BTN_OK) { //display_msg = DISP_REFRESH_ALL; return result; }else{ display_msg = DISP_REFRESH_ALL; display_msg = DSIP_END_SCORE; //TODO: write the program return result; }*/