2013-11-01 10 views
5

Wciąż jestem nowy w C i ncurses. Poproszono mnie o wykonanie zadania polegającego na wykonaniu wielowątkowej gry pongowej. Gra działa dobrze i kończy się poprawnymi warunkami strat, ale po zakończeniu mojego terminalu wszystko jest popsute. Nie otrzymuję echa, więc muszę napisać: stty echo, żeby to cofnąć, nawet wtedy, gdy terminal zachowuje się dziwnie.C Jak powrócić do normalnego ekranu po zakończeniu programu curses

Moja funkcja końcowy jest następujący:

void wrap_up(){ 

    curs_set(1); 
    clear(); 
    endwin(); 
    refresh(); 
} 

Oto zrzut ekranu. Jak mogę to naprawić?

enter image description here

+0

Co to jest kod funkcji? – LeeNeverGup

+0

Podaj minimalny przykład działania (kompilacji). –

Odpowiedz

5

Usuń odświeżania po endwin. Wywołanie odświeżenia po endwin powoduje, że program powraca do trybu curses.

-1

Cóż, to zależy od tego, jak chcesz go zaimplementować. Aby było przenośne, możesz zaimplementować kompilację dyrektyw, aby wyczyścić ekran w zależności od systemu operacyjnego, na którym pracujesz.

Np

void Refresh(){ 
#ifdef WIN_32_OS 
    system("cls"); 
#elif LINUX_OS 
    system("clear"); 
#else // (DOS, for example) 
    system("Another command"); 
#endif 
} 

Tak więc w czasie kompilacji można użyć coś takiego:

bash2.2 $ gcc -c -DLINUX_OS code.c -o kod

+0

, który wygląda raczej na obejście, a nie na rozwiązanie. Poza tym, polecenie 'clear' nie działa w tym przypadku, patrzysz na reset lub tset. – CaseyJones

+0

@ CaseyJones Mam to, ale nie znalazłem, dlaczego moja odpowiedź nie jest przydatna. – rfermi

+1

Twoja odpowiedź nie rozwiązuje problemu, obawiam się. Wyczyść nie przywraca terminala do stanu roboczego w sytuacji opisanej w PO. Do tego potrzebne będą polecenia "reset" lub "tset". – CaseyJones