【问题标题】:Creating A Text Based Maze Generator In Python [closed]在 Python 中创建基于文本的迷宫生成器 [关闭]
【发布时间】:2015-07-26 06:09:09
【问题描述】:

一般来说,我是编码初学者,但我了解基础知识。作为一个挑战,也可能是一个地图生成工具,我想看看我是否可以使用 python 创建一个基于小文本的 5x5 迷宫生成器,该生成器是隔离的(没有出口或入口),允许循环和死胡同。我以手绘为例:

┌ → ↑ ┌ ┐

├ ─ ┴ ┼ ┤

│ ┌ ┬ ┘ │

├ ┘ │ ← ┤

↓ ← ┴ ─ ┘

(箭头代表从箭头反方向而来的死角)

我无法取得太大进展,很快就放弃了,认为我的编码知识不足以创建如此复杂的东西。现在我想知道是否有一种简单的方法来做这样的事情。在经历了一个由生成树、视觉代码等组成的兔子洞之后,其中 95% 的内容我几乎看不懂,我找不到太多可以帮助我的东西。我正在寻找一种(希望)易于理解的方法来创建可以实现此目的的代码。理想情况下,我希望答案是在 python 中,并且对于一个有足够时间的初中级程序员来说相对容易理解。另外,请原谅我写的这个问题的任何非常模糊/过于复杂的部分,它们很可能是由于我对这个编码领域不太了解。

如果有更简单的方法来表达这个问题,或者创建 5x5 迷宫而不是基于文本的更简单的方法,这些也是非常受欢迎的 :)

【问题讨论】:

    标签: python text random graph maze


    【解决方案1】:

    来自http://rosettacode.org/wiki/Maze_generation#Python,这应该可以让您选择要创建的迷宫的大小(它应该是 5x5)。

    它将文字字符用于墙壁而不是走廊,但一般概念应该仍然有用。

    from random import shuffle, randrange
    
    def make_maze(w = 16, h = 8):
        vis = [[0] * w + [1] for _ in range(h)] + [[1] * (w + 1)]
        ver = [["|  "] * w + ['|'] for _ in range(h)] + [[]]
        hor = [["+--"] * w + ['+'] for _ in range(h + 1)]
    
        def walk(x, y):
            vis[y][x] = 1
    
            d = [(x - 1, y), (x, y + 1), (x + 1, y), (x, y - 1)]
            shuffle(d)
            for (xx, yy) in d:
                if vis[yy][xx]: continue
                if xx == x: hor[max(y, yy)][x] = "+  "
                if yy == y: ver[y][max(x, xx)] = "   "
                walk(xx, yy)
    
        walk(randrange(w), randrange(h))
        for (a, b) in zip(hor, ver):
            print(''.join(a + ['\n'] + b))
    
    make_maze()
    

    【讨论】:

    • 谢谢,这真的很有帮助!虽然它真的很酷,而且正是我想要做的,但我在寻找更多的解释而不是一个例子。我通读了代码和 wiki 页面的大部分内容,虽然其中大部分内容是有道理的,但我仍然对这段代码的工作原理感到有些困惑。有没有什么地方可以找到这段代码的解释?
    • @Jancl0:您是否阅读了引用此 Wikipedia article 尤其是 Depth-first search 算法的 wiki page 的最顶部?
    猜你喜欢
    • 2019-02-06
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多