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鸟!!!:)

mac OS X 下ft_rich游戏的重构_第1张图片

    

你可能感兴趣的:(游戏,Ruby,终端,macos,X,彩色)