mac OS X 下ft_rich游戏的重构

来源:互联网 发布:mac eclipse自动补全 编辑:程序博客网 时间:2024/05/17 09:03

      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 CtxtBG_BRIGHT = 0BG_WHITE = 0FG_RED = 0FG_BRIGHT = 0FG_GREEN = 0def method_missing(name,*arg)case namewhen :colorprintf(arg[0])elseputs "unknow func for Ctxt..."endendend

     不管啥颜色,一律白色printf,几个常量统统忽略。

    在终端下执行,发现中文是乱码,遂将终端使用偏好中的文字编码改为GBK,

正常鸟。

    现在添加Mac OS X终端的彩色显示功能。下载highline gem:

    gem list --remote highline

    gem install highline

    在源代码中包含 :

    require 'highline/import'

    重构Ctxt类如下:

    

class Ctxt@@ct = HighLine.newdef color(msg,ft)printf @@ct.color(msg,ft)endend

    接下来为了以后的扩展性和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)elseraise "unknow type!!!"end  end

    保存,运行,一切OK鸟!!!:)


    

原创粉丝点击