Как создать цветной графический интерфейс в консольном приложении?

Ответы на следующие вопросы могут быть для C / C++, C# или Python. Я бы хотел, чтобы ответы были кроссплатформенными, если это возможно, но я понимаю, что мне, вероятно, понадобится conio или ncurses

  1. Как вывести цветной текст?
  2. Как мне сделать графический интерфейс, как topили nethackгде определенные вещи «нарисованы» в определенных местах в терминале?

Если возможно, было бы здорово использовать небольшой пример кода с одним вкладышем.

Ответов (5)

Большинство окон терминала понимают управляющие последовательности ANSI, которые позволяют раскрашивать, перемещать курсор и т. Д. Вы можете найти их список здесь .

Использование этих последовательностей может показаться немного «старой школой», но вы можете использовать их в тех случаях, когда проклятия на самом деле не применимы. Например, я использую следующую функцию в своих сценариях bash, чтобы отображать сообщения об ошибках красным цветом:

color_red()
{
    echo -e "\033[01;31m$1\033[00m"
}

Затем вы можете сказать что-нибудь вроде:

color_red "something has gone horribly wrong!"
exit 1

Не кросс-платформенный, а для цвета Windows / C#, см.

Раскрасьте текст консоли (C#)

c ++

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

Библиотека ncurses предоставляет функции для прямого вызова курсора и вывода текста, и известно, что она работает для консоли Windows (где работает CMD.EXE), а также с различными эквивалентами платформы * nix, такими как XTerms и т.п. Возможно, он даже работает с настоящим Dec VT100 по последовательной линии, если бы у вас была такая штука ...

Управляющие последовательности, понятные для VT100 и более поздних моделей, стали основой для стандартного терминала ANSI. Но вы действительно не хотите знать об этом. Используйте ncurses, и вам не придется.

Опираясь на conio, вы не добьетесь кроссплатформенности, поскольку это API, специфичный для DOS / Windows.

Изменить: по- видимому, сама библиотека ncurses нелегко построить на mingw, по крайней мере, как было замечено при быстрой попытке Google ее. Однако еще не все потеряно, поскольку ncurses - лишь один из потомков исходной библиотеки curses .

Другой - PDCurses, который, как известно, компилируется и запускается для консолей Windows, а также для X11 и различных платформ * nix.

(Мне только что напомнили в поисках ссылок в Википедии, что curses возникли из-за написания игры rogue, которая является предком nethack. Часть его кода также была «позаимствована» из модуля управления курсором редактора vi. в исходном ките nethack для идей может быть вовсе не безумной идеей ...)

В C# вы можете установить цвет текста и цвет фона через свойства Console.ForegroundColor и Console.BackgroundColor соответственно. Список допустимых цветов см. В этом документе MSDN .

Да, это escape-коды VT100. Самый простой способ - использовать какой-нибудь аромат Curses. После того, как вы выберете вариант проклятия, довольно просто сделать и 1, и 2.

Вот инструкция по ncurses.

http://web.cs.mun.ca/~rod/ncurses/ncurses.html