5

一定時間になるまで入力待ちできる機能はありますか?私は一種のスネークゲームを作っています。

私のプラットフォームは 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
           ...
          */
      }
 }

編集:

Windows で ncurses を使用できますか?も参照してください。

于 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 に答える