c समस लिनक्स टर्मिनल एनीमेशन-'फ्रेम' के मुद्रण में देरी करने का सबसे अच्छा तरीका(सी में)




मुद्रण का अर्थ (3)

मैं टर्मिनल के लिए एक साधारण पांग क्लोन पर काम कर रहा हूं और एक 'फ्रेम' के मुद्रण में देरी करने के लिए एक रास्ते की जरूरत है

मेरे पास एक दो आयामी सरणी है

screen[ROWS][COLUMNS]

और एक समारोह जो स्क्रीन प्रिंट करता है

void printScreen() {
    int i = 0;
    int j;

    while(i < ROWS) {
        j = 0;

        while(j < COLUMNS) {
            printf("%c", screen[i][j]);
            j++;
        }
        i++;
    }
}

ऐसा लगता है कि जब मैं करता हूं

printScreen();
usleep(1000000);
printScreen();

यह printScreen() दौरान निष्पादन को printScreen()

टर्मिनल पर इस तरह के एनीमेशन के लिए कोई सुझाव बहुत सराहना की जाएगी शायद मैं यह पूरी तरह गलत कर रहा हूं। यह कैसे इस तरह की ASCII फिल्मों के साथ किया जाता है?

संपादित करें मैं ncurses के साथ जा रहा हूँ सुझाव के लिए दोनों धन्यवाद।

Ubuntu sudo aptitude install libncurses5-dev पर sudo aptitude install libncurses5-dev और -lncurses साथ संकलन।


stdout buffered है। यह वास्तव में टर्मिनल डिवाइस पर आउटपुट को तब तक नहीं भेजेगा जब तक कि उसे न्यूलाइन प्रिंट करने के लिए नहीं कहा जाता है या स्पष्ट रूप से फ़्लश किया जाता है।

आउटपुट को फ्लश करने के लिए, बस जोड़ें:

fflush(stdout);

इसके अलावा, क्योंकि जो भी आप कर रहे हैं, वह एक अक्षर छपाई कर रहा है, printf एक तरफ उंचा है आप अपने printf को इसके साथ बदल सकते हैं:

putchar(screen[i][j]);

आस्की फिल्में अलिब के साथ किया जाता है जो ग्राफिक्स डिस्प्ले ड्राइवर की तरह काम करता है। ज्यादातर लोग पूर्णतया कंसोल एप्लिकेशन विकसित कर रहे हैं और गेम शाप के रूपरेखा का उपयोग करते हैं या यह एक संस्करण जैसे ncurses उस मार्ग को जाने का एक वास्तविक प्रतिबंध है आपको पूर्ण पित्ती करना है (आप इसका हिस्सा नहीं ले सकते हैं)


यदि मैं आपको सही ढंग से समझता हूं, तो आपको fflush(stdout); जोड़ना fflush(stdout); printScreen() से लौटने से पहले लेकिन पाठ एनीमेशन और टर्मिनल कंट्रोल करने के लिए बेहतर (आसान) तरीके हैं I उदाहरण के लिए ncurses को देखो





terminal