python解图片迷宫生成路径_pygame迷宫游戏,利用pyhton生成迷宫再解迷宫

"""迷宫生成代码"""

importrandomfrom wall importWalldef generate_maze(size_x, size_y, density=0.9):"""生成一个给定大小的迷宫,以"右墙"数组的形式返回迷宫

"底墙"。

例如,以下迷宫:

+---+---+---+

| | |

+---+ + +

| |

+ +---+---+

| |

+---+---+---+

# 00010

# 11010

# 00000

# 00000

将表示为:

right_walls: [

[f, t],

[f, f],

[f, f]

]

bottom_walls: [

[t, f, f],

[f, t, t]

]

(where t = True, f = False)."""

classNode:def __init__(self, group_id, position):

self.group_id=group_id

self.position=positionclassEdge:"""这个类用来做保存两个节点间的单个连接的数据结构"""

def __init__(self, orientation, position, enabled):

self.orientation=orientation

self.position=position

self.enabled=enabled

nodes= [Node(i + j *size_x, (i, j))for j inrange(size_y)for i inrange(size_x)]

edges=[

Edge("r", (i, j), True)for j inrange(size_y)for i in range(size_x - 1)

]+[

Edge("b", (i, j), True)for j in range(size_y - 1)for i inrange(size_x)

]

random.shuffle(edges)for edge inedges:if edge.orientation == "r":

parent_nodes= [nodes[edge.position[0] + size_x * edge.position[1]],

nodes[edge.position[0]+ 1 + size_x * edge.position[1]]]else:

parent_nodes= [nodes[edge.position[0] + size_x * edge.position[1]],

nodes[edge.position[0]+ size_x * (edge.position[1] + 1)]]if parent_nodes[0].group_id != parent_nodes[1].group_id:

edge.enabled=False

dead_group_id= parent_nodes[1].group_idfor node innodes:if node.group_id ==dead_group_id:

node.group_id=parent_nodes[0].group_id

enabled_edges= list(filter(lambdaedge: edge.enabled, edges))

random.shuffle(enabled_edges)for i in range(round((size_x - 1) * (size_y - 1) * (1 -density))):

enabled_edges[i].enabled=False

right_edges= [[True for i in range(size_x - 1)] for i inrange(size_y)]

bottom_edges= [[True for i in range(size_x)] for i in range(size_y - 1)]for edge inedges:if edge.orientation == "r":

right_edges[edge.position[1]][edge.position[0]] =edge.enabledif edge.orientation == "b":

bottom_edges[edge.position[1]][edge.position[0]] =edge.enabledreturn(right_edges, bottom_edges)defgenerate_walls_from_maze(width, height, maze):"""把右墙/底墙中给定的墙转换为宽度正确的矩形墙。"""walls=[]#Edges

walls.append(Wall.generate_horizontal_wall(0, 0, width))

walls.append(

Wall.generate_horizontal_wall(0, height, width)

)

walls.append(Wall.generate_vertical_wall(0, 0, height))

walls.append(Wall.generate_vertical_wall(width, 0, height))

(right_walls, bottom_walls)=maze#水平墙

for y in range(height - 1):

x=0

current_wall_start_x=0

current_wall_length=0while x

x+= 1current_wall_length+= 1

if current_wall_length >0:

walls.append(

Wall.generate_horizontal_wall(

current_wall_start_x,

y+ 1,

current_wall_length

)

)

x+= 1current_wall_start_x=x

current_wall_length=0#竖直墙

for x in range(width - 1):

y=0

current_wall_start_y=0

current_wall_length=0while y

y+= 1current_wall_length+= 1

if current_wall_length >0:

walls.append(

Wall.generate_vertical_wall(

x+ 1,

current_wall_start_y,

current_wall_length

)

)

y+= 1current_wall_start_y=y

current_wall_length=0returnwallsdefprint_maze(walls):"""终端打印迷宫"""right_walls, bottom_walls=walls

size_x=len(bottom_walls[0])

size_y=len(right_walls)print("+---" * size_x + "+")for y inrange(size_y):print("|", end="")for x in range(size_x - 1):ifright_walls[y][x]:print("|", end="")else:print(" ", end="")print("|")if y != size_y - 1:for x inrange(size_x):ifbottom_walls[y][x]:print("+---", end="")else:print("+", end="")print("+")print("+---" * size_x + "+")if __name__ == "__main__":#print_maze(generate_maze(10, 10, density=0.9))

print(len(generate_maze(10, 10, density=0.9)))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值