在终端的行

时间:2014-04-16 23:51:58

标签: ruby terminal

我正在尝试在终端中建立一个可以输入房间的游戏。我希望房间能够在2个房间里并排显示,但是,我无法让它们水平排列。

我希望终端看起来像这样:

-------------------- | -------------- |
|绿厅|蓝色房间   |的 ___________ |的 __________ |

但我一直这样说:

| ------------------ |
|绿厅|

|的 ___________ |

| ------------------ |

|蓝厅|
|的 ___________ |

这是我的代码:

def green_room
  puts "|------------------|"
  puts "|  Green Room      |"
  puts "|__________________|"
end

def blue_room
  puts "|------------------|"
  puts "|  Blue Room       |"
  puts "|__________________|"
end

任何建议都将不胜感激!

由于

2 个答案:

答案 0 :(得分:3)

终端是一种打字机(它们确实是当时的打字机)。每当你打印一个新的字符时,'插入符号'移到下一行。

然而,并非所有人都失去了。大多数终端允许光标定位。例如,许多终端模拟器支持vt100 escape sequences的某些子集,您可以使用它来将光标准确定位在您希望的位置。也就是说,你应该考虑使用一些已经以更方便的方式处理这个问题的现有终端库。 Ruby确实支持curses库,它可以让你在屏幕上放置内容等等。

答案 1 :(得分:1)

我找到了一个我喜欢的解决方案,它让一切看起来都很漂亮,生成器:

def green_room
  ["|------------------|",
   "|  Green Room      |",
   "|__________________|"].to_enum
end

def blue_room
  ["|------------------|",
   "|  Blue Room       |",
   "|__________________|"].to_enum
end

def print_func(*args)
  loop do
    args.each { |x| print x.next }
    puts ""
  end
end

print_func(green_room, blue_room)

# returns the following
|------------------||------------------|
|  Green Room      ||  Blue Room       |
|__________________||__________________|

由于该方法的优雅和可组合性而被选中。 print与puts类似,但不包含换行符。

为您提供一个功能,可以将任意数量的房间放在另一个房间旁边,再次调用该函数以换行。