Отсутствует одно текстовое пятно при использовании ncurses - PullRequest
0 голосов
/ 07 декабря 2018

Я использую Ncurses, чтобы «нарисовать» городской горизонт на основе файла.Если горизонт города не соответствует ширине экрана пользователя, я должен заполнить оставшуюся часть экрана на уровне земли точкой '_'.Пятно на уровне земли - это максимальное значение экрана - 2. Когда я пытаюсь заполнить остальную часть экрана, кажется, что между концом файла и заполнением экрана всегда остается одна пустая точка.Любая помощь будет потрясающей.

Создание карты (заполнение экрана является нижней частью цикла):

void makemap( map * game ){

    int ychange;
    int flag = 0;

    initscr();
    cbreak();
    noecho();
    getmaxyx( stdscr, maxy, maxx );
    mvprintw(0, maxx - (maxx - 4), "Enter 'q' to quit at end of attack, or control-C");
    refresh();

    for( size_t i = 0; i < game->size; i++ ){
            ychange = game->layout[i] - game->layout[i+1];

            if(game->layout[i] > maxheight)
                    maxheight = game->layout[i];
            if(game->layout[i+1] > maxheight)
                    maxheight = game->layout[i+1];

            if( ychange == 0 ){
                    mvprintw(maxy - game->layout[i], i, "_");
                    refresh();
            }
            else if( ychange < 0 ){
                    for( int c = 0; c < game->layout[i+1]-2; c++ ){
                            mvprintw(maxy - 2 - c , i, "|");
                            refresh();
                    }
            }
            else if( ychange > 0 ){
                    for( int c = 0; c < game->layout[i] - 2; c++ ){
                            mvprintw(maxy - 2 - c, i ,"|");
                            refresh();
                    }
            }
    }

    if( (int)game->size < maxx ){
            if( !(game->layout[game->size] == 2) ){
                    flag = 1;
                    for( int i = 0; i < game->layout[game->size] - 2; i++ ){
                            mvprintw(maxy - 2 - i, game->layout[game->size] + 1, "|");
                            refresh();
                    }
            }

            if( flag == 1 ){
                    for( int i = game->size; i <= maxx; i++ ){
                            mvprintw(maxy - 2, i, "_");
                            refresh();
                    }
            }
            else{
                    for( int i = game->size; i < maxx; i++ ){
                            mvprintw(maxy - 2, i, "_");
                            refresh();
                    }
            }
    }

}

Это вывод функции makemap.Не обращайте внимания на любые трубы в середине экрана (те, которые изображают падающие ракеты).По сути, в правом нижнем углу есть одно пустое место, которое я не могу исправить.Это промежуток между тем, что кажется концом файла, и тем, что я заполняю остальную часть экрана.Я пытался изменить цикл for на другие размеры, но он не работает.

https://i.stack.imgur.com/G8u9q.png

...