Более сложный терминал ввода / вывода в Ruby

Я пытаюсь сделать игру в стиле ругели, которая запускается внутри терминала с использованием Ruby, но я не совсем уверен, как это сделать. Я хочу иметь возможность адресовать и обновлять каждую ячейку в стандартном окне терминала 80*24 в отдельности. Могу ли я сделать это со стандартной библиотекой или, альтернативно, есть ли хорошие камни, с которыми я мог бы сделать это?

2 ответа

Решение

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

Вы можете использовать Gosu.

Вы можете найти больше альтернатив в ruby toolbox - библиотеках игр.

Я предполагаю, что вы используете Linux. Для управления терминалом вам понадобятся привязки библиотеки ncurses для Ruby. Смотрите ncurses-ruby.

Документация скудная, но в этом репозитории github имеется множество примеров.

Другие вопросы по тегам