我是否正确地实现了Prim的算法?迷宫生成

2024-10-04 11:24:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我对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)

Tags: in游戏mapforifpositionrangerandom