<p>实际上,您需要重新组织代码,以避免重复。在</p>
<pre><code>import random
import turtle
</code></pre>
<p>让我们创造世界的特性</p>
^{pr2}$
<p>以及它的生物</p>
<pre><code>t1 = turtle.Turtle()
t1.shape('turtle')
t2 = turtle.Turtle()
t2.shape('circle')
delta_move = 50
# Let us build a list so as to have all turtles in hands in one object
turtles = [
t1,
t2,
#t3,
#t4,
#...
]
for t in turtles:
t.speed(0) # To make turtles be faster (0 is the FASTEST SPEED)
t.setheading(random.randrange(0, 360))
# We do not need what follows anymore, since collisions
# will be managed thereafter
##t.goto(random.randrange(leftBound, rightBound),
## random.randrange(bottomBound, topBound))
</code></pre>
<p>一些物理约束</p>
<pre><code>def isCollidingOtherTurtle(t):
# Let us define the reciprocity between turtles
# using the just-defined list "turtles" above
other_turtles = [t_ for t_ in turtles if t_ is not t]
# This python function called any,
# checks whether there is at least one
# other turtle at a distance lower than 2.
# In this case, any(...) returns True
return any([t.distance(ot) < 2\
for ot in other_turtles])
def isInScreen(t):
# There is no need to redefine the bounds
# since they already have a global scope
# definition working in the local
# scope of this function
# [see global versus local variables]
## leftBound = - w.window_width() / 2
## rightBound = w.window_width() / 2
## topBound = w.window_height() / 2
## bottomBound = -w.window_height() / 2
turtleX = t.xcor()
turtleY = t.ycor()
stillIn = True
if turtleX > rightBound or turtleX < leftBound:
stillIn = False
if turtleY > topBound or turtleY < bottomBound:
stillIn = False
return stillIn
</code></pre>
<p>定义每个普通海龟的大脑</p>
<pre><code>def getDirection():
#return random.random()*360. - 180 # returns a float between -180 and 180
return random.choice([-180,-90,0,90,180])
def moveRandom(t):
# A generic turtle moves forward
# if it is going to collide
# with no other turtle
if not isCollidingOtherTurtle(t):
if isInScreen(t):
t.left(getDirection())
t.forward(delta_move)
else:
t.backward(delta_move)
else:
t.backward(delta_move)
</code></pre>
<p>让我们来定义如何使这个世界充满活力,并使之充满活力</p>
<pre><code>def anim(delta_time=60):
wn.tracer(0, 0)
for t in turtles:
moveRandom(t)
wn.update()
wn.ontimer(anim, delta_time) # delta_time is in milliseconds
anim()
turtle.mainloop()
</code></pre>