0

我试图让一条线遵循 Python 中的随机路径。我必须使用SimpleGUI来做到这一点。到目前为止,我已经做了足够多的事情来使该行遵循随机路径,但是在 for 循环之后,代码重新启动。我对 SimpleGUI 不太熟悉,所以我确信代码重新启动是有充分理由的,但我不知道如何修复它。我已经提供了下面的代码,在此先感谢!

import simplegui
import random

def draw_handler(canvas):
    x=300 #Should be the center; this is the center of 600x600
    y=300
    for i in range(1000):
        direction=random.randint(1,4) #1=up,2=left,3=down,4=right
        if (direction==1):
            canvas.draw_line([x,y],[x,y-3],3,"Black")
            y=y-3
        if (direction==2):
            canvas.draw_line([x,y],[x-3,y],3,"Black")
            x=x-3
        if (direction==3):
            canvas.draw_line([x,y],[x,y+3],3,"Black")
            y=y+3
        if (direction==4):
            canvas.draw_line([x,y],[x+3,y],3,"Black")
            x=x+3


frame = simplegui.create_frame('Testing', 600, 600)
frame.set_canvas_background("White")
frame.set_draw_handler(draw_handler)
frame.start() 
4

1 回答 1

0

绘图处理函数每秒调用 60次,以完全重绘画布。我在SimpleGUICS2Pygame的文档中明确了这一点,该文档在标准 Python 实现中重新实现了 SimpleGUI。

需要累积路径,在每次调用绘图处理函数时添加一个点,然后绘制所有路径。看这个例子

#!/usr/bin/env python3
"""
Random path
"""
import random

try:
    import simplegui
except ImportError:
    # SimpleGUICS2Pygame: https://simpleguics2pygame.readthedocs.io/
    import SimpleGUICS2Pygame.simpleguics2pygame as simplegui


def main():
    width = 600
    height = 600

    points = [(width // 2, height // 2)]

    def draw_handler(canvas):
        last_x, last_y = points[-1]
        new_x = last_x
        new_y = last_y
        direction = random.choice((-1, 1))
        if random.randrange(2) == 0:
            new_y += direction * 3
        else:
            new_x += direction * 3

        points.append((new_x, new_y))

        a = points[0]
        for b in points[1:]:
            canvas.draw_line(a, b, 1, 'Black')
            a = b

    frame = simplegui.create_frame('Random path', width, height)
    frame.set_canvas_background('White')
    frame.set_draw_handler(draw_handler)
    frame.start()


if __name__ == '__main__':
    main()
于 2021-03-26T17:12:03.107 回答