Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
rxvt中使用ncurses的闪烁ACS电路板_C_Linux_Ncurses_Rxvt - Fatal编程技术网

rxvt中使用ncurses的闪烁ACS电路板

rxvt中使用ncurses的闪烁ACS电路板,c,linux,ncurses,rxvt,C,Linux,Ncurses,Rxvt,我想熟悉诅咒界面(以前从未使用过),所以上周末我写了一个小蛇游戏。有一个单行状态窗口*,屏幕的其余部分是字段窗口*游戏逻辑调用一个中央绘图函数来放置一个项目,只有在必要时: /* note: CP_* are just enum values to give my own color pairs names */ void screen_putItem(Screen *self, int y, int x, Item item, int refresh) { switch (item)

我想熟悉诅咒界面(以前从未使用过),所以上周末我写了一个小蛇游戏。有一个单行状态
窗口*
,屏幕的其余部分是字段
窗口*
游戏逻辑调用一个中央绘图函数来放置一个项目,只有在必要时:

/* note: CP_* are just enum values to give my own color pairs names */
void
screen_putItem(Screen *self, int y, int x, Item item, int refresh)
{
    switch (item)
    {
        case EMPTY:
            mvwaddch(self->field, y, x, ' '|COLOR_PAIR(CP_WHITE));
            break;
        case HEAD:
#ifdef WIN32
            /* 'smiley' character for windows console */
            mvwaddch(self->field, y, x,
                    1|COLOR_PAIR(CP_YELLOW)|A_BOLD|A_ALTCHARSET);
#else
            mvwaddch(self->field, y, x, '@'|COLOR_PAIR(CP_YELLOW)|A_BOLD);
#endif
            break;
        case TAIL:
            mvwaddch(self->field, y, x, ACS_CKBOARD|COLOR_PAIR(CP_YELLOW));
            break;
        case FOOD:
            mvwaddch(self->field, y, x, '#'|COLOR_PAIR(CP_GREEN)|A_BOLD);
            break;
        case FFOOD:
            mvwaddch(self->field, y, x, '#'|COLOR_PAIR(CP_GREEN));
            break;
        case WALL:
            mvwaddch(self->field, y, x,
                    ' '|COLOR_PAIR(CP_RED)|A_REVERSE);
            break;
    }
    if (refresh) wrefresh(self->field);
}
问题是:在
rxvt
中,蛇的身体(由
尾巴
物品制成)有时会闪烁。蛇移动时,重绘,只有头部的最后位置被
尾巴
替换,蛇末端的尾巴项目被
替换

供您参考,整个项目是,请参阅

对于输入,代码使用了
getch()
,我已经检查过这不是问题所在(应该不是,
stdscr
在init时刷新,并且再也没有接触过),只在字段窗口上使用
wgetch()
,结果相同

此外,它在良好的旧
xterm
和windows控制台中使用pdcurses工作良好(无闪烁)。它在
rxvt
iff中运行良好。我将上面代码段中的
ACS\u电路板
替换为一些“普通”字符

所以,现在我想知道:我是否在
rxvt
中遇到了错误/缺点?
ACS.*
字符有什么特别的地方会导致终端闪烁吗?我的方法有什么问题吗?

告诉我,您的程序几乎都是从stdscr执行的,但几乎所有的操作都是针对创建的第二个窗口执行的(看起来第一个窗口只是一个状态行)


ncurses的跟踪功能通常位于调试库中;我为自己编译的副本已正常编译。

Hi@Thomas,非常感谢您的输入!这看起来是一个有趣的调试功能。不幸的是,我已经尝试了只在第二个窗口(代码中的命名字段)上执行
wgetch()
的版本,并且
rxvt
中的结果是相同的。。。所以我直接将这个变更集删除为/dev/null。。。如果它有助于调试,我可以重新创建它,但我不认为这是这里的问题。尽管如此,对于一些我不知道的调试工具,+1,谢谢!