在C/C++ DOS中给文本着色的最简单方法是什么?

4
我在DOS环境下使用Turbo C++ 3.0制作了一个基本的贪吃蛇游戏,但我自己也是初学者。我一直在寻找一种非常简单和基础的方法,在DOS窗口中使文本显示不同的颜色。我不需要复杂的文本着色方式。我编写的大多数程序都非常简单和基础,如果要使用比程序本身还要大的复杂代码来着色文本,那只会让人感到困惑和无效。
我的问题是,在C和C++两种语言中,最简单的在DOS控制台中给文本着色的方法是什么?

2
  1. 你确定你在使用DOS吗?你确定不是Windows吗?
  2. 你不能使用现代编译器吗?这样可能会更容易得到帮助。
- David Heffernan
2
@ Cody Gray,怎么会是浪费时间呢?我在帖子中有说过我正在学习Turbo C++吗?它能编译吗?可以。我在学校里使用它吗?是的。相比其他编译器,它给了我实际使用的帮助吗?是的。请不要发表与问题无关的内容。 - Bugster
4个回答

7

如果你启用ansi.sys,你就可以使用ansi转义序列。

我假设你正在使用Windows上的DOS,因为你提到了“DOS窗口”,所以你需要在使用它之前启用ansi.sys。

Turbo C++ 3.0不带有Windows头文件或库,因此您无法使用Console API。


6

您可以使用Turbo C/C++的专有(即非标准)函数textcolor()textbackground()textattr()cprintf()cputs()putch()一起使用。请查看IDE帮助中它们的描述,它们都在conio.h中。


2

您是否实际上在使用DOS(例如DOSBox或Win 9x上的DOS)?

如果是这样,ANSI.SYS非常容易使用。只需在文本前面加上设置颜色的控制代码即可。

如果不是(也就是说,您实际上是在Windows的命令提示符上使用),则使用SetConsoleTextAttribute来设置前景和背景颜色。

我刚想起来,32位版本的Windows仍然支持command.com,而且可以加载ANSI.SYS


1

如果您直接写入视频文本缓冲区,则屏幕上的每个字符单元都对应一对字节,一个是要显示的字符,另一个是其颜色。请参见http://en.wikipedia.org/wiki/VGA_compatible_text_mode

起初,这可能看起来有点令人生畏,但实际上非常简单。只是有点不熟悉。使用ANSI转义序列需要生成相当多的输出,而文本缓冲区是每个字符一个16位字。

虽然现在已经不重要了,但在老式硬件上,必须写入文本缓冲区才能获得响应性的更改。通过ANSI接口需要花费明显的时间。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接