简体   繁体   English

等待输入一段时间

[英]Wait for input for a certain time

Is there any function that can wait for input until a certain time is reached? 是否有任何功能可以等到输入达到一定时间? I'm making kind of Snake game. 我正在制作Snake游戏。

My platform is Windows. 我的平台是Windows。

For terminal based games you should take a look at ncurses . 对于基于终端的游戏,你应该看看ncurses

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

Edit: 编辑:

See also Is ncurses available for windows? 另请参见ncurses是否可用于Windows?

I found a solution using kbhit() function of conio.h as follows :- 我发现使用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;  
    }

Try with bioskey() , this is an example for that: 尝试使用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;
      }
   }
}

Based on @birubisht answer I made a function which is a bit cleaner and uses NON-deprecated versions of kbhit() and getch() - ISO C++'s _kbhit() and _getch() . 根据@birubisht的回答,我创建了一个更清洁的函数,并使用了非弃用版本的kbhit()getch() - ISO C ++的_kbhit()_getch()
Function takes: number of seconds to wait for user input 功能需要:等待用户输入的秒数
Function returns: _ when user does not put any char, otherwise it returns the inputed char. 函数返回: _当用户没有放任何char时,否则返回inputed char。

/**
  * 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;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM