1

我正在制作一个基于文本的小型游戏,我想保存游戏并在以后加载数据。我设法让游戏创建了一个文本文件,该文件以如下格式存储所有变量及其值:

first_name = "Name"
last_name = "Last Name"
bank = 10000
...

当我选择加载时,我希望它读取文本并分配适当的变量。我可以这样做吗?

4

4 回答 4

1

一种选择:您可以使用IO.readlines,它将返回您可以解析的字符串数组。例如,如果您已经记住了一组变量(并被代码使用),那么您可以抓住引号中的内容。看看ruby​​ 可以用字符串做什么

于 2013-10-20T01:35:05.203 回答
1

除非您使用其他答案中提出的评估或解析文件等元编程技术,否则您无法使用局部变量执行此操作。如果你想在没有元编程技巧的情况下做到这一点,你需要使用其他类型的变量或常量。为设置准备一个模块(这是一种特殊类型的常量)可能会有所帮助。

在主文件中:

module Setting
  def self.set h; @h = h end
  def self.call @h end
end
load(path_to_setting_file)

在设置文件中:

Setting.set(
  first_name: "Name",
  last_name: "Last Name",
  bank: 10000,
)

从主文件调用它:

Setting.call
# => {
  first_name: "Name",
  last_name: "Last Name",
  bank: 10000,
}

如果您甚至不喜欢这样,那么您应该使用 YAML。

于 2013-10-20T03:16:41.250 回答
1

最快和最简单的方法是使用Marshal

# Save data
data = Marshal.dump(game_state)

# Load data
game_state = Marshal.load(data)

如果您希望您的游戏数据架构不断变化,您可能需要考虑将数据存储在散列或Hashie::Mash中,而不是使用实例变量。

于 2013-10-20T04:13:39.203 回答
0

大致:

    variable_file = File.open("./myfile.txt")
    variable_file.each do |variable_line|
    variable_line.chomp!
    #split on " = "
    #gsub out the quotes
    #add to hash where name is key and value is value
    end
    #your program uses the hash to access the values
于 2013-10-20T02:29:17.180 回答