Как создать цветной графический интерфейс в консольном приложении? - PullRequest
4 голосов
/ 26 февраля 2009

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

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

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

Ответы [ 5 ]

4 голосов
/ 26 февраля 2009

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

Вот как это сделать на курсах.

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

1 голос
/ 26 февраля 2009

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

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

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

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

Редактировать: Очевидно, что сама библиотека ncurses не так-то просто построить на Mingw, по крайней мере, как это было видно из быстрой попытки Google ее найти. Однако, еще не все потеряно, так как ncurses - только один из потомков оригинальной библиотеки curses .

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

(мне только что напомнили из погони за ссылками в Википедии, что проклятия возникли из-за написания игры-мошенника, которая является прародителем nethack. Часть ее кода была "заимствована" из модуля управления курсором редактора vi Так что использование в nethack source kit идей не может быть сумасшедшей идеей ...)

1 голос
/ 26 февраля 2009

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

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

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

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

color_red "something has gone horribly wrong!"
exit 1
0 голосов
/ 26 февраля 2009

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

0 голосов
/ 26 февраля 2009

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

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

C ++

...