<p>下面是一个实现,我相信你的代码试图做什么。在这一点上,它可能比您准备的要复杂,但我希望它能为您提供如何重新编写自己的代码的想法。特别是在气泡原型和克隆的概念中,以避免大量冗余代码:</p>
<pre><code>from turtle import Screen, Turtle
from random import randint
BUBBLE_COUNT = 9
BUBBLE_DIAMETER = 10
WIDTH, HEIGHT = 500, 500
CURSOR_SIZE = 20
def bubbles_rise():
for start_time, bubble in bubbles:
if time > start_time and bubble.ycor() < HEIGHT/2 + BUBBLE_DIAMETER:
bubble.forward(1)
dx = randint(-1, 1)
if dx != 0:
bubble.setx(bubble.xcor() + dx)
if any(bubble.ycor() < HEIGHT/2 + BUBBLE_DIAMETER for _, bubble in bubbles):
screen.ontimer(bubbles_rise, 10)
else:
print("Finished rising!")
def bubbles_launch():
global time
for start_time, bubble in bubbles:
if time >= start_time:
bubble.showturtle()
if any(start_time > time for start_time, _ in bubbles):
time += 0.1
screen.ontimer(bubbles_launch, 100)
else:
print("Finished launching!")
screen = Screen()
screen.setup(WIDTH, HEIGHT)
screen.bgcolor("black")
bubble_prototype = Turtle('circle', visible=False)
bubble_prototype.penup()
bubble_prototype.sety(-HEIGHT/2 - BUBBLE_DIAMETER) # just out of sight
bubble_prototype.color('red')
bubble_prototype.shapesize(BUBBLE_DIAMETER / CURSOR_SIZE)
bubble_prototype.setheading(90)
bubble_prototype.speed('fastest')
bubbles = []
start_time = 0
for _ in range(BUBBLE_COUNT):
start_time += randint(1, 4) / 2
new_bubble = bubble_prototype.clone()
new_bubble.setx(randint(BUBBLE_DIAMETER - WIDTH/2, WIDTH/2 - BUBBLE_DIAMETER)) # just inside
bubbles.append((start_time, new_bubble))
time = 0
bubbles_rise()
bubbles_launch()
screen.mainloop()
</code></pre>