Найти - Пользователи
Полная версия: Таймер в игре
Начало » Python для новичков » Таймер в игре
1
utyara3
Ребят, привет. создаю игру. Там надо нажимать квадраты во время. Делаю не через pygame а через tkinter.Мне надо как то поставить таймер. То есть если ты нажал на кнопку не вовремя то проиграл. Надо что бы время показывалось на экране. И например: 0:03, 0:02, 0:01 И если я нажал вовремя то таймер возобновляется. Помогите, пожалуйста. Вот код:
 from tkinter import *
import random
import time
t = 3
a = 0
colors = ["blue", "red", "pink", "yellow", "orange", "green"]
def Peremechenie():
    global a
    global rnd
    a = a + 1
    first = random.randint(100, 450)
    second = random.randint(100, 450)
    rnd = random.choice(colors)
    btn.place(height="70", width="70", x=first, y=second)
    btn.config(text=a, bg = rnd, fg = "black")
root = Tk()
root.title("Успей!")
root.geometry("700x500")
root.resizable(0,0)
btn = Button(text=a, command= Peremechenie, bg = "black", fg = "white")
lbl = Label(text="0:03")
btn.place(height="70", width="70", x=300, y=200)
root.mainloop()
Очень прошу о помощи.

PEHDOM
самый простой способ это использовать root.after(). Имейте в виду, что заданный период в методе root.after() не гарантирован для вызова функции по истечении указаного периода, если приложение занято, в результате того, что Tkinter является однопоточным.
пример :
 #
from tkinter import *
import random
import time
t = 3000
a = 0
colors = ["blue", "red", "pink", "yellow", "orange", "green"]
start_time = 0
def timer_start():
    global start_time
    start_time = time.perf_counter_ns()
    root.after(10, update_timer)
def ms_to_time(ms):
    total_minuts = ms/1000
    hours = int(total_minuts//60)
    minutes = round(total_minuts%60)
    return f'{hours}:{str(minutes).rjust(2, "0")}'
def update_timer():
    global t, start_time
    cur_time = time.perf_counter_ns()
    time_delta = (cur_time - start_time)// 1000000 #ms
    t = t - time_delta
    if t <= 0:
        root.destroy()
    start_time = cur_time
    lbl['text'] = ms_to_time(t)
    root.after(10, update_timer)
def Peremechenie():
    global a
    global rnd
    global t
    a = a + 1
    t = t + 3000
    first = random.randint(100, 450)
    second = random.randint(100, 450)
    rnd = random.choice(colors)
    btn.place(height="70", width="70", x=first, y=second)
    btn.config(text=a, bg = rnd, fg = "black")
root = Tk()
root.title("Успей!")
root.geometry("700x500")
root.resizable(0,0)
btn = Button(text=a, command= Peremechenie, bg = "black", fg = "white")
lbl = Label(text=ms_to_time(t))
lbl.pack()
btn.place(height="70", width="70", x=300, y=200)
root.after(10, timer_start)
root.mainloop()

как альтернатива считать время в отдельном процессе/потоке.
utyara3
PEHDOM
самый простой способ это использовать root.after(). Имейте в виду, что заданный период в методе root.after() не гарантирован для вызова функции по истечении указаного периода, если приложение занято, в результате того, что Tkinter является однопоточным.пример :
Чел, спасибо, ты гений!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB