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

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

一般来说,要在一个程序中使用ANSI颜色,人人都知道要在头上#include ,那么,这个“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 ,照样也可以用彩色,你只
需要在用的前面加上[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还是有很多没有普遍使用的妙处的,这就有待各位自己去发现了。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10748419/viewspace-987387/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10748419/viewspace-987387/

ANSI颜色使用研究 (转)相关推荐

  1. ANSI颜色字体一篇通

    ANSI 以及颜色编码 ANSI 是一种字符编码, 其扩展了ASCII 编码. ANSI 可以实现在终端输出带有颜色的字体,这里的终端有很多,典型的就是Linux 的命名终端,另外Eclipse在安装 ...

  2. Windows cmd(DOS)命令窗口中echo命令ANSI转义显示彩色字或背景

    2019独角兽企业重金招聘Python工程师标准>>> 前言 3个星期的周末了解LINUX下.WINDOWS下的ANSI颜色转义控制,LINUX下根据网上的搜索结果一下就成功了,但W ...

  3. 如何获取Vim中所有已安装颜色方案的列表?

    有没有办法获得Vim中所有已安装颜色方案的列表? 这样可以很容易地选择一个而不查看.vim目录. #1楼 您可以在/usr/share/vim/vimNN/colors下看到颜色方案列表( NN是版本 ...

  4. opencv颜色识别学习总结

    将OpenCV 用于识别彩色LED颜色 将OpenCV 用于识别彩色LED颜色时,可以通过分色计算各通道非饱和像素的HSV值,能可靠识别各LED的颜色. 使用python编程,识别一个1024*480 ...

  5. 2020研究洞察:新消费品牌的8大增长驱动力

    作者:yolo@增长黑盒 出品:增长黑盒研究组 从2017年起,增长黑盒每年都会根据过去一年的研究,发布"年度10大增长策略",试图为大家总结可复制的.可落地的思路,其中不乏我们亲 ...

  6. Mac -- zsh-最新全网超详细的个性化终端(Terminal)颜色及vim颜色配置

    目录 更新 macOS Catalina终端默认为zsh,以下第三节开始的配置会遇到无法应用的问题,解决方案有两种: 一: 默认设置的缺陷 二:Terminal偏好设置  -- 以任意方式打开终端 ...

  7. 颜色迁移之一——基础知识(色彩空间及其转换)

    因为我的本科毕业论文题目跟颜色迁移有关,我以后我会慢慢总结颜色迁移方面的算法与技术~~~~首先介绍下什么事颜色迁移. 颜色迁移是计算机视觉领域的一个很有趣的问题,它实际上要我们解决这么一个问题:基于图 ...

  8. linux更改终端颜色_如何更改Linux终端的颜色

    linux更改终端颜色 您可以使用特殊的ANSI编码设置在Linux终端中添加颜色,可以在终端命令或配置文件中动态添加颜色,也可以在终端仿真器中使用现成的主题. 无论哪种方式,黑色屏幕上的怀旧绿色或琥 ...

  9. 【Mac】超详细的个性化终端(Terminal)颜色及vim颜色配置

    打包资源传送门 获取更多内容,请访问博主的个人博客 爱吃猫的小鱼干的Blog 更新 macOS Catalina终端默认为zsh,以下第三节开始的配置会遇到无法应用的问题,解决方案有两种: 切换为ba ...

  10. 【mud】object增加颜色的代码以及参考

    一.#include <ansi.h> 二.    set_name(HBRED+"极乐逍遥散"+NOR, ({ "poison dust", &q ...

最新文章

  1. 三招教你如何判断ERP软件是否适用
  2. 图集内子图压缩及 ETC2 fallback选项的作用
  3. oracle子查询为游标结果集,这个SQL怎么破?select后的爬树子查询(connect by)变换
  4. 使用parted给大于2T的磁盘分区
  5. vhd 镜像 备份Linux,差分VHD 系统秒备份、秒还原教程 完胜GHOST
  6. 函数计算镜像加速:从分钟到秒的跨越
  7. java list比较器_JAVA比较器
  8. OWASP TOP 10 1
  9. 带你体验云原生场景下 Serverless 应用编程模型
  10. android 记一次解决键盘遮挡问题
  11. 速度堪比Adam,准确率媲美SGD,还能稳定训练GAN:全新优化器成为NeurIPS爆款
  12. uniapp小程序迁移到TS
  13. 02-eclipse中构建ant项目和编译运行ant
  14. Python中的队列结构及其用法
  15. OA+CRM+ERP
  16. 【转】android gravity属性 和 weight属性
  17. zookeeper基本安装文档
  18. MATLAB数值计算——矩阵运算乘法、除法、乘方
  19. 计算机领域国际期刊,科学网—计算机国际期刊zz - 黄红星的博文
  20. 【笔记】软件测试04——MySQL

热门文章

  1. pe卸载win10更新补丁_【pe卸载补丁】pe卸载全部补丁_pe+卸载补丁工具
  2. 移动修改服务器密码是什么,移动服务器密码
  3. win10系统启动wifi服务器,windows10系统下开启wifi共享的两种方法
  4. python excel截图保存_如何用Python读取Excel中图片?又如何用Python往Excel中写入图片?...
  5. 什么是即时通讯?即时通讯的发展
  6. 35岁的程序员:第9章,女测试
  7. redis for lack of backlog
  8. 可重入锁模拟三个线程之间的通信
  9. 小程序12306服务器,微信小程序12306来了!史上最详细体验出炉!
  10. Nginx Window假死状态