import pygame
import random
import time

pygame.init()

# ---------- 窗口 ----------
窗口宽, 窗口高 = 720, 400
屏幕 = pygame.display.set_mode((窗口宽, 窗口高))
pygame.display.set_caption("颜色对战：玩家 vs AI（抢答）")

# ---------- 字体 ----------
字体 = pygame.font.SysFont("simhei", 28)
小字体 = pygame.font.SysFont("simhei", 22)

# ---------- 颜色 ----------
白色 = (255, 255, 255)
黑色 = (0, 0, 0)
灰色 = (230, 230, 230)

红色 = (220, 50, 50)
绿色 = (50, 180, 80)
蓝色 = (50, 100, 220)
黄色 = (230, 200, 50)

颜色表 = {
    "红色": 红色,
    "绿色": 绿色,
    "蓝色": 蓝色,
    "黄色": 黄色
}

选项列表 = ["红色", "绿色", "蓝色", "黄色"]
选项键 = ["a", "b", "c", "d"]

# ---------- 游戏状态 ----------
当前颜色名 = random.choice(选项列表)
当前颜色值 = 颜色表[当前颜色名]

玩家得分 = 0
AI得分 = 0

抢答结束 = False
获胜方 = ""
AI思考结束时间 = 0
AI抢答 = False

时钟 = pygame.time.Clock()
运行 = True

# ---------- 主循环 ----------
while 运行:
    屏幕.fill(白色)

    for 事件 in pygame.event.get():
        if 事件.type == pygame.QUIT:
            运行 = False

        # 玩家抢答（键盘）
        if not 抢答结束 and 事件.type == pygame.KEYDOWN:
            if 事件.unicode in 选项键:
                选择 = 选项键.index(事件.unicode)
                if 选项列表[选择] == 当前颜色名:
                    获胜方 = "玩家"
                    玩家得分 += 1
                else:
                    获胜方 = "AI"
                    AI得分 += 1
                抢答结束 = True
                AI抢答 = False

        # 玩家抢答（鼠标）
        if not 抢答结束 and 事件.type == pygame.MOUSEBUTTONDOWN:
            鼠标x, 鼠标y = pygame.mouse.get_pos()
            for i, 按钮 in enumerate(选项按钮列表):
                if 按钮.collidepoint(鼠标x, 鼠标y):
                    if 选项列表[i] == 当前颜色名:
                        获胜方 = "玩家"
                        玩家得分 += 1
                    else:
                        获胜方 = "AI"
                        AI得分 += 1
                    抢答结束 = True
                    AI抢答 = False

    # ---------- AI 抢答逻辑 ----------
    if not 抢答结束 and AI思考结束时间 == 0:
        # AI 1～2 秒后抢答
        AI思考结束时间 = time.time() + random.uniform(1.0, 2.0)
        AI抢答 = True

    if not 抢答结束 and AI思考结束时间 != 0 and time.time() >= AI思考结束时间:
        # AI 有 80% 概率答对
        if random.random() < 0.8:
            获胜方 = "AI"
            AI得分 += 1
        else:
            获胜方 = "玩家"
            玩家得分 += 1
        抢答结束 = True

    # ---------- 绘制 ----------
    # 当前颜色块
    屏幕.blit(字体.render("请抢答：这是什么颜色？", True, 黑色), (200, 30))
    颜色块 = pygame.Rect(260, 80, 200, 120)
    pygame.draw.rect(屏幕, 当前颜色值, 颜色块)
    pygame.draw.rect(屏幕, 黑色, 颜色块, 3)

    # 选项按钮
    选项按钮列表 = []
    for i, 名字 in enumerate(选项列表):
        按钮 = pygame.Rect(120 + i * 140, 240, 120, 50)
        选项按钮列表.append(按钮)
        pygame.draw.rect(屏幕, 灰色, 按钮)
        pygame.draw.rect(屏幕, 黑色, 按钮, 2)
        屏幕.blit(字体.render(f"{选项键[i].upper()}.{名字}", True, 黑色),
                  (按钮.x + 10, 按钮.y + 12))

    # 抢答结果
    if 抢答结束:
        屏幕.blit(字体.render(
            f"抢答结果：{获胜方} 获胜！正确答案：{当前颜色名}",
            True, 红色 if 获胜方 == "AI" else (0, 120, 0)), (120, 310))

        # 1.5 秒后下一题
        pygame.time.delay(1500)
        当前颜色名 = random.choice(选项列表)
        当前颜色值 = 颜色表[当前颜色名]
        抢答结束 = False
        获胜方 = ""
        AI思考结束时间 = 0
        AI抢答 = False

    # 分数
    屏幕.blit(小字体.render(f"玩家得分：{玩家得分}", True, 蓝色), (30, 10))
    屏幕.blit(小字体.render(f"AI 得分：{AI得分}", True, 红色), (600, 10))

    if AI抢答 and not 抢答结束:
        屏幕.blit(小字体.render("AI 正在抢答...", True, 红色), (600, 35))

    pygame.display.flip()
    时钟.tick(60)

pygame.quit()