Ncurses滚动线条

时间:2016-06-02 21:47:40

标签: c ncurses

我正在为我的主题做一个简单的Frogger游戏,但我的代码有一个问题,我不知道如何解决它。我一直在函数中使用mvprintw以相同的方向在地图上移动“对象”,但是当它完成第一个完整的地图并再次开始向上滚动一行时,我怎么能避免滚动?

继承对象功能:

void rand_obj1 (int y)
{
    init_pair (3, COLOR_RED , COLOR_CYAN);
    attron(COLOR_PAIR(3));
    mvprintw (20,y, "  _ _ _ _");
    mvprintw (21,y, "()   _   )");
    mvprintw (22,y, "()_ _ _ _)");
    mvprintw (10,y, "  _ _ _ _");
    mvprintw (11,y, "()   _   )");
    mvprintw (12,y, "()_ _ _ _)");
    usleep(delay1);
}

在我的主要功能上使用的循环显示地图e重新设置坐标到对象步行throguh再次开始:

while (1)
    {
        if (y >= max_x) y=0;
        //map
        lago(4,0,max_x,max_y*(0.48),1);
        //create obj
        rand_obj1 (y);
        refresh();
        y++;
    }

1 个答案:

答案 0 :(得分:1)

在给定的示例中没有任何内容可以执行所描述的内容。

您的程序(部分 )可能正在使用printf向终端写入消息,并且这些消息未被显示(或被视为帐户)由curses库。

例如,它可以在这个电话中:

lago(4,0,max_x,max_y*(0.48),1);

根据评论,lago不是原因。运行sample program表明它使用了额外的一行(由于环绕),总共提供了23行。通常这不是问题,但假设您的终端是23行(可能发生),如果您还将环境变量LINES设置为24(也可能),那么您将看到包装为如下图所示:

enter image description here

例如,如果您已将终端配置为以23行开头(或通过为您执行此操作的IDE运行它),并且发现一些问题然后设置环境变量以解决此问题,则可能出现不匹配。环境变量会覆盖curses'屏幕大小的概念(尽管可以使用use_env更改)。