色彩


请注意,本文无法展示在屏幕上实际显示出的颜色。

色彩对游戏来说是非常有用,它可以增加可读性、让你的游戏看起来更吸引人。但请记住,MUD是由不同的人玩的,他们会使用各种各样的客户端,有些甚至不支持彩色,盲人或其它有视力障碍的人还会在特殊的阅读设备上玩文字游戏。

所以一个好的经验是用色彩来增强你的游戏,但不要依靠它来显示重要信息。如果你正在编写游戏,你可以用这里介绍的方法添加让用户启用/禁用颜色的功能。

要检查你的客户端支持哪些颜色,可以使用默认的 @color 命令。它会按参数列出ANSI或Xterm256支持的所有颜色。你可以在 src/utils/ansi.py 中找到全部ANSI颜色的编码解析表。


ANSI颜色

Evennia支持ANSI文本显示标准,这是迄今为止得到最广泛支持的标准,适用于除了最古老的mud客户端之外的其他所有客户端。ANSI的颜色有红(red)、绿(green)、黄(yellow)、蓝(blue)、品红(magenta)、青(cyan)、白(white)和黑(black)。除了黑色的缩写为x外,其它都缩写为它们的第一个字母。在ANSI中每种颜色都有“浅色”和“正常”两个版本,加起来总共有16种颜色可用于前景文本,此外还有8种“背景”颜色,它们没有“浅色”的版本。

要给文字添加颜色,你需要设置特殊的标记。Evennia会在幕后将它们转换为标准的ANSI码发送。如果用户的客户端、主机、显示器支持这些标记,他们将会看到用指定颜色显示的文本。这同样适用于非终端的客户端,如web客户端。对于web客户端,Evennia会将其转换为HTML的颜色代码。

给游戏中的文字添加ANSI颜色很容易,你只需要在文字前后加上特殊标记,告诉Evennia这种颜色从哪里开始到那里结束就行了。Evennia用小写字母代表浅色(这在传统的黑色背景终端上是最容易阅读的),用大写字母代表深色(正常色)。
{r这些文字是浅红色。{n 这是正常的文字。
{R这些文字是深红色。{n 这是正常的文字。
{[r这些文字有红色的背景。{n 这是正常的文字。
{b{[y这些文字是黄色背景亮蓝色。{n 这是正常的文字。
  • {#   标记就像一个开关,它一直起作用直到你主动用 {n 关闭它(这个标记会将文本设回你的默认格式)。大小写决定文本是浅色还是深色的,所以 {g 是浅绿色,{G 是深绿色。
  • {[#  用于给文本添加背景色。ANSI的背景色没有深浅之分,所以都用小写字母表示。例如 {[b 表示给普通文本添加蓝色背景。请注意,如果你想同时指定背景色和前景色,要确保把背景色标记放在前景色标记之后,就像这样:{r{[b。

还有一些额外支持的ANSI代码:
  • {n   普通/复位。这将文字设回默认的颜色。
  • {/   是换行符。你不能在游戏中输入Python的普通 \n换行符(Evennia会出于安全原因过滤掉它)。在游戏中使用{/来设置文本格式。
  • {-   这会转换为制表符。
  • {_   这是空格。通常你可以使用普通的空格,但如果普通空格出现在行末, Evennia会把它裁剪掉。而这个标记能总是显示为空格。
  • {*   会反转当前的文本/背景色。它可以用来标记东西。

请记住,即使指定了某种颜色,比如黄色,在用户屏幕上实际显示的到底是哪种黄色还是要看他们的客户端/浏览器是如何设置的。如果用户愿意,他们甚至可以交换颜色或彻底关闭颜色。所以,不要靠特定颜色来表达关键信息。

使用命令
@color ansi
可以显示所有可支持的ANSI颜色的列表,以及产生这些颜色的标签。


Xterm256

许多现代的MUD客户端支持Xterm256标准,这是一个支持256色文本/背景色的方案。

和ANSI的方式一样,你需要使用标记指定文本颜色。
{555 这是纯白的文字。{n 这是正常的文字。
{230 这是橄榄绿的文字。{n 这是正常的文字。
{[300 这些文字有暗红色的背景。{n 这是正常的文字。
{005{[054 这是在深蓝色背景上的浅青色文字。{n 这是正常的文字。
  • {###   标记用于Xterm256。每个数字都是从0到5的整数,三位数字描述了颜色中红、绿、蓝(RGB)分量的值。所以{500具有最大的红色值,没有其他颜色 —— 结果是鲜艳的红色;{520是红色带点绿色 —— 结果是橙色;以此类推。
  • {[###  以相同的方式工作,但产生的是背景色。

如果你有支持Xterm256的客户端,你可以用
@color xterm256
来得到所有256种颜色的列表,以及产生这些颜色的代码。你可以混合使用ANSI和Xterm256符号。


过时的方法

还有一种使用%c的过时方法:

%c#  标记就像一个开关,它一直起作用直到你主动用%cn关闭它。大写字母表示背景色,小写字母表示文本颜色。所以,%cR表示在正常颜色的文字后面加上红色背景。如果你同时使用红色背景和红色前景文本 —— %cR%cr,你会得到一个红色色块而看不到文字!同样,%cR%cx是红色背景黑色文字。%ch会“高亮”显示你当前的文本,灰色变白色、暗黄色变成黄色等等。

%c 格式的缺点与Python格式化字符串有关 —— Python用%来生成特殊的文本格式,同时用它来指定颜色代码很容易产生混乱的难以阅读的代码。因此,最好使用{#样式的编码。


(原文:https://github.com/Evennia/evennia/wiki/Colours    翻译:卢铱俊)