【发布时间】:2026-01-12 06:40:01
【问题描述】:
在我掌握了我之前的程序的窍门后(乌龟随机行走并从墙上反弹,直到撞到墙壁 4 次),我尝试在指南中做以下练习,它要求两只乌龟的起始位置是随机的它们在屏幕上走来走去,从墙壁上反弹,直到它们撞到彼此——没有计数器变量来决定它们什么时候应该停下来。我设法写了整个事情,除了它们碰撞和停止的部分:我想出了一个布尔函数,如果海龟的 X 和 Y 坐标相同,则返回 True,如果不是,则返回 False工作,但他们继续走,终止程序的唯一方法是强制解释器退出。我做错了什么?
import turtle
import random
def setStart(t):
tx = random.randrange(-300,300,100)
ty = random.randrange(-300,300,100)
t.penup()
t.goto(tx,ty)
t.pendown()
def throwCoin(t):
coin = random.randrange(0,2)
if coin == 0:
t.left(90)
else:
t.right(90)
def isInScreen(w,t):
leftBound = w.window_width() / -2
rightBound = w.window_width() / 2
bottomBound = w.window_height() / -2
topBound = w.window_height() / 2
turtlex = t.xcor()
turtley = t.ycor()
stillIn = True
if turtlex < leftBound or turtlex > rightBound or turtley < bottomBound or turtley > topBound:
stillIn = False
return stillIn
def collide(t,u):
if t.xcor() == u.xcor() and t.ycor() == u.ycor():
return True
return False
def randomWalk(t,w):
if not isInScreen(w,t):
t.left(180)
else:
throwCoin(t)
t.forward(100)
def doubleRandom(t,u,w):
while not collide(t,u):
randomWalk(t,w)
if collide(t,u):
break
randomWalk(u,w)
wn = turtle.Screen()
wn.bgcolor('lightcyan')
steklovata = turtle.Turtle()
steklovata.color('darkslategray')
steklovata.shape('turtle')
setStart(steklovata)
catshower = turtle.Turtle()
catshower.color('orangered')
catshower.shape('turtle')
setStart(catshower)
doubleRandom(steklovata,catshower,wn)
wn.exitonclick()
编辑: 为了测试错误是在 collide(t,u) 函数中还是在调用它的 while 循环中,我编写了另一个函数,将两个海龟发送到同一个位置并如果collide(t,u) 返回True,则打印出一些文本(如果有人想知道,这是一个内部笑话,就像我想出的每个翻转名称一样)。当我运行它时,文本 DID 打印出来,这告诉我碰撞检测工作正常......但循环不知何故并没有告诉 Python 海龟在碰撞时应该停止。这是函数:
def raul(t,u,w):
t.goto(1,1)
u.goto(1,1)
if collide(t,u):
t.write('RAUL SUNTASIG')
这是否让你们知道它为什么不起作用?
【问题讨论】:
-
我还没有看过代码,但问题是它们在碰撞检查发生之前就停止了相交吗?比如
(0, 0)的一只乌龟去(1, 0),另一只乌龟从(1, 0)去(0, 0),那么碰撞逻辑认为它们没有撞到对方? -
我认为按照 Python 的逻辑,一个是从
0,1到0,0,然后另一个从1,0到0,0,所以我认为坐标应该是一样,但是第一只乌龟又走了,然后另一只也走了,而不是都停在原地。 -
只有当他们开始时彼此相距偶数步时才会发生这种情况。如果它们从
(0, 0)和(0, 1)开始,碰撞检测器将永远不会注意到它们何时发生碰撞。 -
您的代码有时会停止吗?如果有,大约多久一次?一半时间?少一点?
-
发现问题。查看我的编辑。
标签: python python-3.x turtle-graphics