mac OS X 下ft_rich遊戲的重構
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鳥!!!:)
最後更新:2017-04-04 07:03:38