这段代码应该A)创建一个网格(它确实这样做了)和B)在绘制路径时沿对角线移动并在撞到墙壁时改变方向并在返回到原始位置时停止移动。
A 部分有效,但 B 部分在 2 个动作后完成,认为它回到了原来的位置,尽管 它绝对不是。
您需要任何建议或其他信息吗?
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()
2 步后它停在 (20, 30),因为在
actually_do_stuff()
中你写了 for i in (1, 101)
,那是 2 步,对吗?
我想应该是
for i in range(1, 101)
,所以继续移动了100次。