2014-07-10 50 views
0

伙计们,我不知道为什么窗口边框/打印没有出现。我哪里错了?它正在工作之前。我添加了评论括号中的部分。尽管我删除了这些零件,但它仍然停止工作。您打印C-窗口/打印不出现

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

int main() 
{ 
    int y = 2; 
    int x = 2; 
    int oldy = 2; 
    int oldx = 2; 
    char m = 'l'; 

    initscr(); 
    WINDOW* win; 
    win = newwin(41,40, 0 ,0); 
    /*WINDOW* win2 = newwin(10,10, 40 ,0);*/ 
    box(win, ACS_VLINE, ACS_HLINE); 
    /*box(win2, ACS_VLINE, ACS_HLINE);*/ 
    mvwprintw(win,1, 1, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"); 
    mvwprintw(win,2, 1, "X X X  X X   X  X X"); 
    mvwprintw(win,3, 1, "X X X X XXX X X X XXXXXXXX X XXXXX X X"); 
    mvwprintw(win,4, 1, "X X X  X X X X   X  X X"); 
    mvwprintw(win,5, 1, "X XXXXXXX XXXXX X X XXXXXXXXXX XXXXX X"); 
    mvwprintw(win,6, 1, "X  X X  X X   X  X"); 
    mvwprintw(win,7, 1, "XXXXXXX X XXXXXXX XXXXXXXXXX XXXXXXXXX"); 
    mvwprintw(win,8, 1, "X  X X  X  X X  X"); 
    mvwprintw(win,9, 1, "X XXXXXXX X XXXXXXX XXXXXX X XXXXX X"); 
    mvwprintw(win,10, 1, "X X  X X    XXXX X X X"); 
    mvwprintw(win,11, 1, "X X XXXXX X XXXX XXXXXXXX  X X XXX"); 
    mvwprintw(win,12, 1, "X X X  X XXXX X  XXXXXXX X X X"); 
    mvwprintw(win,13, 1, "X X XXX X X X XXXXX X X X X X"); 
    mvwprintw(win,14, 1, "XXXXX X X XXXX X X X X X X XXXXX X"); 
    mvwprintw(win,15, 1, "X  X X X XXXXX X X X X X  X X"); 
    mvwprintw(win,16, 1, "X XXXXX X X XXXX  X X X X XXXXX X X"); 
    mvwprintw(win,17, 1, "X X  X X X XXXXX  X   X"); 
    mvwprintw(win,18, 1, "X X XXXXX XXXX X X XXXXXXXXXXXXXXXXX"); 
    mvwprintw(win,19, 1, "X X   X X     O"); 
    mvwprintw(win,20, 1, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"); 
    wmove(win,2,2); 
    wrefresh(win); 
    /*wrefresh(win2);*/ 


    while(m != 'q') 
    { 
      /*mvwprintw(win2,41,0,"22");*/ 
      /*wrefresh(win2);*/ 
      m=getch(); 
      /*mvwprintw(win2,40,0,"Please use the following keys to navigate through the maze.(W) Up (S) Down (D) Right (A) Left");*/ 
      wrefresh(win); 

    switch(m) 
     { 
      case 'S': if(mvwinch(win,(oldy+1),x)=='X') 
         { 
         mvwprintw(win,40,0,"Sorry, you cant move there."); 
         wrefresh(win); 
         wmove(win,oldy,oldx); 
         wrefresh(win); 
         } 

         else 
         { 
         wmove(win,(y=oldy+1),x); 
         wrefresh(win); 
         oldy = y; 
         } 
       break; 

      case 'D': if(mvwinch(win,y,(oldx+1))=='X') 
         { 
         mvwprintw(win,40,0,"Sorry, you cant move there."); 
         wrefresh(win); 
         wmove(win,oldy,oldx); 
         wrefresh(win); 
         } 

         else 
         { 
         wmove(win,y,x=(oldx+1)); 
         wrefresh(win); 
         oldx = x; 
         } 
       break; 

      case 'A': if(mvwinch(win,y,(oldx-1))=='X') 
         { 
         mvwprintw(win,40,0,"Sorry, you cant move there."); 
         wrefresh(win); 
         wmove(win,oldy,oldx); 
         wrefresh(win); 
         } 

         else 
         { 
         wmove(win,y,x=(oldx-1)); 
         wrefresh(win); 
         oldx = x; 
         } 
       break; 

      case 'W': if(mvwinch(win,(oldy-1),x)=='X') 
         { 
         mvwprintw(win,40,0,"Sorry, you cant move there."); 
         wrefresh(win); 
         wmove(win,oldy,oldx); 
         wrefresh(win); 
         } 

         else 
         { 
         wmove(win,y=(oldy-1),x); 
         wrefresh(win); 
         oldy = y; 
         } 
       break; 

      default: m = 'q'; 

     } 

    } 

    delwin(win); 
    /*delwin(win2);*/ 
    endwin(); 

    return 0; 
} 
+0

感谢上帝,你有备份。你呢,是吗? –

+0

Nooooo:((Did not expect it happen。 – user3753834

+0

我相信这是讽刺。 –

回答

0

一切都在win,但getch()stdscr(默认全屏窗口)的读取。从stdscr中读数会导致它跳到窗口堆栈顶部,从而模糊了您的win。使用wgetch(win)

+0

这与movment有关,我对光标的修饰没有任何问题。唯一的问题是,迷宫没有被打印。 – user3753834

+0

你试过吗?我没有猜测。'getch()'描绘了stdscr',因为'stdscr'是空白的。如果你仍然不相信我,在你的'getch()'之前加一个'sleep(3)',这个迷宫出现3秒钟然后消失 –

+0

你也可以指出哪个getch ?最后一个? – user3753834