2013-01-07 18 views
5

क्या कोई ऐसा फ़ंक्शन है जो इनपुट के लिए प्रतीक्षा कर सकता है जब तक कि कोई निश्चित समय न हो जाए? मैं सांप गेम बना रहा हूं।एक निश्चित समय के लिए इनपुट की प्रतीक्षा करें

मेरा प्लेटफार्म विंडोज है।

+1

कोई मानक सी ++ तरीका तब तक प्रभाव डालेगा जब तक कि आपका प्रोग्राम इनपुट के ठीक बाद समाप्त न हो जाए। यहां तक ​​कि अगर ऐसा होता है, तो मैं इसकी अनुशंसा नहीं करता। – chris

+4

शीर्षक कहता है "सी" - टैग दोनों "सी" और "सी ++" कहते हैं - यह कौन है? –

+1

जैसा कि बताया गया है, ऐसा करने का कोई मानक तरीका नहीं है। लिनक्स में, मैं ncurses का उपयोग करने का सुझाव दूंगा [विंडोज़ के लिए भी काम कर सकता है]। अधिकांश ओएस के पास "प्रतीक्षा नहीं" इनपुट विधि होती है, लेकिन इसके लिए कोई मानक विधि नहीं है। –

उत्तर

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" नहीं है। मैंने Google पर कुछ खोजा और कोशिश की लेकिन उनमें से कोई भी काम नहीं करता है। मैं 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

प्रश्न स्पष्ट रूप से सी या सी ++ – thecoshman

+1

@thecoshman 'ncurses' के रूप में स्पष्ट रूप से टैग किया गया है सी/सी ++ के लिए एक लाइब्रेरी है। –

+0

आह, क्षमा करें, मैंने टर्मिनल आधारित गेम के लिए 'टर्मिनल आधारित गेम' का उपयोग किया है, इसका अर्थ यह है कि मैंने डाउनवोट – 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() औरके गैर-बहिष्कृत संस्करणों का उपयोग करता है- आईएसओ सी ++ के _kbhit() और _getch()
समारोह लेता है: सेकंड के संख्या उपयोगकर्ता इनपुट के लिए
समारोह रिटर्न प्रतीक्षा करने के लिए:_ उपयोगकर्ता किसी भी चार डाल नहीं है जब, अन्यथा यह inputed चार देता है।

/** 
    * 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; 
} 
संबंधित मुद्दे