import pygame
import sys

# 初始化 Pygame
pygame.init()

# 游戏常量
SCREEN_WIDTH = 600
SCREEN_HEIGHT = 400
FPS = 60

# 颜色定义
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
BLUE = (0, 100, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
GRAY = (200, 200, 200)

# 设置屏幕
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("Pygame 定时器")
clock = pygame.time.Clock()
font_large = pygame.font.Font(None, 72)
font_small = pygame.font.Font(None, 36)

# 定时器类
class Timer:
    def __init__(self, duration=60, mode='countdown'):
        """
        duration: 定时时长（秒）
        mode: 'countdown' 倒计时 或 'countup' 正计时
        """
        self.duration = duration * 1000  # 转为毫秒
        self.mode = mode
        self.start_time = 0
        self.elapsed_time = 0
        self.paused = False
        self.finished = False
        self.running = False

    def start(self):
        self.start_time = pygame.time.get_ticks()
        self.elapsed_time = 0
        self.paused = False
        self.finished = False
        self.running = True

    def pause(self):
        if self.running and not self.paused:
            self.elapsed_time = pygame.time.get_ticks() - self.start_time
            self.paused = True

    def resume(self):
        if self.paused:
            self.start_time = pygame.time.get_ticks() - self.elapsed_time
            self.paused = False

    def reset(self):
        self.elapsed_time = 0
        self.paused = False
        self.finished = False
        self.running = False

    def update(self):
        if self.running and not self.paused:
            self.elapsed_time = pygame.time.get_ticks() - self.start_time
            if self.mode == 'countdown':
                if self.elapsed_time >= self.duration:
                    self.elapsed_time = self.duration
                    self.finished = True
                    self.running = False
            # 正计时无需结束判断

    def get_time_display(self):
        total_ms = self.elapsed_time
        if self.mode == 'countdown':
            total_ms = max(0, self.duration - self.elapsed_time)
        total_seconds = total_ms // 1000
        minutes = total_seconds // 60
        seconds = total_seconds % 60
        milliseconds = (total_ms % 1000) // 10
        return f"{minutes:02d}:{seconds:02d}:{milliseconds:02d}"

    def is_finished(self):
        return self.finished

# 按钮类
class Button:
    def __init__(self, x, y, width, height, text, color=BLUE):
        self.rect = pygame.Rect(x, y, width, height)
        self.text = text
        self.color = color
        self.hover_color = (min(color[0]+30, 255), min(color[1]+30, 255), min(color[2]+30, 255))

    def draw(self, surface):
        mouse_pos = pygame.mouse.get_pos()
        color = self.hover_color if self.rect.collidepoint(mouse_pos) else self.color
        pygame.draw.rect(surface, color, self.rect)
        pygame.draw.rect(surface, BLACK, self.rect, 2)
        text_surf = font_small.render(self.text, True, WHITE)
        text_rect = text_surf.get_rect(center=self.rect.center)
        surface.blit(text_surf, text_rect)

    def is_clicked(self, event):
        if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:
            return self.rect.collidepoint(event.pos)
        return False

# 主函数
def main():
    timer = Timer(duration=60, mode='countdown')  # 可改为 'countup'

    # 创建按钮
    btn_start = Button(50, 250, 100, 40, "开始")
    btn_pause = Button(170, 250, 100, 40, "暂停")
    btn_resume = Button(290, 250, 100, 40, "继续")
    btn_reset = Button(410, 250, 100, 40, "重置")

    running = True
    while running:
        clock.tick(FPS)
        screen.fill(WHITE)

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False

            if btn_start.is_clicked(event):
                timer.start()
            elif btn_pause.is_clicked(event):
                timer.pause()
            elif btn_resume.is_clicked(event):
                timer.resume()
            elif btn_reset.is_clicked(event):
                timer.reset()

        timer.update()

        # 显示时间
        time_text = font_large.render(timer.get_time_display(), True, BLACK)
        time_rect = time_text.get_rect(center=(SCREEN_WIDTH // 2, 150))
        screen.blit(time_text, time_rect)

        # 显示状态
        if timer.finished:
            status_text = font_small.render("时间到!", True, RED)
        elif timer.paused:
            status_text = font_small.render("已暂停", True, BLUE)
        elif timer.running:
            status_text = font_small.render("运行中", True, GREEN)
        else:
            status_text = font_small.render("未开始", True, GRAY)
        status_rect = status_text.get_rect(center=(SCREEN_WIDTH // 2, 210))
        screen.blit(status_text, status_rect)

        # 绘制按钮
        btn_start.draw(screen)
        btn_pause.draw(screen)
        btn_resume.draw(screen)
        btn_reset.draw(screen)

        pygame.display.flip()

    pygame.quit()
    sys.exit()

if __name__ == "__main__":
    main()
