2016-06-18 7 views
2

최근에 내 프로젝트에 ncurses를 사용하고 있으며 새 프로젝트입니다. 우주선 (3 문자열 줄)을 창에 인쇄하는 코드를 작성했지만 새 창에서 인쇄함과 다른 창()을 삭제하는 데 사용하는 기능이 모두 표시되지 않습니다. 여기 내 코드는내 창에서 ncurses가 표시되지 않습니다.

입니다. 당신이 space_ship에 텍스트를 기록 할 동안,

while((ch = getch()) != 'q') 

stdscr에서 읽고 :

#include<stdio.h> 
#include<ncurses.h> 
#include <string.h> 
#include<stdlib.h> 


WINDOW * create_newwin(int height, int width, int starty, int startx); 

void destroy_win(WINDOW *local_win); 

int main(int argc, char *argv[]){ 

    WINDOW* space_ship; 
    int max_y , max_x , startx , starty; 
    char ch; 

    initscr(); 
    cbreak(); 
    noecho(); 

    getmaxyx(stdscr,max_y,max_x); 
    startx=(LINES - 3)/2; 
    starty=(COLS - 5)/2; 
    space_ship=create_newwin(3,5,starty,starty); 
    refresh(); 

    while((ch = getch()) != 'q') 
    { switch(ch) 
     { case KEY_LEFT: 
       destroy_win(space_ship); 
       space_ship = create_newwin(3,5, starty,--startx); 
       break; 
      case KEY_RIGHT: 
       destroy_win(space_ship); 
       space_ship = create_newwin(3, 5, starty,++startx); 
       break; 
      case KEY_UP: 
       destroy_win(space_ship); 
       space_ship = create_newwin(3, 5,--starty,startx); 
       break; 
      case KEY_DOWN: 
       destroy_win(space_ship); 
       space_ship = create_newwin(3, 5, ++starty,startx); 
       break; 
     } 
    } 

    endwin(); 

    return 0; 
    } 

WINDOW *create_newwin(int height, int width, int starty, int startx){ 
    WINDOW* temp; 
    temp=newwin(height,width,starty,startx); 
    refresh(); 
    wprintw(temp," ^\n"); 
    wprintw(temp," (0)\n"); 
    wprintw(temp,"[] []\n"); 
    wrefresh(stdscr); 
    wrefresh(temp); 

return temp; 

} 

void destroy_win(WINDOW *local_win){ 

    wborder(local_win, ' ', ' ', ' ',' ',' ',' ',' ',' '); 
    wrefresh(local_win); 
    delwin(local_win); 
} 
+0

경주하기 전에 하나의 문자를 표시하는 하나의 창으로 시작하여 작게 만들었습니까? –

+0

tnx 당신의 명령이 내 문제를 해결하지 못했다. –

답변

0

문제는이 라인입니다. 당신은

while((ch = wgetch(space_ship)) != 'q') 

에 다음 space_ship의 새로 고침이 wgetch 호출의 부작용으로 수행 될 것으로 변경하는 경우.

+0

tnx 맞다.하지만 아직 아무 것도 보여주지 않는다. ( –

+0

'ch'의 타입은'int'이어야한다. (컴파일러 경고문에 적혀있다.) 확인, 화면 하단에 우주선이 보입니다. 다시 디버깅합니다. –