2012-09-13 24 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 

我希望這是你想要的。