【发布时间】:2017-03-24 18:33:15
【问题描述】:
tl;dr 下面用粗体表示
我目前正在开发一个基于文本的冒险游戏,并且我已经实现了一个基本的保存系统。
该过程利用了“pickle”模块。它生成或附加到具有自定义扩展名的文件(实际上是文本文件)。 引擎会腌制玩家的位置、他们的物品栏,而且,最后一部分是有点奇怪的地方。
游戏从特殊格式的脚本加载对话框(这里我的意思是在演员的脚本中)。一些对话会根据某些条件(之前已经与他们交谈过、新事件等)而发生变化。因此,对于引擎保存的第三个对象,它将所有对话树保存在其当前位置。例如,它将文字脚本保存为当前状态。
这是保存程序:
with open('save.devl','wb') as file:
pickle.dump((current_pos,player_inv,dia_dict),file)
for room in save_map:
pickle.dump(room,file)
file.close()
我的问题是,这个过程会生成一个非常丑陋、非常冗长、超大的文本文件。现在我知道文本文件基本上是我可以生成的最小文件,但我想知道是否有任何方法可以压缩或以其他方式更有效地记录游戏中所有内容的状态。或者,从长远来看,这只是一种更智能的保存玩家数据的方法。
请求了对话框的格式。这是一个示例:
[Isaac]
a: Hello.|1. I'm Evan.|b|
b: Nice to meet you.|1. Where are you going?\2.Goodbye.|c,closer|
c: My cousin's wedding.|1. Interesting. Where are you from?\2. What do you know about the ship?\3. Goodbye.|e,closer|
closer: See you later.||break|
e: It's the WPT Magnus. Cruise-class zeppelin. Been in service for about three years, I believe.||c|
standing: Hello, again.|1. What do you know about the ship?\2.Goodbye.|e,closer|
括号中的名称是程序如何识别要调用的树。每个字母都是树中的一个单独的分支。横条将分支分为三个部分: 1. 角色说了什么 2. 允许你做出的回应 3. 每个回应的去向,或者如果玩家没有回应,那么玩家随后会被引导到哪里。
在此示例中,玩家与艾萨克交谈后,“a”分支会从游戏存储在内存中的树副本中删除。然后它会永久使用“常设”分支。
【问题讨论】:
-
对话树的格式是什么?你能edit 并提供体面的例子吗?
-
“现在我知道文本文件基本上是我可以生成的最小文件......”这似乎是一个可以使用一些支持证据的声明。我想你会发现这不一定是真的。如果您意识到您正在寻找一种方法来有效地序列化您的数据,它可能会帮助您找到解决方案。这可能会提供一些有用的搜索结果。不存储整个对话树似乎也是一个明显的优化(可能存储某种光标?或条件值?)
-
他不要资源推荐,他要解决方案!
标签: python python-3.x game-engine