基于ruby语言-OOP的游戏文本

基于ruby语言-OOP的游戏文本,ruby,oop,Ruby,Oop,我正在尝试为一个用Ruby编写的游戏集成文本。为此,我想我可以将文本本身保存在一个散列中。 我希望用户选择播放的语言。两种语言 我已经编写了游戏代码、字典,并将打印文本的调用分离到另一个文件中。这样我就保持了代码的整洁 我打算保留散列,只包含不同语言的文本 从控制台运行主文件my_game.rb时,出现以下错误 my_game.rb:62:in `enter': undefined local variable or method `eng' for #<CentralCorridor:0

我正在尝试为一个用Ruby编写的游戏集成文本。为此,我想我可以将文本本身保存在一个散列中。 我希望用户选择播放的语言。两种语言

我已经编写了游戏代码、字典,并将打印文本的调用分离到另一个文件中。这样我就保持了代码的整洁

我打算保留散列,只包含不同语言的文本

从控制台运行主文件my_game.rb时,出现以下错误

my_game.rb:62:in `enter': undefined local variable or method `eng' for
#<CentralCorridor:0xb7d73d74> (NameError)
           from my_game.rb:35:in `play'
           from my_game.rb:257:in `<main>' code here
我已经在模块内编写了散列代码,并在我的_game.rb中引用了该代码

以下代码是我在模块中实现的字典的一部分。该文件名为language.rb。并且模块具有相同的名称语言

这是散列。用hash_compos.rb编写。通过在Language.rb中创建的函数,我实现了一个字典,试图包含最少的代码

require './language.rb'

# create a mapping of a scene to text
eng = Language.new()
Language.set(eng, 'The Gothons of Planet Percal #25 have invaded your ship
and destroyed\nyour entire crew. You are the last survivieng member and your
last\nmission is to get the neutron destruct bomb from the Weapon Armory,\nput 
it in the bridge, and blow the ship up after getting into an 
\nescape pod.\n', 'sc_enter')
Language.set(eng, 'txt', 'sc_cc')
...

问题是,在以下行中,您试图使用eng,但该变量不存在:

puts "#{Language.get(eng, 'sc_enter')}"
因此,根据您在其他地方使用的代码,看起来您可以在该行之前分配给eng:

eng = Language.new
puts "#{Language.get(eng, 'sc_enter')}"

这个问题源于您在hash_compos.rb中将eng定义为一个局部变量

如对相关问题的答复所述

无法访问在必需文件中定义的局部变量

解决这个范围问题的一个快速方法是在hash_compos.rb中将eng定义为常量。要实现这一点,只需将变量重命名为ENG,并相应地更新引用它的所有文件


这将使变量可以从需要hash_compos.rb的文件中访问。

好的,解决方案比我最初想象的要简单得多。 我选择了遵循这两种迹象,所以首先要做的事情。谢谢你们两位

问题是,我使用的是为解决特定问题而建立的严格方法。 我创建了一个新的散列,并将所需的文本放入其中。 然后我在main.rb文件名中指出。 如果有人在意,我会写这本词典的命名法。填充始终是可选的

#!/path/to/your_bin
表示在文件中,不是打印文本的最佳方式。所以我建议,, 对文件进行编码,就像我们想对帖子进行降价一样。 一个简单的例子:

# Encoding: utf-8
我实现了散列,声明了一个常量变量,如擦除所示

VARIABLE = {"key" => "value"}
然后您只需按名称调用变量。直接地Ruby负责提取哈希键时的指示值

VARIABLE["key"]
文本格式,适合编码到文件中。转义序列是不必要的


问题已解决。

您建议的解决方案根本不起作用。错误已消失,但哈希中的写入文本未打印。此外,该变量已在模块中初始化。我不明白为什么要重新初始化?问题是我需要输入大脑,没有医生。eng变量必须在模块内工作。我不确定我说的是什么,但我可以发誓变量必须是构造函数中的一个参数,该构造函数与打印哈希值的方法一起工作。我认为,如果我构建一个能够打印作为参数传递的相反值的方法,那么问题就会得到解决。我将编辑查询,并添加字典中的全部代码。
#!/path/to/your_bin
# Encoding: utf-8
VARIABLE = {"key" => "value"}
VARIABLE["key"]