为什么我的画海龟程序运行2次后就死掉了

问题描述 投票:0回答:1

这段代码应该A)创建一个网格(它确实这样做了)和B)在绘制路径时沿对角线移动并在撞到墙壁时改变方向并在返回到原始位置时停止移动。

A 部分有效,但 B 部分在 2 个动作后完成,认为它回到了原来的位置,尽管 它绝对不是。

Screenshot of the program after it's

您需要任何建议或其他信息吗?

import turtle as t
from time import sleep

""" HOW TO USE:
    - Set the size variables
    - Every movement is in 10-step increments
    - 

"""


""" Size variables """
top_x_border = 100
bottom_x_border = 0
top_y_border = 80
bottom_y_border = 0



# Creating the screen
sc = t.Screen()
sc.title("Kelttiläiset solmut")
sc.bgcolor("white")
sc.setup(width = 0.7, height = 0.8)
sc.tracer(2)
sc.delay(10000) 



# Creating the drawer-turtle
drawer = t.Turtle()
change_x = 10
change_y = 10


""" 

Functions

"""



""" Methods """
# method to draw y-axis lines
def drawy(steps, val):
    
    # line
    drawer.forward(steps)
    
    # set position
    drawer.up()
    drawer.setpos(val,steps)
    drawer.down()
    
    # another line
    drawer.backward(steps)
    
    # set position again
    drawer.up()
    drawer.setpos(val+10,0)
    drawer.down()
    
    
    
# method to draw x-axis lines
def drawx(steps, val):
    
    # line
    drawer.forward(steps)
    
    # set position
    drawer.up()
    drawer.setpos(steps,val)
    drawer.down()
    
    # another line
    drawer.backward(steps)
    
    # set position again
    drawer.up()
    drawer.setpos(0,val+10)
    drawer.down()



# Whole Grid
def grid():
    drawer.speed(100)
    drawer.left(90)

    # y lines
    for i in range(top_x_border // 10):
        drawy(top_x_border, 10*(i+1))

    # set position for x lines 
    drawer.right(90)
    drawer.up()
    drawer.setpos(0,0)
    drawer.down()
    
    # x lines
    for i in range(top_x_border // 10):
        drawx(top_x_border, 10*(i+1))

    # hide the turtle
    drawer.hideturtle()


# actually drawing the thing
def actually_do_stuff():
    global change_x
    global change_y
    global top_x_border
    global bottom_x_border
    global top_y_border
    global bottom_y_border    
    
    for i in (1, 101):
        # Move the drawer
        print("{}x{}".format(drawer.xcor(),drawer.ycor()))
    
        drawer.goto(drawer.xcor()+change_x, drawer.ycor()+change_y)
        
        """
        # Check if back at start
        if [ drawer.xcor() == Start["x"] ] and [ drawer.ycor() == Start["x"] ]:
            break
        """
        
        print("top/bottom_x_borders: ", top_x_border, bottom_x_border)
        print("{}x{}".format(drawer.xcor(),drawer.ycor()))
        
        """
        # Check for collisions with the borders
        if [ drawer.xcor() <= top_x_border ] or [ drawer.xcor() >= bottom_x_border ]:
            change_x *= -1
        elif [ drawer.ycor() <= top_y_border ] or [drawer.ycor() >= bottom_y_border]:
            change_y *= -1
        """

# Methods end 


""" ACTUAL THINGS HAPPENING """

drawer.color('gray')
grid()

#go to starting position
drawer.penup()
drawer.goto(bottom_x_border, bottom_y_border+10)
drawer.pendown()

#mark starting position
Start = {}
Start["x"] = drawer.xcor()
Start["y"] = drawer.ycor()

# Actually draw what you wanted
drawer.color('red')
actually_do_stuff()

drawer.hideturtle()
sc.exitonclick()
python turtle-graphics python-turtle
1个回答
3
投票

2 步后它停在 (20, 30),因为在

actually_do_stuff()
中你写了
for i in (1, 101)
,那是 2 步,对吗?

我想应该是

for i in range(1, 101)
,所以继续移动了100次。

© www.soinside.com 2019 - 2024. All rights reserved.