2012-09-13 25 views
1

我在Ruby中构建了一个命令行游戏,现在我正试图使用​​Shoes为游戏构建一个GUI。我花了一天的时间阅读关于Shoes的文章,看一些代码示例,并自己编写了一些代码。它出现(我是新来的鞋子,所以这可能是完全错误的)的鞋码(例如,shoes.rb文件,您用鞋应用程序中打开)必须包含所有你想要运行的Ruby代码。所有的Ruby代码都将存在于该文件中。将Shoes GUI连接到现有的Ruby代码

我发射了这款游戏的方式是通过将命令行参数play.rb(Ruby脚本)的命令行。在命令行运行play.rb "command line game"play.rb "shoes game"。如果您运行后者,系统会调用Shoes应用程序打开shoes.rb。在play.rb之内,它将通过ShoesInterface给玩家,而不是CommandLineInterface。下面是一个玩家可以如何询问此举一个例子:

human_player.rb文件:

def make_move 
    @interface.print("It's your turn to make a move.") 
end 

@interface要么是CommandLineInterfaceShoesInterfaceCommandLineInterface中的print方法只是一个puts语句。在ShoesInterface中的print方法应告诉Shoes GUI显示该文本。我试图尽可能多地使用我的代码。理论上,不管有人在玩游戏(在网络上,在命令行上,通过GUI等),它应该使用大部分相同的逻辑。接口只显示消息并接收用户输入。他们只是以不同的方式做到这一点。

的问题是,我不知道如何连接我的鞋GUI以我现有的Ruby代码。这里有人精通鞋吗?这可能无法在Shoes中实现......也许我将不得不使用不同的Ruby GUI,但我认为在转到另一个之前我会问。

回答

1

你能做什么,就是写一个Shoes Widget来响应方法打印。下面是这样一个小部件的一个非常粗略的例子,它会将编辑行中的消息附加到其任意显示位置。当然,您可以轻松修改Widget,以便您可以用目标插槽对其进行初始化以显示等,但这个想法保持不变。

class Prompt < Shoes::Widget 
def initialize opts={} 
    @top=opts[:top] 
    @left=opts[:left] 
    @width=opts[:width] 
    @prom=flow :top=>@top, :left=>@left, :width=>@width do 
    background red 
    end 
    end 
def print(msg) 
    @prom.append do 
    para msg 
    end 
end 
end 
Shoes.app :title => "Test" do 
@el=edit_line 
button "print"do 
    @interface.print(@el.text) 
end 
@interface=prompt({:top=>50, :left=>20, :width=>100}) 
end 

我希望这是你想要的。