有什么function可以等待input,直到达到一定的时间? 我正在做一种贪吃蛇游戏。
我的平台是Windows。
对于基于终端的游戏,你应该看看ncurses 。
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 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; } } }
基于@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; }