python - 如何在我的 python 点击游戏中放置一个计时器,并使圆圈消失?
问题描述
我正在尝试创建一个鼠标精度游戏,其中不同大小的各种圆圈会在您的屏幕上弹出,您的工作是在它们在 3 秒内消失之前以及在计时器在 20 秒内用完之前单击它们。
我尝试使用带有 countdown() 的导入时间,但它无法正常工作。我也不知道如何让圆圈有自己的计时器并使它们消失。我该怎么做呢?这是我到目前为止所拥有的:
from turtle import Turtle, Screen
from random import random, randint
CURSOR_SIZE = 20
def my_circle(color):
radius = randint(10, 50)
circle = Turtle('circle', visible=False)
circle.shapesize(radius / CURSOR_SIZE)
circle.color(color)
circle.penup()
while True:
nx = randint(2 * radius - width // 2, width // 2 - radius * 2)
ny = randint(2 * radius - height // 2, height // 2 - radius * 2)
circle.goto(nx, ny)
for other_radius, other_circle in circles:
if circle.distance(other_circle) < 2 * max(radius, other_radius):
break
else:
break
circle.showturtle()
circle.onclick(lambda x, y, t=circle: t.hideturtle())
return radius, circle
screen = Screen()
screen.bgcolor("lightgreen")
screen.title("clicky")
width, height = screen.window_width(), screen.window_height()
circles = []
for _ in range(0, 20):
rgb = (random(), random(), random())
circles.append(my_circle("black"))
screen.mainloop()
解决方案
不要给每个圈子一个计时器。相反,有一个整体计时器。当一个圈子被创建时,存储它的创建时间,也许还有其他信息,比如它被删除的时间。在计时器的每个滴答声中,搜索圈子并删除时间到的圈子。您可以通过将循环销毁时间信息存储在优先级队列中来加快搜索速度(请参阅heapq
模块)。
这种使用一个计时器并在每个时钟节拍上搜索列表的技术是 GUI 编程的标准。
推荐阅读
- r - 如何使用可拖动图中的高度值更新滑块输入的值?
- gatsby - 如何阻止 Gatsby 将 Markdown 图像包装在
标签和隐藏图片标题?
- python-3.x - 用于多类分类的 Scikit-learn make_scorer 自定义度量问题
- c - 从链表中删除列表元素。删除后重置列表元素指针。Steven Skiena 书中的代码
- python - 如何有效地向量化函数并从中检索值
- css - 我如何让这个框样式直接显示在 div 块上方而不是向右显示?
- r - 从字符串中提取第一个元素
- python - tkinter 中 lambda 函数的重要性是什么?
- java - 如何设置 Kafka acorss Multi DC
- postcss - 如何使用 JS API 将选项对象传递给 postcss 8 插件?