閱讀250 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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

  上一篇:go 深入了解Struts2返回JSON數據的原理及具體應用範例
  下一篇:go 【設計模式】【命令模式】