Самый простой способ раскрасить текст в C / C ++ DOS? - PullRequest
4 голосов
/ 20 января 2012

Я сделал простую игру-змейку в среде DOS с использованием Turbo C ++ 3.0, и я сам новичок. Некоторое время я искал очень простой и, возможно, элементарный способ создания текста разных цветов в окне DOS. Я не ищу сложные способы раскраски текста. Большинство программ, которые я пишу, чрезвычайно просты и просты, а сложный код для раскрашивания текста, который больше, чем сама программа, будет просто запутанным и неэффективным.

У меня вопрос, каков самый простой способ раскраски текста в консоли DOS на ОБАМ языке, C и C ++?

Ответы [ 4 ]

7 голосов
/ 20 января 2012

Если вы включаете ansi.sys , вы можете использовать escape-последовательности ansi.

Я предполагаю, что вы используете DOS в Windows, поскольку вы ссылаетесь на "окно DOS", поэтому вам необходимо включить ansi.sys, прежде чем вы сможете его использовать.

Turbo C ++ 3.0 не поставляется с заголовками или библиотеками Windows, поэтому вы не сможете использовать API консоли.

5 голосов
/ 20 января 2012

Вы можете использовать только Turbo C / C ++ (то есть нестандартные) функции textcolor(), textbackground() и textattr() вместе с cprintf(), cputs() и putch(). Смотрите их описание в справке IDE, они все в conio.h.

2 голосов
/ 20 января 2012

Вы действительно используете DOS (например, DOSBox или DOS на Win 9x)?

Если это так, ANSI.SYS очень прост в использовании. Вы просто предваряете свой текст контрольными кодами, которые устанавливают цвет.

Если нет (то есть вы на самом деле используете командную строку в Windows), тогда используйте SetConsoleTextAttribute для установки цветов переднего плана и фона.

И я только что вспомнил, 32-битные версии Windows по-прежнему поддерживают command.com, и это может загрузить ANSI.SYS.

1 голос
/ 20 января 2012

Если вы записываете непосредственно в видеотекстовый буфер, каждая ячейка символа на экране соответствует паре байтов, один - символ для отображения, другой - его цвета. Смотри http://en.wikipedia.org/wiki/VGA_compatible_text_mode

Сначала это может показаться немного сложным, но на самом деле это довольно просто. Это просто немного незнакомо. Использование escape-последовательностей ANSI требует генерации небольшого количества выходных данных, тогда как текстовый буфер представляет собой одно 16-битное слово на символ.

Не то, чтобы это больше имело значение, но на оборудовании старинной эры было необходимо записать в текстовый буфер, чтобы получить адаптивные изменения. Прохождение интерфейса ANSI заняло заметно много времени.

...