Python 我可以创建一个RPG风格的保存&;退出,然后重新加载进度?

Python 我可以创建一个RPG风格的保存&;退出,然后重新加载进度?,python,text-based,Python,Text Based,所以我正在创建一个基本的基于文本的RPG风格的游戏。 它利用石头剪刀布比赛和水平为基础的进展 因为这个游戏非常好玩,所以为了帮助我进行黑盒测试,我想创建一个保存和加载系统。所以我可以保存并退出程序,在它退出之前,它会给我一个所有重要细节的代码。然后,当我回到程序中时,我可以重新输入这个代码并返回到我所在的位置 在我看来,我想象它与乐高游戏中创建角色时使用的系统类似,在乐高游戏中,角色附带有一个代码,以便您可以保存代码并重新输入,以恢复相同的角色外观。然而,我对编程比较陌生,不确定是否有更好的方法

所以我正在创建一个基本的基于文本的RPG风格的游戏。 它利用石头剪刀布比赛和水平为基础的进展

因为这个游戏非常好玩,所以为了帮助我进行黑盒测试,我想创建一个保存和加载系统。所以我可以保存并退出程序,在它退出之前,它会给我一个所有重要细节的代码。然后,当我回到程序中时,我可以重新输入这个代码并返回到我所在的位置

在我看来,我想象它与乐高游戏中创建角色时使用的系统类似,在乐高游戏中,角色附带有一个代码,以便您可以保存代码并重新输入,以恢复相同的角色外观。然而,我对编程比较陌生,不确定是否有更好的方法来实现这一点,或者我将如何实现这一点

以下是我保存代码的尝试:

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。 但是我如何让程序在代码中识别和加载呢


提前谢谢

考虑到您希望恢复应用程序的状态,这对(或者类似地)来说是一个不错的工作

所以,这将要做的是将对象转储到一个文件中,然后在重新加载该文件时,将这些属性加载回内存中

现在,关于你想做什么,根据评论讨论。您可以向用户提供一些简单的唯一代码,如:

"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
    }
}
获取该数据,并使用pickle将其转储到pickle文件,如下所示:

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}}

考虑到您希望恢复应用程序的状态,这对(或者类似地)来说是一个不错的工作

所以,这将要做的是将对象转储到一个文件中,然后在重新加载该文件时,将这些属性加载回内存中

现在,关于你想做什么,根据评论讨论。您可以向用户提供一些简单的唯一代码,如:

"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
    }
}
获取该数据,并使用pickle将其转储到pickle文件,如下所示:

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}}
def加载(保存):
如果SaveLoaded==True:
saveSplit=save.split(“,”)
如果(len(saveSplit)==13)
清洁=[]
string=“”
对于范围(0,3)内的i:
string=split[i]。strip(“()”)
已清理。追加(字符串)
对于范围(3,13)内的i:
string=split[i]。strip(“()”)
.append(int(string))
姓名、力量、敌名、等级、AP、限制、扩展增益、TotalExp、攻击、防御、速度、闪避、生命值=saveSplit
其他:
setDefault()
其他:
SetDefault()
基本上你可以用逗号分隔字符串。如果您不想加载,或者字符串无效(无效太短),请清除不必要的字符(括号等),将其转换为crrect数据类型并分配给变量,然后将值设置为默认值。

def load(save):
如果SaveLoaded==True:
saveSplit=save.split(“,”)
如果(len(saveSplit)==13)
清洁=[]
string=“”
对于范围(0,3)内的i:
string=split[i]。strip(“()”)
已清理。追加(字符串)
对于范围(3,13)内的i:
string=split[i]。strip(“()”)
.append(int(string))
姓名、力量、敌名、等级、AP、限制、扩展增益、TotalExp、攻击、防御、速度、闪避、生命值=saveSplit
其他:
setDefault()
其他:
SetDefault()
基本上你可以用逗号分隔字符串。如果您不想加载,或者字符串无效(无效太短),则可以清除不必要的字符(括号等),将其转换为crrect数据类型并分配给变量,然后将值设置为默认值。

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

编码代码:

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)
解码代码:

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)
演示


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

编码代码:

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)
解码代码:

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)
演示



那么,我来总结一下,看看我是否理解。如果用户希望保存,则需要提示用户。如果他们保存,你就把数据保存在某个地方。当他们回来时,你要求他们提供密码。他们输入代码。如果他们输入了正确的代码,它会加载他们以前的数据?是的,这就是我希望通过此实现的:)这是他们必须输入的代码:
('Oliver','dark','Jim',8,3,25,14,0,5,1,1,5,10)
是的,这是我的程序输出的代码