import random # Python translation by Frank Palazzolo - 2/2021 print(' '*28+'AMAZING PROGRAM') print(' '*15+'CREATIVE COMPUTING MORRISTOWN, NEW JERSEY') print() print() print() while True: width, length = input('What are your width and length?').split(',') width = int(width) length = int(length) if width != 1 and length != 1: break print('Meaningless dimensions. Try again.') # Build two 2D arrays # # used: # Initially set to zero, unprocessed cells # Filled in with consecutive non-zero numbers as cells are processed # # walls: # Initially set to zero, (all paths blocked) # Remains 0 if there is no exit down or right # Set to 1 if there is an exit down # Set to 2 if there is an exit right # Set to 3 if there are exits down and right used = [] walls = [] for i in range(length): used.append([0]*width) walls.append([0]*width) # Use direction variables with nice names GO_LEFT,GO_UP,GO_RIGHT,GO_DOWN=[0,1,2,3] # Give Exit directions nice names EXIT_DOWN = 1 EXIT_RIGHT = 2 # Pick a random entrance, mark as used enter_col=random.randint(0,width-1) row,col=0,enter_col count=1 used[row][col]=count count=count+1 while count!=width*length+1: # remove possible directions that are blocked or # hit cells that we have already processed possible_dirs = [GO_LEFT,GO_UP,GO_RIGHT,GO_DOWN] if col==0 or used[row][col-1]!=0: possible_dirs.remove(GO_LEFT) if row==0 or used[row-1][col]!=0: possible_dirs.remove(GO_UP) if col==width-1 or used[row][col+1]!=0: possible_dirs.remove(GO_RIGHT) if row==length-1 or used[row+1][col]!=0: possible_dirs.remove(GO_DOWN) # If we can move in a direction, move and make opening if len(possible_dirs)!=0: direction=random.choice(possible_dirs) if direction==GO_LEFT: col=col-1 walls[row][col]=EXIT_RIGHT elif direction==GO_UP: row=row-1 walls[row][col]=EXIT_DOWN elif direction==GO_RIGHT: walls[row][col]=walls[row][col]+EXIT_RIGHT col=col+1 elif direction==GO_DOWN: walls[row][col]=walls[row][col]+EXIT_DOWN row=row+1 used[row][col]=count count=count+1 # otherwise, move to the next used cell, and try again else: while True: if col!=width-1: col=col+1 elif row!=length-1: row,col=row+1,0 else: row,col=0,0 if used[row][col]!=0: break # Add a random exit col=random.randint(0,width-1) row=length-1 walls[row][col]=walls[row][col]+1 # Print the maze for col in range(width): if col==enter_col: print('. ',end='') else: print('.--',end='') print('.') for row in range(length): print('I',end='') for col in range(width): if walls[row][col]<2: print(' I',end='') else: print(' ',end='') print() for col in range(width): if walls[row][col]==0 or walls[row][col]==2: print(':--',end='') else: print(': ',end='') print('.')