等待输入一段时间

Wait for input for a certain time

本文关键字:一段时间 输入 等待      更新时间:2023-10-16

是否有函数可以等待输入,直到达到一定的时间?我在做一款类似Snake的游戏。

我的平台是Windows。

对于基于终端的游戏,你应该看看护士。

 int ch;
 nodelay(stdscr, TRUE);
 for (;;) {
      if ((ch = getch()) == ERR) {
          /* user hasn't responded
           ...
          */
      }
      else {
          /* user has pressed a key ch
           ...
          */
      }
 }
编辑:

参见ncurses是否适用于windows?

我找到了使用conio.h的kbhit()函数的解决方案,如下所示:-

    int waitSecond =10; /// number of second to wait for user input.
    while(1)
    {
     if(kbhit()) 
      {
       char c=getch();
       break;
      }
     sleep(1000); sleep for 1 sec ;
     --waitSecond;
     if(waitSecond==0)   // wait complete.
     break;  
    }

试试bioskey(),这是一个例子:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <bios.h>
#include <ctype.h>
#define F1_Key 0x3b00
#define F2_Key 0x3c00
int handle_keyevents(){
   int key = bioskey(0);
   if (isalnum(key & 0xFF)){
      printf("'%c' key pressedn", key);
      return 0;
   }
   switch(key){
      case F1_Key:
         printf("F1 Key Pressed");
         break;
      case F2_Key:
         printf("F2 Key Pressed");
         break;
      default:
         printf("%#02xn", key);
         break;
   }
   printf("n");
   return 0;
}

void main(){
   int key;
   printf("Press F10 key to Quitn");
   while(1){
      key = bioskey(1);
      if(key > 0){
         if(handle_keyevents() < 0)
            break;
      }
   }
}

基于@birubisht答案我做了一个函数,这是一个有点干净,并使用非弃用版本的kbhit()getch() - ISO c++的_kbhit()_getch()
函数等待用户输入的秒数
函数返回: _当用户没有输入任何字符,否则返回输入的字符。

/**
  * Gets: number of seconds to wait for user input
  * Returns: '_' if there was no input, otherwise returns the char inputed
**/
char waitForCharInput( int seconds ){
    char c = '_'; //default return
    while( seconds != 0 ) {
        if( _kbhit() ) { //if there is a key in keyboard buffer
            c = _getch(); //get the char
            break; //we got char! No need to wait anymore...
        }
        Sleep(1000); //one second sleep
        --seconds; //countdown a second
    }
    return c;
}