在Python中保存/加载游戏关卡的方法
我正在用Python和PyGame写一个游戏。(这是作业要求的,所以不需要建议其他有内置关卡解析的游戏开发库)
现在我已经完成了游戏的物理效果等部分,但还没找到保存和加载关卡的方法。以下是我目前想到的一些方法:
1. 方法头脑风暴
- 有人建议使用YAML(因此可以用PyYAML)来处理关卡的输入和输出。
- YAML以纯文本的形式存储数据,但结构很清晰。
- 它很容易编辑等,YAML的一个主要特点就是人类可读性强。
- 使用pickle
- 我以前用过这个方法——把一个列表保存为单独的项目,并用分隔符来区分它们。
- 同样是以纯文本的形式保存,但使用分隔符(比如{><},就像学习者驾驶日志那样)会让理解变得更困难。
2. 数据表示
- 每个关卡需要解析以下数据。数据类型在旁边用粗体标出。
- 球和圆的起始位置和特性 [两个列表]
- 圆的数量限制 [整数]
- 允许的颜色 [定义列表 颜色:真 / 颜色:假]
- 强迫完成的标准 [整数]
- 关卡中必须出现的任何故事情节或教程文本 [字符串列表]
- 关卡名称和编号 [字符串列表]
我只是想找出最好的方法来实现这个功能。
总结 - 从文件中解析游戏关卡到Python / PyGame的最佳方法。
4 个回答
1
那我们来聊聊用一个简单的.txt文件的方法吧。
比如说,如果这是一个二维游戏,可以给每种物品一个编号,比如3代表石头,4代表草,然后就可以一行一行地读取这些数据,把它们显示出来。
这种方法对于关卡编辑器来说很不错,因为保存数据非常简单。不过,如果你需要保存一些重要的数据,最好就不要用这种方法了,因为它不安全,容易被别人看到。
2
Pickle就是为了处理这种情况而设计的。你不需要用任何分隔符来区分列表中的项目;只需把整个列表进行pickle处理就可以了。
8
如果你不需要手动编辑这些数据,或者在其他程序中读取这些数据,那就直接用 pickle
吧。
把你的关卡数据存储在一个Python对象里,这样在你的代码中读取和写入几乎只需要一行代码。