我有一个基于回溯迷宫算法的算法,其中一些部分被移除,从而产生了这个美妙的地牢。不幸的是,它的运行速度非常慢,这使得几乎不可能填满一张合适大小的地图。我真的不想扔掉它,但我想不出任何方法来加速它。我正在使用 Python,所以我知道这是我的问题的一部分,但我并没有完全准备好丢弃我的 roguelike 的整个现有代码库,它现在运行得足够快。这是当前的代码:
start = (random.randint(0, self.width), random.randint(0, self.height))
self.dungeon['up_stairs'] = start
visited = [start]
while len(visited) < 300:
current = visited[-1]
apos = random.choice([(1, 0), (0, 1), (0, -1), (-1, 0)])
new = utils.tuple_add(current, apos)
if not new in visited and self.on_map(new):
self.place_cell(new, is_wall=False)
visited.append(new)
else:
visited.pop()
[编辑]
- 为了回答评论中的一些问题,place_cell 根据位置参数 is_wall 在提供的位置元组处创建墙或空单元。例如,在上面的代码中,
self.place_cell(new, is_wall=False)
调用将地图上新位置的单元格更改为空单元格。 - 访问真的应该被称为别的东西,我只是......这样懒惰。我以后可能会修复它。
< 300
条件是因为 299 个单元格是它在合理的时间范围内最多可以绘制的。(超过 299 个单元,它突然开始挂起。)