玩蛇网提供最新Python编程技术信息以及Python资源下载!

Python随机产生迷宫生成算法源码

python 培训

Python语言可以实现许多程序的生成与解密,今天为大家提供的代码是Python随机产生迷宫生成算法源码。这是一个考验你python教程,学习的数学逻辑算法能力,需要用到Tkinter、random、tkSimpleDialog和sys模块库中的一些方法来共同完成这个Python随机产生迷宫生成算法解密。

Python随机产生迷宫生成算法

Python随机产生迷宫生成算法具体源代码如下(供参考):

import sys
from random import randrange, shuffle
from Tkinter import *
from tkSimpleDialog import askstring
 
sys.setrecursionlimit(100000)
 
BOTTOM_WALL = 0
RIGHT_WALL = 1
VISITED = 2
E,S,W,N = 0, 1, 2, 3
DIRECTION = [(0,1),(1,0),(0,-1),(-1,0)]
 
class Maze:
    def __init__(self, row, col):
        self.row , self.col = row, col
        self.maze = [[[True, True, False] for c in range(col)] for r in range(row)]
        self.makepath(randrange(row), randrange(col))
 
    def makepath(self, r, c, direct = None):

        maze = self.maze

        maze[r][c][VISITED] = True

        if direct == N: maze[r][c][BOTTOM_WALL] = False
        if direct == S: maze[r-1][c][BOTTOM_WALL] = False
        if direct == W: maze[r][c][RIGHT_WALL] = False
        if direct == E: maze[r][c-1][RIGHT_WALL] = False
 
        directs = []
        if r > 0: directs.append(N)
        if r < self.row - 1: directs.append(S)
        if c > 0: directs.append(W)
        if c < self.col - 1: directs.append(E)
 
        shuffle(directs)
 
        for d in directs:

            dr, dc = DIRECTION[d]

            if not maze[r+dr][c+dc][VISITED]:
                self.makepath(r+dr, c+dc, d)
 
    def draw(self, size, canvas):
        d = 5

        canvas.config(width = d*2+self.col*size, height = d*2+self.row*size)
        line = canvas.create_line
        line(d,d,self.col*size+d,d)
        line(d,d,d,self.row*size+d)
        #www.iplaypython.com

        for r in range(self.row):
            for c in range(self.col):

                if self.maze[r][c][BOTTOM_WALL]:
                    line(c*size+d, r*size+size+d, c*size+size+d, r*size+size+d)

                if self.maze[r][c][RIGHT_WALL]:
                    line(c*size+size+d, r*size+d, c*size+size+d, r*size+size+d)
 
root = Tk()
root.title("Maze")
canvas = Canvas(root)
canvas.pack()
size = askstring("Maze size", "Please Maze size", initialvalue="25 25")
size = [int(x) for x in size.split()]
Maze(*size).draw(10, canvas)
root.mainloop()

Python其它算法相关文章推荐:
1、Python计算n*n网格生成树数目的方法
2、Python实现的几个常见的排序算法
3、Python实现自动扫雷游戏的方法源码

提示:以上Python源码程序所产生的迷宫中任意两点之间都应该可以走通的。

玩蛇网原创,转载请注明文章出处和来源网址:http://www.iplaypython.com/code/algorithm/a2581.html



微信公众号搜索"玩蛇网Python之家"加关注,每日最新的Python资讯、图文视频教程可以让你一手全掌握。强烈推荐关注!

微信扫描下图可直接关注

玩蛇网Python新手QQ群,欢迎加入: ① 240764603 玩蛇网Python新手群
文章发布日期:2016-01-11 16:47 玩蛇网 www.iplaypython.com

评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
相关文章推荐
别人正在看
特别推荐
去顶部去底部