无法使用 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.
我正在尝试使用循环为 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.