我正在尝试在乌龟和另一只乌龟的线之间创建一个碰撞检测系统。问题是每当我运行程序时,乌龟屏幕都没有响应。我正在使用Pycharm和Python。请帮助!
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin webmaster@domain.example
ServerName domain.example
ServerAlias www.domain.example
DocumentRoot /var/www/html/domain.example/public_html/
ErrorLog /var/www/html/domain.example/logs/error.log
CustomLog /var/www/html/domain.example/logs/access.log combined
</VirtualHost>
答案 0 :(得分:0)
您的代码中存在许多错误。
首先,
if P1.heading() is 180:
应该是
if P1.heading() == 180:
在你的循环中,你不能改变你的Num
var。
您正在尝试访问未定义的索引
x2[n] = XC
y2[n] = YC
你的逻辑在for循环中也没有多大意义。
在这里,我做了一些修正,我加了一个计时器,这样你就可以看到你的海龟是如何移动的。这应该可以帮助您可视化您正在做的事情
import time
import turtle
Screen = turtle.Screen()
P1 = turtle.Turtle()
P2 = turtle.Turtle()
Screen.screensize(100, 100)
P1.penup()
P1.setheading(180)
P2.setheading(90)
P1.goto(100, 50)
P2.penup()
P2.goto(50, 0)
P2.pendown()
P1.pendown()
time.sleep(1)
n = 100
if P1.heading() == 180:
for x in range(0, n):
print(P1.position())
print(P2.position())
if abs(P1.position()[1] - P2.position()[1]) > 10:
time.sleep(.3)
P2.forward(1)
P1.forward(.5)
else:
print('Found')
break
答案 1 :(得分:0)
该代码存在一些问题。这一行很重要:
if P1.heading() is 180:
is
运算符测试标识,即如果两个表达式求值为同一对象,则为True。您不应该使用它来测试两个表达式是否具有相同的值。在这种情况下,P1.heading()
返回值为180.0的float
对象,因此它不能与值为180的整数对象相同。因此,您的{{1永远不会输入块。由于移动海龟的主要命令位于if
区块的末尾,因此一旦您进入if
循环,海龟就不会移动。
此外,您使用while
索引列表,但您永远不会从零更新n
,因此您要保存的所有坐标都会被写入第一项名单。
但是,如果您 更新n
,则会遇到另一个问题:您正试图索引不存在的列表项,由于n
和x1
的长度为1,y1
和x2
的长度为零。
无论如何,这里是您的代码的简化版本,可以正确更新列表,并进行简单的碰撞检测。它只能检测到精确碰撞,而不是近似碰撞,但它应该让你朝着正确的方向前进。
y2