所以我在Python中制作了一个基于文本的小游戏,我决定使用一个保存系统,我想使用旧的“插入代码”技巧。代码需要跟踪玩家的库存(以及其他东西,但库存是我遇到的麻烦)。
所以我的思考过程就是将游戏中的每个项目和事件与代码联系起来。例如,您库存中的剑将存储为“123”或类似的独特之处。
因此,对于为拯救游戏而生成的代码,想象一下你的库存中有一把剑和盾牌,你就在军械库中。
位置(军械库)= abc
sword = 123
shield = 456
当玩家输入命令以生成代码时,我希望输出类似于:
abc.123.456
我认为在解码代码时,在代码中的项之间放置句点会更容易区分一个项目与另一个项目。
然后,当玩家开始游戏备份并输入他们的代码时,我希望将abc.123.456转换回你的位置作为军械库并在你的库存中使用剑和盾牌。
所以这里有几个问题:
我对Python非常陌生,我真的不确定如何开始解决这个问题...非常感谢任何帮助,谢谢!
答案 0 :(得分:0)
因此,如果我正确地理解了您,您想将信息序列化为一个字符串,该字符串不能“保存”,但可以在您的程序中输入;
没有必要使用点,您可以对应用进行编程以在不使用点的情况下读取代码。这将为您节省很多字符。
您的游戏需要“保存”的信息越多,代码就会越长;我建议使用尽可能短的字符串。
根据要存储在保存代码中的位置,物品等的数量:您可能会选择更长或更短的选项:
在此示例中,我将坚持使用数字,因为我列出的项目或位置不超过10个。
您在源代码中将每个库存项目和每个地方定义为词典:
您可以像我对地方所做的那样使用单行
places = {'armory':'0', 'home':'1', 'dungeon':'2'}
# below is the same dictionary but sorted by values for reversing.
rev_places = dict(map(reversed, places.items()))
或者为了提高可读性;使用多行:
items = {
'dagger':'0',
'sword':'1',
'shield':'2',
'helmet':'3',
'magic wand':'4'
}
#Below is the same but sorted by value for reversing.
rev_items = dict(map(reversed, items.items()))
将数字存储为字符串,以方便理解,如果您使用十六进制或字母数字选项,则也将需要使用数字。
然后还使用词典来管理游戏信息,下面只是一个示例,您应如何表示代码将产生或解析的游戏信息,这一部分不应出现在您的源代码中,我有意混乱的物品才能对其进行测试。;
game_infos = {
'location':'armory',
'items':{
'slot1':'sword',
'slot2':'shield',
'slot3':'dagger',
'slot4':'helmet'
}
}
然后,您可以使用以下功能来生成保存代码,该功能可以像这样读取库存和行踪:
def generate_code(game_infos):
''' This serializes the game information dictionary into a save
code. '''
location = places[game_infos['location']]
inventory = ''
#for every item in the inventory, add a new character to your save code.
for item in game_infos['items']:
inventory += items[game_infos['items'][item]]
return location + inventory # The string!
还有阅读功能,该功能使用反向字典来解密您的保存代码。
def read_code(user_input):
''' This takes the user input and transforms it back to game data. '''
result = dict() # Let's start with an empty dictionary
# now let's make the user input more friendly to our eyes:
location = user_input[0]
items = user_input[1:]
result['location'] = rev_places[location] # just reading out from the table created earlier, we assign a new value to the dictionary location key.
result['items'] = dict() # now make another empty dictionary for the inventory.
# for each letter in the string of items, decode and assign to an inventory slot.
for pos in range(len(items)):
slot = 'slot' + str(pos)
item = rev_items[items[pos]]
result['items'][slot] = item
return result # Returns the decoded string as a new game infos file :-)
我建议您尝试使用此工作示例程序,创建一个自己的game_infos词典,其中包含更多库存物品,添加一些位置,等等。 您甚至可以在功能中添加更多行/循环来管理hp或游戏所需的其他字段。
希望这会有所帮助,并且您没有放弃这个项目!