首页 > 解决方案 > 如何在我的 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()

标签: pythonpython-3.x

解决方案


不要给每个圈子一个计时器。相反,有一个整体计时器。当一个圈子被创建时,存储它的创建时间,也许还有其他信息,比如它被删除的时间。在计时器的每个滴答声中,搜索圈子并删除时间到的圈子。您可以通过将循环销毁时间信息存储在优先级队列中来加快搜索速度(请参阅heapq模块)。

这种使用一个计时器并在每个时钟节拍上搜索列表的技术是 GUI 编程的标准。


推荐阅读