栏目搜索
 
 
 
 
你的位置:首页 > 程序设计相关资料 > ANSI颜色使用研究 >
 

ANSI颜色使用研究

发布者:[本站编辑] | 来源:[]

ANSI颜色使用研究_电脑维修资料库

      总所周知,es2类的lpmud是一个只有文字的世界,因为没有任何图像,所以正是因为有16种ansi颜色,才使得
我们这个世界变得丰富多彩,更有吸引力。出于一名巫师和一名网页制作者的考虑,目前的巫师在使用ansi颜色时,常常
不是惜墨如金一点都不用就是不分场合到处乱用,这样对于一个mud的表现力而言都是不好的。所以我今天有空就想随便
说说有关ansi color的一些使用方法,给大家参考。

    我们先从源头说起,之所以加了ansi标示符的字符就可以显示不同的颜色,是因为通过客户端像zmud这样的软件,能
够从winsock控件的dataarrival事件中传回的数据中识别出ansi标示符,将其后面的字符转换成指定的颜色,在rich
textbox中显示出来。这涉及一些简单的windows网络编程,就不多谈了。至于tintin+这些,虽然在linux下使用的控件
和windows不同,但原理还是一样的。

    一般来说,要在一个程序中使用ansi颜色,人人都知道要在头上#include <ansi.h>,那么,这个“ansi.h”文件你打
开看过了没有呢?在一些welcome文件中那些初学者看来非常深奥的什么<1;37m这样的字符你明白了它的意思没有呢?让
我们打开/include/ansi.h这个文件看一看吧:

// file : /include/ansi.h

#define esc 
#define csi esc + <

/* 前景色 */

#define blk esc+<30m /* 黑色 */
#define red esc+<31m /* 红色 */
#define grn esc+<32m /* 绿色 */
#define yel esc+<33m /* 黄色 */
#define blu esc+<34m /* 蓝色 */
#define mag esc+<35m /* 紫色 */
#define cyn esc+<36m /* 青色 */
#define wht esc+<37m /* 白色 */

/* 加强前景色 */

#define hir esc+<1;31m /* 亮红 */
#define hig esc+<1;32m /* 亮绿 */
#define hiy esc+<1;33m /* 亮黄 */
#define hib esc+<1;34m /* 亮蓝 */
#define him esc+<1;35m /* 亮紫 */
#define hic esc+<1;36m /* 亮青 */
#define hiw esc+<1;37m /* 亮白 */

/* 加强背景色 */

#define hbred esc+<41;1m /* 亮红 */
#define hbgrn esc+<42;1m /* 亮绿 */
#define hbyel esc+<43;1m /* 亮黄 */
#define hbblu esc+<44;1m /* 亮蓝 */
#define hbmag esc+<45;1m /* 亮紫 */
#define hbcyn esc+<46;1m /* 亮青 */
#define hbwht esc+<47;1m /* 亮白 */

/* 背景色 */

#define bblk esc+<40m /*黑色 */
#define bred esc+<41m /*红色 */
#define bgrn esc+<42m /*绿色 */
#define byel esc+<43m /* 黄色 */
#define bblu esc+<44m /*蓝色 */
#define bmag esc+<45m /*紫色 */
#define bcyn esc+<46m /*青色 */
// #define bwht esc+<47m /* 白色 */

#define nor esc+<2;37;0m /* 返回原色 */

/* 新增的ansi颜色定义字符。由 gothic april 23,1993 */
/* 注意:这些操作符是为vt100终端设计的。 */
/* 在mud中,它们可能不一定全部都能正常使用。 */

#define bold esc+<1m /* 打开粗体 */
#define clr esc+<2j /* 清屏 */
#define home esc+#define ref clr+home /* 清屏和清除光标 */
#define bigtop esc+#3 /* dbl height characters, top half */
#define bigbot esc+#4 /* dbl height characters, bottem half */
#define savec esc+#define rest esc+//#define revindex esc+m /* scroll screen in opposite direction */
#define singw esc+#5 /* normal, single-width characters */
#define dbl esc+#6 /* creates double-width characters */
#define frtop esc+<2;25r /* 冻结首行 */
#define frbot esc+<1;24r /* 冻结底部一行 */
#define unfr esc+#define blink esc+<5m /* 不断闪亮模式 */
#define u esc+<4m /* 下划线模式 */
#define rev esc+<7m /* 打开反白模式 */
#define hirev esc+<1,7m /* 亮色彩反白显示 */

       上面就是经过我汉化的的ansi.h文件了,其中有些实在太难译,所以我只好把原来的留了下来。认真看过上面
的这些,就应该基本明白常用的ansi颜色怎么用了,所以说,如果不#include <ansi.h>,照样也可以用彩色,你只
需要在用的前面加上<1;33m这样就行了,这些都很简单,我就不赘述了。这篇文章要谈的重点,其实是一个ansi 
color于zmud的协调问题。

      基本上绝大多数的mud玩家都是使用zmud为客户端软件的,所以你的程序在zmud中的显示效果就尤为重要了。
问题其实是出现在了在ansi颜色的使用上,zmud和标准的ansi定义出现了分歧,这种分歧是在zmud 4.62汉化版
后产生的,zmud的4.62英文版都应该尚无此问题,但正是因为以前没有问题后来才出现了问题。你听到这里是不是
越来越不明白?那好,我们还是从源头说起吧。下面的“原先”,就是指zmud 4.62 英文版及以前的。

     看过上面的定义就应该清楚<1;xxm这样的定义,也就是hix这样的定义中,那个1;或者hi什么的,是表示
粗体的意思,原先的注释中说得清清楚楚的,而原先的yel,也就是<33m,大概是这种亮度,而倘若变成了hiy或
者说<1;33m的话,就应该是这样了,这才是标准的用法,而zmud对中文字体的支持还是不大完善,一般来说就是
使用宋体,假如出现了粗体,也会在屏幕上划得斑驳陆离,本来是这一行的字,滑到了下面几行去,非常的有碍观瞻。
所以以zmud4.62英文版为预览工具来写的程序一般是不用hiy而是就用yel的,因为这样颜色也够亮,显示也没有问
题,一切都很好。

     但到了4.62汉化版以后,就破坏了这个格局。在这个版本以后的所有zmud,基本上都是将<1;也就是hi默认解释
为高亮,而原来的yel什么的,就变得很是暗淡了,比如此版本以后的yel,显示出来是这样,而hiy呢,就是这样了,
因为始终不出现粗体,所以自然也没有显示的问题。而在原来的那种环境下开发出来的程序可就惨了,像我的模拟华附,
整个mud的颜色都显得十分暗淡,自然很不具亲和力了。

     本身问题是很容易解决的,只要调整一下zmud的设置就可以了,但问题在于有关颜色的zmud设置由特别难调整
(差不多每个版本我的试过),造成了本身正常的设置还要迁就不正常的设置了,绝大部分的玩家都不会去调整。因此
的你的mud如果要使用ansi颜色就要考虑这个兼容性问题了。

      所以呢,因为绝大部分的mud玩家使用的都是zmud 4.62中文版以上的,我建议还是统一使用“hix”这种好一
点,玩家看起来颜色比较鲜亮,同时也没有粗体显示不清的问题。低亮度的颜色就少用一些吧,当然,假如你已经全部
使用了低亮度或者高亮度,想转换的话,也可以通过改ansi.h来实现,这比较简单,就不用我说了吧。

      其实ansi.h还是有很多没有普遍使用的妙处的,这就有待各位自己去发现了。</t

 
 
  推荐文章
 
     暂无