如何在控制台应用程序中生成彩色GUI?

时间:2009-02-26 00:47:03

标签: c# c++ python c console-application

对于以下问题,答案可能适用于C / C ++,C#或Python。如果可能的话,我希望答案是跨平台的,但我知道我可能需要conioncurses

  1. 如何输出彩色文字?
  2. 我如何制作像topnethack这样的GUI,其中某些内容被“绘制”到终端中的某些空格?
  3. 如果可能的话,一个小的oneliner代码示例会很棒。

5 个答案:

答案 0 :(得分:4)

是的,这些是VT100转义码。最简单的方法是使用一些Curses。有一次,你选择一种诅咒味道,做1和2都很简单。

这是关于ncurses的HowTo。

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

答案 1 :(得分:1)

大多数终端窗口都了解ANSI转义序列,它允许着色,光标移动等。您可以找到它们的列表here

使用这些序列看起来有点像“老派”,但是在诅咒不适用的情况下你可以使用它们。例如,我在bash脚本中使用folowing函数以红色显示错误消息:

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

然后你可以这样说:

color_red "something has gone horribly wrong!"
exit 1

答案 2 :(得分:1)

从这个角度来看,控制台在很多方面只是对经典终端设备的仿真。最初创建Curses是为了支持在不同终端类型上进行常见操作的方法,其中使用中的实际终端可以由用户选择作为登录序列的一部分。这种遗产今天在ncurses中幸存下来。

ncurses库提供了调用直接定位光标和发出文本的函数,并且它已知适用于Windows控制台(运行CMD.EXE),以及各种* nix平台等价物,如XTerms和类似。如果你有这样的东西,它甚至可以在串行线上使用真正的Dec VT100 ......

VT100及其后期型号所理解的转义序列成为ANSI标准终端的基础。但你真的不想知道这一点。使用ncurses,你不必这样做。

依靠conio不会让你跨平台,因为这是一个DOS / Windows特定的API。

编辑:显然ncurses库本身并不容易构建在mingw上,至少从快速尝试使用Google时就可以看出来了。但是,所有这些都不会丢失,因为ncurses只是原始curses库的后代之一。

另一个是PDCurses已知 为Windows控制台以及X11和各种* nix平台编译和运行。

(我在维基百科追逐引用时提醒过,诅咒来自编写游戏流氓,这是nethack的祖先。它的一些代码是从vi编辑器的游标管理模块“借来”的。因此,在nethack source kit中获取想法可能并不是一个疯狂的想法......)

答案 3 :(得分:0)

不是跨平台,但对于Windows / C#颜色,请参阅

Color your Console text (C#)

c++

答案 4 :(得分:0)

在C#中,您可以分别通过Console.ForegroundColor和Console.BackgroundColor属性设置文本颜色和背景颜色。有关有效颜色的列表,请参阅此MSDN doc