Графический скрипт Turtle продолжает зависать при запуске кода - PullRequest
0 голосов
/ 08 февраля 2019

Я создаю проект, который загружает изображение и конвертирует его в 1, а затем в нули он будет рисовать это с помощью черепахи.Тем не менее, каждый раз, когда я запускаю, он говорит мне, что он перестал работать после завершения первого столбца.Если проблема связана с вычислительной мощностью моего компьютера, я хотел бы знать, есть ли способ переключиться на графический процессор для решения этой задачи.Любая помощь будет принята с благодарностью.Спасибо

def ShowMaze(possibleRoutes):
    turtle.delay(0)
    for x in range(0,len(Maze)):
        for y in range(0,len(Maze[0])):
            if Maze[x][y]==3:
                Maze[x][y]=0

    for x in range(0,len(Maze)):
        turtle.forward(-5)
        turtle.right(90)
        turtle.forward(5/len(Maze[0]))
        turtle.left(90)
        for y in range(0,len(Maze[0])):
            if Maze[x][y]==1:
                turtle.fillcolor("black")
                turtle.begin_fill()
            elif Maze[x][y]==0:
                turtle.fillcolor("white")
                turtle.begin_fill()
            elif Maze[x][y]==4:
                turtle.fillcolor("green")
                turtle.begin_fill()
            elif Maze[x][y]==5:
                turtle.fillcolor("red")
                turtle.begin_fill()

            for i in range(0,4):
                turtle.forward(5/len(Maze[0]))
                turtle.left(90)

            turtle.end_fill()
            turtle.forward(5/len(Maze[0]))
    input()
    for ii in range(1,len(possibleRoutes)-1):
        turtle.pu()
        turtle.home()
        turtle.forward(-250)
        turtle.forward((250/len(Maze))*possibleRoutes[ii][1])
        turtle.right(90)
        turtle.forward((250/len(Maze))*possibleRoutes[ii][0]+(250/len(Maze)))
        turtle.left(90)
        turtle.fillcolor("blue")
        turtle.pd()
        turtle.begin_fill()
        for x in range(0,4):
            turtle.forward(250/len(Maze[0]))
            turtle.left(90)
        turtle.end_fill()
im = Image.open('D:/MazeSolver/ExampleMazePicture.JPG') # Can be many different formats.
pix = im.load()
size=250
Maze=[]
length=im.size[0]  # Get the width and hight of the Maze for iterating over
for x in range(0,size,8):
    print("Row",x)
    row=[]
    for y in range(0,size,2):
        pix = im.load()
        if pix[x,y]>=(200,200,200):
            node=0
        elif pix[x,y][0]>200 and pix[x,y][2]<200 and pix[x,y][1]<200:
            node=4
            print("End")
        elif pix[x,y][1]>200 and pix[x,y][0]<50 and pix[x,y][2]<50:
            node=5
            print("Start")
        elif pix[x,y]<=(50,50,50):
            node=1
        else:
            print(pix[x,y])
        row.append(node)
    Maze.append([row])
ShowMaze(Maze)

1 Ответ

0 голосов
/ 09 февраля 2019

Этот код беспорядок.Вы вводите изображение лабиринта 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

Надеемся, это послужит отправной точкой для программы, которую вы в конечном итоге пытаетесь разработать.

...