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
保存,运行,一切OK鸟!!!:)