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

发布于 2024-10-16 23:10:54 字数 923 浏览 5 评论 0原文

我正在使用 Python 和 PyGame 编写游戏。 (这是在作业中规定的,所以建议另一个具有内置关卡解析的游戏开发库是没有用的)

我现在正处于游戏物理等完成的阶段,但我还没有制定出一个保存和加载关卡到游戏中的方法。到目前为止,我的想法如下:

1. 方法头脑风暴

  • 已建议使用 YAML(因此, PyYAML )用于处理电平输入/输出。
    • 它以纯文本形式存储,但以结构化方式存储。
    • 易于编辑等 - YAML 的主要功能之一是易于人类阅读。
  • 使用泡菜
    • 我过去曾使用过 - 将列表保存为单独的项目,并使用拆分器项目来区分它们。
    • 同样,保存为纯文本,但使用拆分项(例如,学习驾驶员日志中的 {><} 会使其更难以理解。

2. 数据表示

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

我所寻找的只是实现此目的的最佳方法的建议。

TL;DR - 将文件中的游戏关卡解析为 Python / PyGame 的最佳方法。

I'm writing a game using Python and PyGame. (This is perscribed in the assignment, so it's no use suggesting another game dev. library that has built-in level parsing)

I'm at the stage now where the game physics etc. are complete, but I am yet to work out a method for saving and loading levels into the game. Here's what I've thought about it so far:

1. Method Brainstorm

  • Have been suggested YAML (Therefore, PyYAML) for handling level input / output.
    • This stores as plain text, but in a structured mannar.
    • Easy to edit etc. - one of YAML's major features is that it is easy to be humanly readable.
  • Using pickle
    • Which I have used in the past - save a list as individual items with a splitter item to differentiate them.
    • Again, saves as plain text, but using a splitter item (for example, {><} as with the Learner Driver Logbook makes it harder to understand.

2. Data Representation

  • Each level needs the follow data to be parsed. The data types are in bold next to it.
    • The starting positions and characteristics of balls and circles [Two lists]
    • The limit on circles [Integer]
    • Permitted colours [Definition List Colour:True / Colour:False]
    • The Obsessive Completion Distinction criteria [Integer]
    • Any storyline or tutorial text that must appear in level [List of strings]
    • Level name and number [List of strings]

All I'm looking for are suggestions of the best method for achieving this.

TL;DR - Best way to parse game levels from file into Python / PyGame.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

好久不见√ 2024-10-23 23:10:54

如果您不需要手动编辑或读取任何其他程序中的关卡,只需使用 pickle

将关卡数据存储在单个 Python 对象中,并且它(几乎)是代码中的一行代码可供读取和写入。

If you don't need to edit by hand, or read the levels in any other program, just use pickle.

Store your level data in a single Python object, and it's (nearly) a one-liner in your code to read and write.

羞稚 2024-10-23 23:10:54

Pickle 就是为这种事情而制作的。您不需要任何分隔符来区分列表中的项目;只需腌制整个列表即可。

Pickle is made for this sort of thing. You don't need any delimiter to differentiate the items in a list; just pickle the whole list.

戏舞 2024-10-23 23:10:54

.txt 文件的简单方法怎么样?

例如,如果它是 2D 游戏,则有 id,因此 3=石头,4=草,然后逐行读取并传输到显示器。

这对于关卡编辑者来说是件好事,因为他们可以轻松保存数据。不过,如果需要加密的重要数据,这不是一个好的选择。

How about the simple approach of a .txt file?

For example if it was a 2D game, have id's, so 3=stone, 4=grass, and then just read line by line and transfer to the display.

This is good for level editors, as it is easy for them to save data. This is not a good option though if its important data which needs encrypting.

舟遥客 2024-10-23 23:10:54

在程序中对持久性进行测试可能非常困难。例如,您可以测试每个级别将保存和加载完全相同的状态吗? (或者相对相同的状态 - 有些游戏可能具有不会完全重复的计时器状态。)

我的建议是使用可读的文本格式,因为这就是我在程序中使用的格式。为什么要使用您无法轻松阅读或比较的内容?

Doing testing on persistence within your program can be extremely difficult. For instance, can you test that each level will save and load the exact same state? (Or relatively the same state -- some games may have timer states that will not be duplicated exactly.)

My suggestion would be to use a readable text format because that's what I've used in my programs. Why use something that you can't read or compare easily?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文