【发布时间】:2020-06-08 21:52:49
【问题描述】:
我有一个 9x9 二维阵列。我想创建一个非常Binding of Isaac-esque 的地板系统。我想使用 2D 数组制作 9x9 数组中的房间地图。我浏览了整个互联网,但找不到算法或某种有用的代码来帮助我做到这一点。问题是: 使用 2D 阵列制作连接房间的地板 - 让我们说这样的话,其中 1 是房间,而 0 什么都不是......
[['0','0','0','0','0','0','0','0','0'],
['0','0','0','0','1','0','0','0','0'],
['0','0','1','1','1','1','1','0','0'],
['0','0','1','0','1','0','0','1','0'],
['0','2','1','1','1','1','1','1','0'],
['0','0','0','0','1','0','1','0','0'],
['0','0','0','0','1','0','1','1','0'],
['0','0','0','0','1','0','0','0','0'],
['0','0','0','0','0','0','0','0','0']]
然后对于每个房间,算法必须确定房间是否有 4 个门 - 4 个与之相连的房间 - 或者假设有 2 个门,一个在上面,一个在下面,这样我就不会得到任何房间,比如说,有 4 扇门,但只有一个房间与之相连。
最后,起始房间必须在中心,而外面的房间必须选择一个作为结束房间,这将是不同风格的房间(在上面的代码中显示为 2 )。如果可能的话,这个房间应该只连接到另一个更难找到的房间。
【问题讨论】:
-
您可以定义可能的房间类型及其属性的列表。作为起点,其中的最大门数(将来您可能会添加其他约束,例如与中心的最小距离)。对于每个关卡生成器,您都会保留有关您在关卡中需要多少个给定类型的房间的信息。从中心的房间开始。然后你可以迭代地尝试通过在每次迭代中放置一个房间 A 来构建地图,这样它就会接触现有的房间 B,如果它会打破 A 或 B 的约束,然后寻找另一个地方。也可以随机添加更多门.
标签: python arrays algorithm pygame array-algorithms