【问题标题】:Connecting Shoes GUI to existing Ruby code将鞋子 GUI 连接到现有的 Ruby 代码
【发布时间】:2012-09-06 19:35:25
【问题描述】:

我用 Ruby 构建了一个命令行游戏,现在我正在尝试使用 Shoes 为游戏构建一个 GUI。我花了一上午的时间阅读有关鞋子的文章,查看一些代码示例,并自己编写了一些代码。它似乎(我是 Shoes 新手,所以这可能完全错误)Shoes 代码(例如,您使用 Shoes 应用程序打开的 shoes.rb 文件)必须包含所有您要运行的 Ruby 代码。所有 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 方法应该告诉鞋子 GUI 显示该文本。我正在尝试尽可能多地重用我的代码。从理论上讲,无论某人如何玩游戏(在网络上、在命令行上、通过 GUI 等),它都应该使用大部分相同的逻辑。界面仅显示消息并接收用户输入。他们只是以不同的方式做到这一点。

问题是我不知道如何将我的 Shoes GUI 连接到我现有的 Ruby 代码。这里有人精通鞋子吗?这在 Shoes 中可能是不可能的……也许我必须使用不同的 Ruby GUI,但我想在转向另一个之前我会问一下。

【问题讨论】:

    标签: ruby user-interface shoes


    【解决方案1】:

    您可以做的是编写一个将响应方法打印的鞋子小部件。下面是一个非常粗略的小部件示例,它将从编辑行附加一条消息到其任意显示槽。当然,您可以轻松地修改 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
    

    我希望这是你想要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-29
      • 1970-01-01
      • 2018-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多