分享
 
 
 

ANSI颜色使用研究

王朝other·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

总所周知,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+"[H" /* 发送光标到原处 */

#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+"[s" /* Save cursor position */

#define REST ESC+"[u" /* Restore cursor to saved position */

//#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+"[r" /* 首行和底部一行解冻 */

#define BLINK ESC+"[5m" /* 不断闪亮模式 */

#define U ESC+"[4m" /* 下划线模式 */

#define REV ESC+"[7m" /* 打开反白模式 */

#define HIREV ESC+"[1,7m" /* 亮色彩反白显示 */

上面就是经过我汉化的的ansi.h文件了,其中有些实在太难译,所以我只好把原来的留了下来。认真看过上面

的这些,就应该基本明白常用的ANSI颜色怎么用了,所以说,如果不#include <ansi.h>,照样也可以用彩色,你只

需要在用的前面加上这样就行了,这些都很简单,我就不赘述了。这篇文章要谈的重点,其实是一个ANSI

COLOR于zMUD的协调问题。

基本上绝大多数的MUD玩家都是使用zMUD为客户端软件的,所以你的程序在zMUD中的显示效果就尤为重要了。

问题其实是出现在了在ANSI颜色的使用上,zMUD和标准的ANSI定义出现了分歧,这种分歧是在zMUD 4.62汉化版

后产生的,zMUD的4.62英文版都应该尚无此问题,但正是因为以前没有问题后来才出现了问题。你听到这里是不是

越来越不明白?那好,我们还是从源头说起吧。下面的“原先”,就是指zMUD 4.62 英文版及以前的。

看过上面的定义就应该清楚xm这样的定义,也就是HIX这样的定义中,那个"1;"或者"HI"什么的,是表示

粗体的意思,原先的注释中说得清清楚楚的,而原先的YEL,也就是,大概是这种亮度,而倘若变成了HIY或

者说的话,就应该是这样了,这才是标准的用法,而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还是有很多没有普遍使用的妙处的,这就有待各位自己去发现了。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有