我正在制作一个基于文本的小型游戏,我想保存游戏并在以后加载数据。我设法让游戏创建了一个文本文件,该文件以如下格式存储所有变量及其值:
first_name = "Name"
last_name = "Last Name"
bank = 10000
...
当我选择加载时,我希望它读取文本并分配适当的变量。我可以这样做吗?
一种选择:您可以使用IO.readlines,它将返回您可以解析的字符串数组。例如,如果您已经记住了一组变量(并被代码使用),那么您可以抓住引号中的内容。看看ruby 可以用字符串做什么。
除非您使用其他答案中提出的评估或解析文件等元编程技术,否则您无法使用局部变量执行此操作。如果你想在没有元编程技巧的情况下做到这一点,你需要使用其他类型的变量或常量。为设置准备一个模块(这是一种特殊类型的常量)可能会有所帮助。
在主文件中:
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。
最快和最简单的方法是使用Marshal。
# Save data
data = Marshal.dump(game_state)
# Load data
game_state = Marshal.load(data)
如果您希望您的游戏数据架构不断变化,您可能需要考虑将数据存储在散列或Hashie::Mash中,而不是使用实例变量。
大致:
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