为了账号安全,请及时绑定邮箱和手机立即绑定

运行代码时,Turtle 图形脚本不断崩溃

运行代码时,Turtle 图形脚本不断崩溃

繁花不似锦 2021-11-02 20:09:41
我正在创建一个加载图像并将其转换为 1 和零的项目,然后它将使用乌龟绘制它。但是,每次我运行它时,它都会告诉我在第一列完成后它已停止工作。如果问题出在我电脑的处理能力上,我想知道是否有办法切换到 GPU 来完成任务。任何帮助将不胜感激。谢谢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()
查看完整描述

1 回答

?
慕妹3242003

TA贡献1824条经验 获得超6个赞

这段代码一团糟。您将一个名为 的 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:Picobot 的迷宫”的输出。从此页面作为输入:

//img1.sycdn.imooc.com//61812aa5000199b304830497.jpg

希望这能为您最终尝试开发的程序提供一个起点。


查看完整回答
反对 回复 2021-11-02
  • 1 回答
  • 0 关注
  • 267 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信