简体   繁体   中英

C- Window / Prints not appearing

Guys i have no clue why the window border / prints are not appearing. Where am i going wrong? It was working previoudly. I added the parts which are seen in comment brackets. Afer that it stopped working even though i removed those parts.

#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;
}

Everything you printed is in win , but getch() reads from stdscr (the default full-screen window). Reading from stdscr causes it to jump up to the top of the window stack, obscuring your win .

Use wgetch(win) .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM