【问题标题】:More sophisticated terminal I/O in RubyRuby 中更复杂的终端 I/O
【发布时间】:2011-10-25 12:51:04
【问题描述】:

我正在尝试使用 Ruby 制作一个在终端内运行的 roguelike 游戏,但我不确定如何去做。我希望能够单独处理和更新标准 80*24 终端窗口中的每个单元格。我可以使用标准库来做到这一点,还是有什么好的 gem 可以做到这一点?

【问题讨论】:

    标签: ruby io terminal roguelike


    【解决方案1】:

    Curses 可能是最容易实现的,并且可以跨平台广泛使用。 Ruby 绑定曾经是标准库的一部分,但现在它是一个宝石:gem install curses。这是文档中的一个示例:

    require "curses"
    
    def show_message(message)
      height = 5
      width  = message.length + 6
      top    = (Curses.lines - height) / 2
      left   = (Curses.cols - width) / 2
      win = Curses::Window.new(height, width, top, left)
      win.box("|", "-")
      win.setpos(2, 3)
      win.addstr(message)
      win.refresh
      win.getch
      win.close
    end
    
    Curses.init_screen
    begin
      Curses.crmode
      Curses.setpos((Curses.lines - 1) / 2, (Curses.cols - 11) / 2)
      Curses.addstr("Hit any key")
      Curses.refresh
      Curses.getch
      show_message("Hello, World!")
    ensure
      Curses.close_screen
    end
    

    【讨论】:

      【解决方案2】:

      您可以使用Gosu

      您可以在ruby toolbox - game libraries找到更多替代方案。

      我假设您使用的是 linux。要操作终端,您将需要 Ruby 的 ncurses 库绑定。 See ncurses-ruby.

      文档很少,但this github repository 有很多示例。

      【讨论】:

      • 不是我想要的,我更感兴趣的是让我的游戏输出到终端,我有能力自己编写游戏逻辑。
      • 我预料到了,因为你想要终端的 ASCII 之类的流氓。但是没有将您指向ncurses的方向。我仍然会推荐 Gosu 而不是 ncurses。已更新答案。
      • 谢谢,这就是我需要的所有帮助,我也在 OS X 上,但我认为终端非常相似。
      • 我也是 :-)。 man ncurses 调出 Snow Leopard 的手册页。所以你应该没事。
      猜你喜欢
      • 1970-01-01
      • 2013-06-15
      • 1970-01-01
      • 2018-03-13
      • 2015-09-29
      • 2011-10-25
      • 1970-01-01
      • 2010-10-16
      • 2021-08-10
      相关资源
      最近更新 更多