无法使用 Ncurses mvchgat 为多行字符添加颜色

Cannot add color to character on multiple lines using Ncurses mvchgat

我正在尝试使用循环为 Ncurses 中的视频游戏地图着色,为多个角色指定特定的颜色,它在单行上工作正常,但每当我尝试将颜色应用于多行时,它都不会'不应用任何颜色,或者只在最后一行应用颜色。

这是我的代码:

initscr();
start_color();
char *map =  strdup("OOOOOOOOOXOOOOOOOOO\nBXXXOXXXOXOXXXXOXXB\nOXXXOXXXOXOXXXXOXXO\nOOOOOOOOOOOOOOOOOOO\nOXXXOXOXXXXXOXXOXXO\nOOOOOXOOOXOOOXXOOOO\nXXXXOXXXOXOXXXXOXXX\nXXXXOXOOOOOOOXXOXXX\nXXXXOXOMMMMMOXXOXXX\nXXXXOOOMMMMMOOOOXXX\nXXXXOXOMMMMMOXXOXXX\nXXXXOXOOOOOOOXXOXXX\nXXXXOXOXXXXXOXXOXXX\nOOOOOOOOOXOOOOOOOOO\nOXXXOXXXOXOXXXXOXXO\nBOOXOOOOOOOOOOOOXOB\nXXOXOXOXXXXXOXXOXOX\nOOOOOXOOOXOOOXXOOOO\nOXXXXXXXOXOXXXXXXXO\nOOOOOOOOOOOOOOOOOOO");
init_pair(1, COLOR_CYAN, COLOR_BLACK);
init_pair(2, COLOR_YELLOW, COLOR_BLACK);
init_pair(3, COLOR_RED, COLOR_BLACK);
int y = 0;
int x = 0;
while (true) {
    mvprintw(0, 0, map);
    for (int i = 0; y < 19; i++, x++) {
        if (x == 19) {
            y++;
            x = 0;
        }
        if (map[i] == 'O') {
            mvchgat(map[i], y, x, 1, A_BLINK, 2, NULL);
        }
        else if (map[i] == 'X') {
            mvchgat(y, x, 1, A_BLINK, 1, NULL);
        }
        else if (map[i] == 'B'){
            mvchgat(y, x, 1, A_BLINK, 3, NULL);
        }
        refresh();
    }

字符串中的 \n 擦除下一行,清除视频属性。

mvprintw(和 printw 等),最终调用 waddch,记录行为:

  • Newline does a clrtoeol, then moves the cursor to the window left margin on the next line, scrolling the window if on the last line.