5

是否有任何功能可以等待输入直到达到特定时间?我正在制作一种 Snake 游戏。

我的平台是Windows。

4

4 回答 4

3

对于基于终端的游戏,您应该看看ncurses

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

编辑:

另请参阅ncurses 是否可用于 Windows?

于 2013-01-07T09:00:49.153 回答
1

我找到了一个使用 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;  
    }
于 2013-01-07T13:37:45.333 回答
0

试试看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 pressed\n", key);
      return 0;
   }

   switch(key){
      case F1_Key:
         printf("F1 Key Pressed");
         break;
      case F2_Key:
         printf("F2 Key Pressed");
         break;
      default:
         printf("%#02x\n", key);
         break;
   }
   printf("\n");
   return 0;
}


void main(){
   int key;
   printf("Press F10 key to Quit\n");

   while(1){
      key = bioskey(1);
      if(key > 0){
         if(handle_keyevents() < 0)
            break;
      }
   }
}
于 2013-01-07T08:48:43.007 回答
0

基于@birubisht的回答,我制作了一个更简洁的函数,并使用了非弃用版本的kbhit()and getch()- ISO C++ 的_kbhit()and _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;
}
于 2015-02-15T12:45:12.650 回答