2016-02-29 66 views
1

所以我创建了一个基本的基于文​​本的RPG风格的游戏。 它利用岩石剪刀匹配和基于水平的进展。我可以创建RPG-esque保存并退出,然后重新加载进度?

因为这个游戏是如此惹人注目以至于无法获得任何地方,并且为了辅助我的黑盒测试,我想创建一个保存加载系统&。所以我可以保存并退出程序,并在退出之前给我一个所有重要细节的代码。然后,当我回到程序时,我可以重新输入此代码并返回到我所在的位置。

在我看来,我认为它与创建角色时使用的乐高游戏系统类似,其中有一个代码伴随着角色,以便您可以保存代码并重新输入以获得相同的角色出现回来。不过,我对编程相对比较陌生,不确定是否有更好的方法来做到这一点,或者我会如何去做。

这是我在保存代码尝试:

if TrainTimes == 5483: 
    print("Sorry to see you leave!") 
    print("Here's your code to sign-in later:") 
    code= name,power,rivalname,level,AP,limit,ExpGain,TotalExp,attack,defense,speed,evasiveness,health 
    print(code) 
    break 

下面是一个例子后,我打通过,并得到了这一点:

(“奥利弗”,“黑”,'吉姆, 8,3,25,14,0,5,1,1,5,10)

我不知道我怎么会那么虽然加载此,我能想象我应该使用类似:

while SaveLoaded == False: 
(FUNCTION) 

的代码,通常会玩没有保存文件,而我需要SaveLoaded更改为True,如果我装保存。 但是,如何让程序识别并加载代码?

在此先感谢!

+0

因此,总结一下,看看我是否明白。如果想要保存,您希望提示用户。如果他们保存,则可以在某处保存数据。当他们回来时,你会问他们一个代码。他们输入代码。如果他们输入正确的代码,它会加载他们以前的数据? – idjaw

+0

是的,这就是我希望能通过这个得到:) – Obahar

+0

这是他们必须输入的代码:'('Oliver','dark','Jim',8,3,25,14,0, 5,1,1,5,10)' – idjaw

回答

3

考虑到您正在寻找回收应用程序的状态,这听起来像pickle(或类似地,dill)的好工作。

那么,这是什么会做的是转储你的对象到一个文件,然后当你重新加载该文件,你会加载这些属性恢复到内存中。

现在,关于你正在寻找基于注释讨论该做,什么。您可以为用户提供一些简单的唯一代码,如:

"ABCDEFG" 

它将通过设置字典指向您的对象。现在,为了更容易访问数据,您可以进行的另一个修改是为每个值命名。我不知道每个属性的意思,但在这里是你可以做什么的样本:

save_state = { 
    "ABCDEFG": { 
     'name': 'Oliver', 
     'color': 'dark', 
     'last_name': 'Jim', 
     'val_1': 8, 
     'val_2': 3, 
     'val_3': 25, 
     'val_4': 14, 
     'val_5': 0, 
     'val_6': 5, 
     'val_7': 1, 
     'val_8': 1, 
     'val_9': 5, 
     'val_10': 10 
    } 
} 

采取这一数据,并使用咸菜,这转储到您的泡菜文件是这样的:

import pickle 

pickle.dump(save_state, open('dude.txt', 'wb')) 

当您准备将数据加载回来,你只需使用pickle.load。就像这样:

loaded_data = pickle.load(open('dude.txt', 'rb')) 

打印这个数据出来:

{'ABCDEFG': {'last_name': 'Jim', 'val_2': 3, 'val_3': 25, 'name': 'Oliver', 'val_5': 0, 'val_10': 10, 'val_8': 1, 'val_7': 1, 'val_9': 5, 'val_1': 8, 'val_6': 5, 'color': 'dark', 'val_4': 14}} 
+0

谢谢你,这应该与我正在尝试做的事情一致! 我决定不包括每个变量的含义,因为我认为它并不重要。它不应该与此 - 我一定会尝试一下,看看它是如何工作的!谢谢! – Obahar

+0

祝你好运。尝试一下。玩弄它。看看它如何为你工作。 :) – idjaw

0
def Load(save): 
    if SaveLoaded == True: 
     saveSplit = save.split(',') 
     if(len(saveSplit) == 13) 
     cleaned = [] 
     string = "" 
     for i in range(0,3): 
      string = split[i].strip("'()") 
      cleaned.append(string) 

     for i in range(3,13): 
      string = split[i].strip("'()") 
      cleaned.append(int(string)) 

     name,power,rivalname,level,AP,limit,ExpGain,TotalExp,attack,defense,speed,evasiveness,health = saveSplit 
     else: 
     setDefault() 
    else: 
     SetDefault() 

基本上你分裂字符串与分隔符beeing逗号部分。你清理不必要的字符(括号等),将其转换为正确的数据类型并分配给变量,如果你不想加载,或者你的字符串是无效的(无效的太短),你的值设置为默认值。

1

您可以使用json模块将对象序列化为json字符串。然后,您可以使用binascii模块将其转换为十六进制。

编码代码:

import json 
import binascii 

name = 'abc' 
power = 5.0 
attack = [1, 2, 3] 

jsonified = json.dumps((name, power, attack)) 
secret_number = binascii.hexlify(jsonified.encode('UTF-8')) 
print(secret_number) 

解码代码:

import json 
import binascii 

secret_number = input() 
jsonified = binascii.unhexlify(secret_number).decode('UTF-8') 
name, power, attack = json.loads(jsonified) 

print(name) 
print(power) 
print(attack) 

演示

Encoding
Decoding

相关问题