编辑:这是此问题的续集。 Drawing colors to console causes color flicker
因此,在C / C ++中,像printf
和cout
这样的命令将写入纯文本输出。因此,设计用于80×25文本显示和60fps的视频游戏每帧必须输出2000个字符的文本。我想在屏幕上书写,就像一个命令,例如将一个字符串写入第12行或第4列的第9至第9列,而不是每次更改时都不断添加纯文本。我不是说图形输出,这仍然是文本模式,而不是纯文本嵌入控制台类型的文本模式。
编辑:对于那些想知道的人,每个动画帧输出纯文本整个屏幕的代码如下:https://github.com/PiotrGrochowski/testsortingvisualization/blob/master/test.cpp。有时会出现故障,而且我还没有计算出速度(是否为60fps)。
编辑:文本显示固定为80×25的概念确实的确意味着没有滚动或换行的概念。
编辑:https://en.wikipedia.org/wiki/VGA-compatible_text_mode。如何在C / C ++编程中将其显示到命令提示符?
答案 0 :(得分:3)
对于简单的操作,例如光标位置和文本颜色,可以使用ANSI转义码:https://en.wikipedia.org/wiki/ANSI_escape_code#Terminal_output_sequences 如果控制台支持它(在Linux,Unix,Mac以及据称在Windows 10中也是如此),它将可以正常工作。
此处是一个示例:https://rosettacode.org/wiki/Terminal_control/Cursor_positioning#C.2FC.2B.2B
如果控制台支持ANSI转义码,则以下内容将在第6行第3列上打印“ Hello”:
#include <stdio.h>
int main()
{
printf("\033[6;3HHello\n");
return 0;
}
在Windows上,如果控制台不支持ANSI,则具有Windows特定的功能:
#include <windows.h>
int main() {
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos = {3, 6};
SetConsoleCursorPosition(hConsole, pos);
WriteConsole(hConsole, "Hello", 5, NULL, NULL);
return 0;
}
您还可以将ncurses库用于POSIX。