Этот код беспорядок.Вы вводите изображение лабиринта JPEG, называемое Maze
, в двумерный массив и передаете его в ShowMaze(Maze)
, чтобы показать, что вы правильно его прочитали.Но ShowMaze()
обращается к Maze
по всему миру и думает, что его аргумент ShowMaze(possibleRoutes)
, где possibleRoutes
через лабиринт никогда не рассчитывались?Кроме того: X и Y смысл Maze
кажется перевернутым;ряды лабиринта имеют дополнительный слой list
, обернутый вокруг них без видимой причины;там есть мертвый код;вы не читаете это как 1 и 0, а скорее как четыре разных цветовых кода;код рисования кажется безнадежным.
Я переработал ваш код, чтобы просто прочитать лабиринт в список списков и затем отобразить его с черепахой, используя штамповка вместо рисование чтобы упростить и ускорить код:
from turtle import Screen, Turtle
from PIL import Image
CURSOR_SIZE = 20
PIXEL_SIZE = 5
COLORS = {0: 'white', 1: 'black', 4: 'green', 5: 'red'}
def ShowMaze(maze):
height, width = len(maze), len(maze[0])
screen = Screen()
screen.setup(width * PIXEL_SIZE, height * PIXEL_SIZE)
screen.setworldcoordinates(0, height, width, 0)
turtle = Turtle('square', visible=False)
turtle.shapesize(PIXEL_SIZE / CURSOR_SIZE)
turtle.penup()
screen.tracer(False)
for y in range(height):
for x in range(width):
color = maze[y][x]
if color in COLORS:
turtle.fillcolor(COLORS[color])
else:
turtle.fillcolor("orange") # error color
turtle.stamp()
turtle.forward(1)
turtle.goto(0, turtle.ycor() + 1)
screen.tracer(True)
screen.mainloop()
image = Image.open('ExampleMazePicture.JPG') # Can be many different formats.
width, height = image.size # Get the width and height of the Maze for iterating over
pixels = image.load()
maze = []
for y in range(0, width, 4):
print("Row:", y)
row = []
for x in range(0, width, 4):
node = -1
pixel = pixels[x, y]
if pixel >= (200, 200, 200):
node = 0
elif pixel[0] > 200 and pixel[1] < 200 and pixel[2] < 200:
node = 4
print("End")
elif pixel[0] < 50 and pixel[1] > 200 and pixel[2] < 50:
node = 5
print("Start")
elif pixel <= (50, 50, 50):
node = 1
else:
print(pixel)
row.append(node)
maze.append(row)
ShowMaze(maze)
Вывод с использованием «Рисунок 1.6: Лабиринт Пикобота».с этой страницы в качестве ввода:
![enter image description here](https://i.stack.imgur.com/HWar0.png)
Надеемся, это послужит отправной точкой для программы, которую вы в конечном итоге пытаетесь разработать.