如何在python 3.3中使用某些房间件随机生成地板?

时间:2016-08-06 17:19:05

标签: python algorithm random

我有15个不同的房间,如下图所示,我正在尝试制作一个游戏,其中的楼层是以满足两个条件的方式从这些房间随机生成的:

  1. 通过在任意房间开始,您可以步行到任何其他任意房间。 (希望没有发生:正确的一个)
  2. 整个楼层都关闭了,你找不到任何通往外面的房间。 (希望没有发生:左一个)
  3. enter image description here

1 个答案:

答案 0 :(得分:0)

一旦你预先计算了你的桌子,一种简单快速的方法:

如图所示,您只有一组有限的可能房间。 每个房间有四个侧面。 在每一侧,您可以预先确定哪些房间可以作为邻居接受并将其存储在桌子中。 所以每个房间有四张可能的neigbors表。

'''
Each room has 4 sides: top, left, bottom, right. False means no door in that side, True means there's a door in that side.
iTop .. iRight are the indices of the sides.
The lists with numbers contain the indices of rooms that could be adjacent to a given room on that particular side.
So e.g rooms [0] can have rooms [0], rooms [3], rooms [5] and rooms [9] on its iTop side.
Note: I just use random indices in the example.
'''

iTop, iLeft, iBottom, iRight = range (4)

rooms = [
    [(False, [0, 3, 5, ...]), False, [0, 4, 7, ...], False, [0, 6, 11, ...], False, [0, 2, 7, ...]],
    [(True, [2, 7,....
]

从该组中选择一个随机组。 第一个房间没有任何限制。 通过这种方式,您可以建立自己的建筑物。逐个房间。

你防止'#34;空" (我猜你的意思是不存在的)房间通过每行系统地工作,然后在2D网格上每列工作。

要在Python 3.3中实现这一点,您需要一个图形库。 如果你想保持简单,Python附带的turtle模块可以轻松处理这个问题。

首先使用文档或互联网中的示例熟悉海龟模块。

然后尝试编写我刚刚绘制的内容。

请注意,如果您不希望任何门通向建筑物,那么这只是一个额外的限制因素。如果您的建筑物在每个外墙上都是正方形,则只允许使用某些房间。再次在外墙上使用一张桌子。

如果它只是你之后的图形,如果每个房间只有一个左墙和一个顶墙(两者都可以包含一扇门),你可以轻松搞定。任何房间都可以作为任何其他房间的邻居。只有最下面和最右边的房间才会有(封闭的)右下墙。

但是既然你正在写游戏,那么你的房间可能需要四面墙才能在游戏逻辑方面自成一体。