在Python中保存/加载游戏关卡的方法

2 投票
4 回答
1523 浏览
提问于 2025-04-16 11:40

我正在用Python和PyGame写一个游戏。(这是作业要求的,所以不需要建议其他有内置关卡解析的游戏开发库)

现在我已经完成了游戏的物理效果等部分,但还没找到保存和加载关卡的方法。以下是我目前想到的一些方法:

1. 方法头脑风暴

  • 有人建议使用YAML(因此可以用PyYAML)来处理关卡的输入和输出。
    • YAML以纯文本的形式存储数据,但结构很清晰。
    • 它很容易编辑等,YAML的一个主要特点就是人类可读性强。
  • 使用pickle
    • 我以前用过这个方法——把一个列表保存为单独的项目,并用分隔符来区分它们。
    • 同样是以纯文本的形式保存,但使用分隔符(比如{><},就像学习者驾驶日志那样)会让理解变得更困难。

2. 数据表示

  • 每个关卡需要解析以下数据。数据类型在旁边用粗体标出。
    • 球和圆的起始位置和特性 [两个列表]
    • 圆的数量限制 [整数]
    • 允许的颜色 [定义列表 颜色:真 / 颜色:假]
    • 强迫完成的标准 [整数]
    • 关卡中必须出现的任何故事情节或教程文本 [字符串列表]
    • 关卡名称和编号 [字符串列表]

我只是想找出最好的方法来实现这个功能。

总结 - 从文件中解析游戏关卡到Python / PyGame的最佳方法。

4 个回答

1

那我们来聊聊用一个简单的.txt文件的方法吧。

比如说,如果这是一个二维游戏,可以给每种物品一个编号,比如3代表石头,4代表草,然后就可以一行一行地读取这些数据,把它们显示出来。

这种方法对于关卡编辑器来说很不错,因为保存数据非常简单。不过,如果你需要保存一些重要的数据,最好就不要用这种方法了,因为它不安全,容易被别人看到。

2

Pickle就是为了处理这种情况而设计的。你不需要用任何分隔符来区分列表中的项目;只需把整个列表进行pickle处理就可以了。

8

如果你不需要手动编辑这些数据,或者在其他程序中读取这些数据,那就直接用 pickle 吧。

把你的关卡数据存储在一个Python对象里,这样在你的代码中读取和写入几乎只需要一行代码。

撰写回答