Pygame中的关卡设计

3

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


什么样的游戏?RPG?平台游戏?还是其他类型的游戏? - Mongoose
我实际上正在尝试重新创建《老鼠复仇》(http://en.wikipedia.org/wiki/Rodent%27s_Revenge)以供娱乐。 - mportiz08
3个回答

7
使用这种类型的游戏,你的地图是以瓷砖为单位的(我假设你指的是单个关卡,而不是管理所有关卡)。每个瓷砖都有:
  • 一个相关联的图片(在显示屏上的样子)
  • 一种类型(例如,墙、地面、陷阱等)
当我在Pygame中创建基于瓷砖的游戏时,我通常会有一个包含当前地图的Map类:
  • 地图的pygame.Surface(你将要blit到显示屏上的内容)
  • 一个列表的列表(即矩阵),其中每个项目都是Tile对象(我也做过只有一个字符串告诉你它是什么类型的瓷砖的游戏,那么你就不需要一个单独的Tile类了)
地图应该相对静态-你可以让陷阱在你踩上它们后变成普通的瓷砖(这很容易-当你进行碰撞检测并且它是碰撞时,只需将该瓷砖更改为不同的Tile对象(可能是空瓷砖的对象)),但如果可以避免的话,你不希望在地图中放置角色或可移动块。由于可移动块有它们自己的移动规则,所以这并不像更改瓷砖那么简单-你需要一整套逻辑,并且至少需要更改两个瓷砖(如果你可以将块移动到陷阱上-那么你就必须单独记住它下面是什么-呕)。在我看来,最好为每个移动对象和物品都创建一个类。
简而言之,你需要:
  • Tile
  • Map
  • Block
  • 其他可移动对象/精灵
这基本上就是你整个关卡了。对于多个关卡,如果单个关卡总是相同的,你可以只有一个Map对象列表,每个关卡一个。

6

如果这是您第一次使用Pygame应用程序,不要花费时间担心“管理级别的面向对象设计模式”。现在您需要做的是弄清楚如何让Pygame按照您的意愿工作。

  • 您是否可以显示所有想要显示的内容?
  • 您的显示是否无闪烁?
  • 您是否可以正确读取用户输入控件?
  • 等等。

管理级别的面向对象模式会在以后,很久以后才会涉及。


谢谢,但我认为我对基本的图形和用户输入有相当好的理解,现在我需要一些关于如何实现关卡的建议。 - mportiz08
好的,你的帖子里写着“第一个游戏”和“对Python不熟悉”,这让我想到你可能以前没有使用Pygame来编写过游戏。 - Greg Hewgill

1

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

基本上,每个地图都是一个数组,数组中的每个项都是网格上的一个方块。例如,3x3网格如下:

(伪代码)

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

您可以将字符串放入数字的位置,以便函数解析并根据单元格的值绘制或执行操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接