我目前正在开发一个基于文本的小游戏,这个游戏会根据全局变量来记忆游戏状态,例如,地精死亡,看看你是否已经杀死了地精。你知道吗
在我决定添加一个save and load函数之前,这个方法非常有效。save函数起作用,load函数不起作用,虽然我知道原因,但我不能想出一个简单的解决方法。你知道吗
save函数目前的工作方式是这样的,我有一个列表,其中列出了到目前为止我们在游戏中使用的所有全局变量。然后我让列表遍历每个变量,如果为真,则给出1,如果为非,则给出0,最后它打印一个“种子”,由用户可以输入的1和0的列表组成。在我的示例测试代码中
def game_save():
print "This will give you a seed. Write it down, or see seed.txt"
print "When you start a new game, you will be propted to give your seed. Do so to reload."
global goblins_defeated
global lucky
global princesshelp
end = "done"
load_seed =[goblins_defeated, lucky, princesshelp, end]
load_seed.reverse()
variable = load_seed.pop()
seed = []
print globals()
while end in load_seed:
if variable == True:
seed.append("1")
print "APPENEDED 1"
print load_seed
variable = load_seed.pop()
elif variable == False:
seed.append("0")
print "APPENED 0"
print load_seed
variable = load_seed.pop()
else:
print "ERROR"
break
seedstring = ' '.join(seed)
print "This is your seed %s" %seedstring
这段代码工作,它产生一个字符串,以我想要的方式匹配值。你知道吗
问题来时,它的时间加载。我把这个过程倒过来,像这样:
def game_load():
print "Please type your seed in here:"
global goblins_defeated
global lucky
global princesshelp
end = "done"
seedlist = [goblins_defeated, lucky, princesshelp, end]
seed = raw_input("> ")
seed_list = seed.split(" ")
seed_value = seed_list.pop()
variable_list = [end, goblins_defeated, lucky, princesshelp]
variable = variable_list.pop()
testlist = []
while end in variable_list:
if seed_value == '1':
variable = True
print variable_list
print variable
print seed_value
elif seed_value == '0':
variable = False
print variable_list
print variable
print seed_value
else:
print "ERROR ERROR FALSE LOOP RESULT"
break
if bool(seed_list) == False:
print "List is empty"
else:
seed_value = seed_list.pop()
variable = variable_list.pop()
对于经验丰富的程序员来说,这个错误是显而易见的,事实证明列表加载的是变量所指向的内容,而不是变量名,所以我不能用这种方式赋值。你知道吗
这就是我被难住的地方,我可以列一个很长的if语句列表,但这不是很优雅。进一步的阅读表明字典方法可能是解决这个问题的方法,但是我不确定如何实现字典,更具体地说,我不确定字典是如何与变量交互的,我的理解是,变量实际上是如何存储在python中的,但我不确定如何开始可靠地访问和存储这些变量,或者是否可以使用全局字典来正确地存储游戏中的所有变量。基本上,我不确定如何“正确地”使用字典的全部潜力,特别是它如何与变量交互。你知道吗
这比必要的要大得多。只需使用字符串格式来提供保存密码:
添加0会将每个布尔值转换为其数值表示形式。每个值都插入到字符串中,替换
{}
。你知道吗加载方式如下:
它将
seed
拆分为空格,将每个元素映射为一个整数,然后将这些整数映射为一个布尔值,然后将map
对象解压到相应的变量中。你知道吗您根本不必将这些条件存储为布尔值,因为
1
和0
的计算方式类似,其中0
表示False
,而1
表示True
。布尔实际上是int
的一个子类。你甚至可以用它们来做数学,例如True+True
等于2
。你知道吗相关问题 更多 >
编程相关推荐