生成反向可执行代码以保存游戏,python 3

时间:2018-05-09 01:09:45

标签: arrays python-3.x

所以我在Python中制作了一个基于文本的小游戏,我决定使用一个保存系统,我想使用旧的“插入代码”技巧。代码需要跟踪玩家的库存(以及其他东西,但库存是我遇到的麻烦)。

所以我的思考过程就是将游戏中的每个项目和事件与代码联系起来。例如,您库存中的剑将存储为“123”或类似的独特之处。

因此,对于为拯救游戏而生成的代码,想象一下你的库存中有一把剑和盾牌,你就在军械库中。

位置(军械库)= abc

sword = 123

shield = 456

当玩家输入命令以生成代码时,我希望输出类似于:

abc.123.456

我认为在解码代码时,在代码中的项之间放置句点会更容易区分一个项目与另一个项目。

然后,当玩家开始游戏备份并输入他们的代码时,我希望将abc.123.456转换回你的位置作为军械库并在你的库存中使用剑和盾牌。

所以这里有几个问题:

  1. 如何将每个库存项目与其各自的代码相关联?
  2. 如何生成完整代码?
  3. 当播放器重新加载时如何解码?
  4. 我对Python非常陌生,我真的不确定如何开始解决这个问题...非常感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

因此,如果我正确地理解了您,您想将信息序列化为一个字符串,该字符串不能“保存”,但可以在您的程序中输入;

没有必要使用点,您可以对应用进行编程以在不使用点的情况下读取代码。这将为您节省很多字符。

您的游戏需要“保存”的信息越多,代码就会越长;我建议使用尽可能短的字符串。

根据要存储在保存代码中的位置,物品等的数量:您可能会选择更长或更短的选项:

  • 数字(0-9):可让您保留10个名称,每个名称以1个字符存储。
  • 十六进制(0-9 + a-f或0-9 + a-F):允许您保留16到22个名称(如果使代码区分大小写,则为22个)
  • 字母数字(0-9 + a-z或0-9 + a-Z):可让您保留36至62个名称(如果区分大小写,则为62个)
  • 如果您决定使用标点符号和标点符号,则可能有更多选项,此示例不会在此处出现,如果需要,您需要自己覆盖这一部分。

在此示例中,我将坚持使用数字,因为我列出的项目或位置不超过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或游戏所需的其他字段。

希望这会有所帮助,并且您没有放弃这个项目!