在Pygame中的关卡设计
嘿,我正在用Python的Pygame库设计我的第一个游戏,我想知道一般来说,关卡设计的最佳实践是什么。我很想听听大家认为管理关卡时好的面向对象设计模式是什么。另外,我对Python还比较陌生,谢谢大家!
3 个回答
一般来说,简单的方法是使用矩阵(或者说多维数组,这里它们的作用是一样的)。
基本上,每个地图都是一个数组,数组里的每个项目就是网格上的一个方格。比如,一个3乘3的网格可以这样表示:
(伪代码)
var Map = [[1,2,3][1,2,3][1,2,3]];
在这些数字的位置,你可以放字符串,让一个函数去解析这些字符串,并根据单元格的值来绘制或执行某些操作。
如果这是你第一次做Pygame应用,不要花时间担心“用面向对象的设计模式来管理关卡”这些复杂的东西。现在你需要做的,是弄清楚怎么让Pygame按照你的想法运行。
- 你能把想要的东西都显示出来吗?
- 你的显示没有闪烁吗?
- 你能正确读取用户的输入控制吗?
- 等等。
用面向对象的模式来管理关卡的事情可以留到以后再说,很多很多以后。
在这种类型的游戏中,你的地图是由小方块(我假设你说的“关卡”是指单独的一关,而不是管理所有关卡)组成的。每个小方块都有:
- 一个对应的图片(在屏幕上显示的样子)
- 一个类型(比如,墙壁、地面、陷阱等)
当我在Pygame中创建基于方块的游戏时,我通常会有一个 Map
类,它包含当前的地图:
- 地图的
pygame.Surface
(你将要显示的内容) - 一个列表的列表(也就是一个矩阵),其中每个项目都是一个 Tile 对象(我也做过只用字符串来表示方块类型的游戏,那样就不需要单独的 Tile 类)
地图应该是相对静态的——你可以让陷阱在你踩上去后变成普通的方块(这很简单——当你检测到碰撞并且发生了碰撞时,只需把那个方块换成另一个 Tile 对象(大概是空方块的那种)),但如果可以的话,你不想在地图中有角色或可移动的方块。因为可移动的方块有自己的移动规则,所以这并不像简单地改变一个方块那么容易——你需要一整套逻辑,而且至少要改变两个方块(如果你可以把方块移动到陷阱上,那你还得单独记住下面是什么——真麻烦)。在我看来,给每个可移动的物体和道具单独创建一个类会更简单。
简而言之,你有:
Tile
Map
Block
- 其他可移动的物体/精灵
这基本上就是你的整个关卡。如果有多个关卡,如果每个关卡都是一样的,你可以只用一个 Map
对象的列表,每个关卡一个。