3

嘿——我正在尝试使用 Python 的 Pygame 库设计我的第一个游戏,我想知道一般关卡设计的最佳实践是什么。我很想听听你们认为用于管理关卡的好的面向对象设计模式。另外,我对 Python 还很陌生——谢谢!

4

3 回答 3

7

在这种类型的游戏中,您的地图是以图块为单位的(我假设您所说的级别是指一个单独的级别,而不是管理您的所有级别)。每块瓷砖都有

  • 关联的图片(它在显示器上的样子)
  • 一种类型(即墙壁、地面、陷阱等)

当我在 Pygame 中创建基于图块的游戏时,我通常有一个Map包含当前地图的类:

  • 地图的pygame.Surface(你将要显示的内容)
  • 一个列表列表(即矩阵),其中每个项目都是一个 Tile 对象(我也做过一些游戏,你只有一个字符串告诉你它是什么类型的 tile,然后你不需要单独的 Tile班级)

地图应该是相对静态的——你可以让陷阱在你踩到它们之后变成普通的瓦片(这很容易——当你进行碰撞检测并且它是一个命中时,只需将该瓦片更改为不同的瓦片对象(大概是用于一个空的瓷砖)),但如果你能提供帮助,你不希望地图中出现字符或可移动的块。由于可移动的块有自己的移动规则,它并不像仅仅改变一个瓷砖那么简单——你会有一整套逻辑,至少需要改变两个瓷砖(如果你可以将块移动到陷阱上-然后您必须分别记住它下面的内容-bleh)。在我看来,为每个移动的对象和项目设置一个类更容易。

简而言之,您有:

  • Tile
  • Map
  • Block
  • 其他可移动对象/精灵

这基本上就是你的整个水平。对于多个级别,如果各个级别始终相同,您可以只拥有一个Map对象列表,每个级别一个。

于 2009-12-09T12:03:04.100 回答
6

如果这是您的第一个 Pygame 应用程序,请不要花时间担心“用于管理关卡的面向对象设计模式”。你现在需要做的是弄清楚如何让 Pygame 做你想做的事情。

  • 你能展示你想要的一切吗?
  • 你的显示器没有闪烁吗?
  • 你能正确阅读用户输入控件吗?
  • 等等

用于管理级别的面向对象模式出现得更晚,更晚。

于 2009-12-09T05:09:54.303 回答
1

一般来说,一种简单的方法是使用矩阵(或多维数组——它们在这里的工作方式相同)。

基本上,每个 Map 都是一个数组,数组中的每个项目都是网格上的一个正方形。例如,一个 3 x 3 的网格如下所示:

(伪代码)

var Map = [[1,2,3][1,2,3][1,2,3]];

代替数字,您可以为函数放置字符串,以根据单元格的值进行解析和绘制或采取行动。

于 2009-12-09T05:10:07.640 回答