我正在制作一个基于文本的小游戏,我希望保存游戏并在以后加载数据。我设法让游戏创建一个文本文件,以这样的格式存储所有变量及其值:
first_name = "Name"
last_name = "Last Name"
bank = 10000
...
当我选择加载时,我希望它读取文本并分配适当的变量。我可以这样做吗?
答案 0 :(得分:1)
一个选项:您可以使用IO.readlines,它将返回您可以解析的字符串数组。如果您已经考虑过一组变量(并且由代码使用),那么您可以抓住引号中的内容。看看what ruby can do with strings。
答案 1 :(得分: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。
答案 2 :(得分:1)
最快最简单的方法是使用Marshal。
# Save data
data = Marshal.dump(game_state)
# Load data
game_state = Marshal.load(data)
如果您希望您的游戏数据架构不断变化,您可能需要考虑将数据存储在散列或Hashie::Mash中,而不是使用实例变量。
答案 3 :(得分: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