import tkinter as tk
from tkinter import messagebox
import random

class ColorGame:
    def __init__(self):
        self.window = tk.Tk()
        self.window.title("颜色识别游戏")
        self.window.geometry("650x750")  # 增大窗口
        self.window.minsize(600, 700)     # 设置最小尺寸
        self.window.configure(bg='#2c3e50')
        
        # 游戏数据
        self.score = 0
        self.current_color = ""
        self.game_started = False
        
        # 颜色库
        self.colors = {
            "红色": "#FF0000",
            "绿色": "#00CC00", 
            "蓝色": "#0066FF",
            "黄色": "#FFD700",
            "紫色": "#9933FF",
            "橙色": "#FF8C00",
            "粉色": "#FF69B4",   # 增加颜色
            "青色": "#00CED1"     # 增加颜色
        }
        
        self.create_widgets()
        self.window.mainloop()
    
    def create_widgets(self):
        # 使用Canvas来确保滚动（如果需要）
        main_canvas = tk.Canvas(self.window, bg='#2c3e50', highlightthickness=0)
        main_canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
        
        scrollbar = tk.Scrollbar(self.window, orient=tk.VERTICAL, command=main_canvas.yview)
        scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
        main_canvas.configure(yscrollcommand=scrollbar.set)
        
        # 内容框架
        content_frame = tk.Frame(main_canvas, bg='#2c3e50')
        main_canvas.create_window((0, 0), window=content_frame, anchor=tk.NW)
        
        # 标题
        title = tk.Label(
            content_frame,
            text="🌈 颜色识别游戏 🌈",
            font=("Arial", 28, "bold"),
            bg="#2c3e50",
            fg="white"
        )
        title.pack(pady=20)
        
        # 得分边框
        score_frame = tk.LabelFrame(
            content_frame,
            text="当前得分",
            font=("Arial", 14),
            bg="#2c3e50",
            fg="white",
            padx=30,
            pady=10
        )
        score_frame.pack(pady=15)
        
        self.score_label = tk.Label(
            score_frame,
            text="0",
            font=("Arial", 40, "bold"),
            bg="#2c3e50",
            fg="#f1c40f"
        )
        self.score_label.pack()
        
        # 颜色显示区域
        self.color_display = tk.Label(
            content_frame,
            text="        ",
            font=("Arial", 40),
            bg="#95a5a6",
            width=20,
            height=4,
            relief="sunken",
            bd=5
        )
        self.color_display.pack(pady=30)
        
        # 问题提示
        self.question = tk.Label(
            content_frame,
            text="这是什么颜色？",
            font=("Arial", 18),
            bg="#2c3e50",
            fg="#ecf0f1"
        )
        self.question.pack(pady=15)
        
        # 按钮区域 - 使用pack并设置合适的尺寸
        button_frame = tk.Frame(content_frame, bg="#2c3e50")
        button_frame.pack(pady=30, fill=tk.BOTH, expand=True)
        
        # 创建所有按钮，使用pack(side=tk.TOP)确保都显示
        self.buttons = []
        color_names = list(self.colors.keys())
        
        # 按钮样式
        button_style = {
            "font": ("Arial", 16, "bold"),
            "width": 15,
            "height": 2,
            "bg": "#3498db",
            "fg": "white",
            "activebackground": "#2980b9",
            "cursor": "hand2",
            "relief": tk.RAISED,
            "bd": 3
        }
        
        # 创建按钮容器，每行2个
        for i in range(0, len(color_names), 2):
            row_frame = tk.Frame(button_frame, bg="#2c3e50")
            row_frame.pack(pady=10)
            
            # 第一个按钮
            btn1 = tk.Button(row_frame, text=color_names[i], **button_style)
            btn1.pack(side=tk.LEFT, padx=15)
            btn1.config(command=lambda c=color_names[i]: self.check_answer(c))
            self.buttons.append(btn1)
            
            # 第二个按钮（如果存在）
            if i+1 < len(color_names):
                btn2 = tk.Button(row_frame, text=color_names[i+1], **button_style)
                btn2.pack(side=tk.LEFT, padx=15)
                btn2.config(command=lambda c=color_names[i+1]: self.check_answer(c))
                self.buttons.append(btn2)
        
        # 控制按钮框架
        control_frame = tk.Frame(content_frame, bg="#2c3e50")
        control_frame.pack(pady=30)
        
        self.start_btn = tk.Button(
            control_frame,
            text="▶ 开始游戏",
            font=("Arial", 16, "bold"),
            bg="#27ae60",
            fg="white",
            padx=30,
            pady=12,
            cursor="hand2",
            relief=tk.RAISED,
            bd=3,
            command=self.start_game
        )
        self.start_btn.pack(side=tk.LEFT, padx=15)
        
        reset_btn = tk.Button(
            control_frame,
            text="🔄 重置游戏",
            font=("Arial", 16, "bold"),
            bg="#e74c3c",
            fg="white",
            padx=30,
            pady=12,
            cursor="hand2",
            relief=tk.RAISED,
            bd=3,
            command=self.reset_game
        )
        reset_btn.pack(side=tk.LEFT, padx=15)
        
        # 状态提示
        self.status = tk.Label(
            content_frame,
            text="⚡ 点击「开始游戏」开始 ⚡",
            font=("Arial", 14),
            bg="#2c3e50",
            fg="#f39c12"
        )
        self.status.pack(pady=20)
        
        # 更新滚动区域
        content_frame.update_idletasks()
        main_canvas.configure(scrollregion=main_canvas.bbox("all"))
        
        # 初始禁用颜色按钮
        self.set_buttons_state(False)
    
    def set_buttons_state(self, enabled):
        """设置按钮状态"""
        state = tk.NORMAL if enabled else tk.DISABLED
        for btn in self.buttons:
            btn.config(state=state)
    
    def start_game(self):
        """开始游戏"""
        self.game_started = True
        self.score = 0
        self.score_label.config(text="0")
        self.set_buttons_state(True)
        self.start_btn.config(state=tk.DISABLED, bg="#1e8449")
        self.status.config(text="🎮 游戏进行中！选择正确的颜色 🎮", fg="#2ecc71")
        self.next_round()
    
    def reset_game(self):
        """重置游戏"""
        self.game_started = False
        self.score = 0
        self.score_label.config(text="0")
        self.set_buttons_state(False)
        self.start_btn.config(state=tk.NORMAL, bg="#27ae60")
        self.color_display.config(bg="#95a5a6")
        self.status.config(text="⚡ 点击「开始游戏」开始 ⚡", fg="#f39c12")
        self.question.config(text="这是什么颜色？")
    
    def next_round(self):
        """下一题"""
        if not self.game_started:
            return
        
        # 随机选择颜色
        self.current_color = random.choice(list(self.colors.keys()))
        color_value = self.colors[self.current_color]
        self.color_display.config(bg=color_value)
        
        # 随机变换问题文字
        questions = [
            "这是什么颜色？",
            "请选择正确的颜色",
            "这个颜色是？",
            "哪个颜色匹配？",
            "颜色识别中..."
        ]
        self.question.config(text=random.choice(questions))
    
    def check_answer(self, selected):
        """检查答案"""
        if not self.game_started:
            messagebox.showwarning("提示", "请先点击「开始游戏」！")
            return
        
        if selected == self.current_color:
            # 正确
            self.score += 10
            self.score_label.config(text=str(self.score))
            self.status.config(text="✅ 正确！ +10分", fg="#2ecc71")
            self.window.after(1000, lambda: self.status.config(text="🎮 游戏进行中！选择正确的颜色 🎮", fg="#2ecc71") if self.game_started else None)
            
            # 短暂闪烁绿色
            original_bg = self.color_display.cget("bg")
            self.color_display.config(bg="#00FF00")
            self.window.after(300, lambda: self.color_display.config(bg=original_bg))
            
            self.next_round()
        else:
            # 错误
            self.score = max(0, self.score - 5)
            self.score_label.config(text=str(self.score))
            self.status.config(text=f"❌ 错误！正确答案是{self.current_color} -5分", fg="#e74c3c")
            self.window.after(1500, lambda: self.status.config(text="🎮 游戏进行中！选择正确的颜色 🎮", fg="#2ecc71") if self.game_started else None)
            
            # 短暂闪烁红色
            original_bg = self.color_display.cget("bg")
            self.color_display.config(bg="#FF0000")
            self.window.after(300, lambda: self.color_display.config(bg=original_bg))
            
            self.next_round()

# 运行游戏
if __name__ == "__main__":
    print("="*50)
    print("颜色识别游戏启动中...")
    print("窗口大小：650x750")
    print("如果按钮还是显示不全，请最大化窗口")
    print("="*50)
    game = ColorGame()