如何在我的python点击游戏中放置一个计时器,让圆圈消失?

时间:2018-06-06 11:10:10

标签: python python-3.x

我试图创建一个鼠标精确度游戏,在屏幕上弹出不同大小的各种圈子,你的工作就是在它们在3秒内消失并且在计时器用完之前点击它们20秒。

我尝试使用导入时间与倒计时(),但它无法正常工作。我也不知道如何让圈子拥有它自己的计时器并让它们消失。我该怎么做呢?这就是我到目前为止所做的:

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()

1 个答案:

答案 0 :(得分:1)

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

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