来自101 BASIC计算机游戏的“惊人”

时间:2014-11-29 15:47:15

标签: python algorithm text grid maze

我试图编写一个复制" Amazing"用Python编写的101 BASIC计算机游戏游戏。我希望它使用相同的字符创建相同的文本迷宫,到目前为止,我将自己局限于一个程序,我可以从命令行运行,而无需创建新的GUI。我的研究让我看到了维基百科文章"迷宫生成算法"和页面" Think Labyrinth:Maze Algorithms,"来自astrolog.org网站。

我的第一个想法是编写一个程序,可以从零开始构建迷宫,但大多数关于迷宫创建的观点似乎是从一个网格开始,从一个单元格开始,然后编写一个测试单元格的算法&#39邻居们看看他们是否被访问过,并打破了当前小区和一个尚未访问的随机新邻居之间的隔阂。

到目前为止,我编写了一个程序,根据用户输入的宽度和高度生成文本网格:

    """Asks user for a width and height, then generates a text grid based on
    user input."""

    #Only two imports
    import random
    import sys

    width1 = int(input("What width do you want? "))
    height1 = int(input("What height do you want? "))

    #Text elements for the grid
    top_Line = ".--"
    top_End = "."
    mid_Line = ":--"
    mid_End = ":"
    yes_Wall = "  I"

    def grid_Top(width1):
        """Draws the top of a grid of user width."""
        top_Lst = []
        for i in range(width1):
            top_Lst.append(top_Line)
        top_Lst.append(top_End)
        return top_Lst

    def grid_Walls(width1):
        """Draws the walls of the grid."""
        walls_Lst = []
        walls_Lst.append("I")
        for i in range(width1):
            walls_Lst.append(yes_Wall)
        return walls_Lst

    def grid_Floors(width1):
        """Draws the floors of the grid."""
        floors_Lst = []
        for i in range(width1):
            floors_Lst.append(mid_Line)
        floors_Lst.append(mid_End)
        return floors_Lst

    def grid_Create(width1, height1):
        """Creates the grid of user width & height."""
        for i in grid_Top(width1):
            print(i, end = "")
        print("")
        for j in range(height1):
            for i in grid_Walls(width1):
                print(i, end="")
            print("")
            for i in grid_Floors(width1):
                print(i, end="")
            print("")

    grid_Create(width1, height1)

所以,就目前而言,我的每个细胞都是由它上方的天花板,两侧的墙壁和它下面的地板来定义的。就目前而言,这意味着测试每个单元格是否已经访问过或者是否完好无损包括查看三个列表 - 前一个列表,当前列表和下一个列表,如果您了解我的意思。

我的问题是:如何将一个结构强加到我的文本网格上,以便每个单元格都是自己的实体,可以测试它是否在深度优先搜索中被访问过?

欢迎任何关于我的代码的评论,无论它们是否与我提出的实际问题相关!

谢谢!

1 个答案:

答案 0 :(得分:0)

我会使用set明确跟踪访问过哪些单元格:

visited = set()

if candidate_coord not in visited:
    visited.add(candidate_coord)
    break_wall(candidate_coord, curr_coord)