ft_rich是用ruby写的一个简单得扑克大富翁游戏,逻辑很简单,使用了终端颜色
的特性。
原来是在windows下使用ruby c ext实现的颜色功能,现在在mac OS x下做移植,
因为后者终端直接支持颜色显示,所以没那么复杂了——直接在ruby里使用
gem highline搞定鸟。
windows下的颜色使用的是一个class Ctxt#color方法,Ctxt是在c ext中调用
native win32 api实现的。移植得第一步,我想先跑起来这个程序,带不带颜色无
所谓,于是将Ctxt类更改为如下:
class Ctxt BG_BRIGHT = 0 BG_WHITE = 0 FG_RED = 0 FG_BRIGHT = 0 FG_GREEN = 0 def method_missing(name,*arg) case name when :color printf(arg[0]) else puts "unknow func for Ctxt..." end end end
不管啥颜色,一律白色printf,几个常量统统忽略。
在终端下执行,发现中文是乱码,遂将终端使用偏好中的文字编码改为GBK,
正常鸟。
现在添加Mac OS X终端的彩色显示功能。下载highline gem:
gem list --remote highline
gem install highline
在源代码中包含 :
require 'highline/import'
重构Ctxt类如下:
class Ctxt @@ct = HighLine.new def color(msg,ft) printf @@ct.color(msg,ft) end end
接下来为了以后的扩展性和DRY原则,将源代码中的Ctxt常量改为Highline常量,
并将|符号改为+,因为HighLine常量不是整数类型的。
def self.show(card) case type(card) when "小鬼","黑桃","梅花" @@ct.color(card,HighLine::ON_BRIGHT_WHITE+HighLine::BLACK) when "大鬼","红桃","方块" @@ct.color(card,HighLine::ON_BRIGHT_WHITE+HighLine::BRIGHT_RED) else raise "unknow type!!!" end end