我对Python相当陌生,最近开始创建一个游戏,我希望它完全在终端中进行。游戏的一个方面是创建一个随机迷宫,所以我决定使用随机形式的Prim算法,如这里所述-https://en.wikipedia.org/wiki/Maze_generation_algorithm
代码是有效的,但是迷宫感觉很“容易”,好像通道之间有太多的连接。我不知道这是因为我做错了,还是只是算法的一个特点。不管怎样,我都希望有人能解释如何解决这个问题;记住我还是个初学者
import random
def printout(*args):
for arg in args:
print(*arg, sep='')
Map = [["░" for k in range(40)] for l in range(20)]
def Prim(Map):
Wall_List = []
position = [0,20]
Map[0][20]= " "
for i in range(420):
if Map[(position[0]+2)%20][position[1]] == "░":
Wall_List.append([(position[0]+2)%20,position[1]])
if Map[(position[0]-2)%20][position[1]] == "░":
Wall_List.append([(position[0]-2)%20,position[1]])
if Map[position[0]][(position[1]+2)%40] == "░":
Wall_List.append([position[0],(position[1]+2)%40])
if Map[position[0]][(position[1]-2)%40] == "░":
Wall_List.append([position[0],(position[1]-2)%40])
cellposition = random.choice(Wall_List)
joiningwalls = []
if Map[(cellposition[0]+2)%20][cellposition[1]] == " ":
joiningwalls.append([(cellposition[0]+1)%20,cellposition[1]])
if Map[(cellposition[0]-2)%20][cellposition[1]] == " ":
joiningwalls.append([(cellposition[0]-1)%20,cellposition[1]])
if Map[cellposition[0]][(cellposition[1]+2)%40] == " ":
joiningwalls.append([cellposition[0],(cellposition[1]+1)%40])
if Map[cellposition[0]][(cellposition[1]-2)%40] == " ":
joiningwalls.append([cellposition[0],(cellposition[1]-1)%40])
joiningcell = random.choice(joiningwalls)
Map[joiningcell[0]][joiningcell[1]] = " "
Map[cellposition[0]][cellposition[1]] = " "
position = cellposition
Wall_List.remove(cellposition)
return Map
Map = Prim(Map)
printout(*Map)
目前没有回答
相关问题 更多 >
编程相关推荐