python 迷宫生成题目_Python随机产生迷宫生成算法源码

用Python语言可以实现许多程序的生成与解密,今天为大家提供的代码是Python随机产生迷宫生成算法源码。这是一个考验你python教程,学习的数学逻辑算法能力,需要用到Tkinter、random、tkSimpleDialog和sys模块库中的一些方法来共同完成这个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.iplaypy.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源码程序所产生的迷宫中任意两点之间都应该可以走通的。

玩蛇网文章,转载请注明出处和文章网址:https://www.iplaypy.com/code/algorithm/a2581.html

相关文章 Recommend

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值