一定時間になるまで入力待ちできる機能はありますか?私は一種のスネークゲームを作っています。
私のプラットフォームは Windows です。
端末ベースのゲームについては、ncursesを参照してください。
int ch;
nodelay(stdscr, TRUE);
for (;;) {
if ((ch = getch()) == ERR) {
/* user hasn't responded
...
*/
}
else {
/* user has pressed a key ch
...
*/
}
}
編集:
Windows で ncurses を使用できますか?も参照してください。
次のように 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()
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;
}