2013-01-07 90 views
5

有什麼功能可以等待輸入,直到達到一定的時間?我正在做一些貪吃蛇遊戲。等待輸入一定時間

我的平臺是Windows。

+1

沒有標準的C++方法可以做到這一點,除非您的程序在輸入後立即結束,否則不會產生延遲效果。即使這樣做,我也不會推薦它。 – chris

+4

標題說「C」 - 標籤說「C」和「C++」 - 這是什麼? –

+1

如前所述,沒有標準的方法來做到這一點。在Linux中,我建議使用ncurses [也適用於Windows]。大多數操作系統都有「不等待」輸入法,但沒有標準方法。 –

回答

0

嘗試用bioskey()this是一個例子:

#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; 
     } 
    } 
} 
+0

只是將人指向鏈接是回答問題的糟糕方式:鏈接死亡。我複製了你鏈接的例子。現在更清楚的是,你的回答似乎不能解決問題。 – Richard

+0

我沒有頭文件「bios.h」。我搜索並嘗試了一些谷歌,但沒有一個可行。我使用MinGW使用CodeBlocks編輯器。你能告訴我一些工作嗎? – Xuicide

2

對於基於終端的遊戲,你應該在ncurses看一看。

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

編輯:

參見Is ncurses available for windows?

+0

問題明確標記爲C或C++ – thecoshman

+1

@thecoshman'ncurses'是C/C++的庫。 –

+0

啊,對不起,我拿'基於終端的遊戲'來表示你已經提供了一個基於終端的語言的解決方案,我收回downvote – thecoshman

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; 
    } 
0

基於@birubisht answer我做了一個更清潔的功能,並且使用了不推薦的版本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; 
}