import tkinter as tk
import random
import time

# 准备练习词库（可以根据需要扩充）
WORDS = [
    "python", "programming", "developer", "computer", "algorithm", 
    "interface", "keyboard", "language", "variable", "function",
    "database", "network", "security", "software", "application",
    "challenge", "learning", "practice", "experience", "success"
]

class TypingTutor:
    def __init__(self, root):
        self.root = root
        self.root.title("Python 打字速度测试器")
        self.root.geometry("700x450")
        
        # 变量初始化
        self.target_text = ""
        self.start_time = None
        self.running = False
        
        self.setup_ui()
        self.reset_game()

    def setup_ui(self):
        # 标题
        tk.Label(self.root, text="打字练习软件", font=("Arial", 24, "bold")).pack(pady=20)

        # 待输入文本显示区
        self.text_display = tk.Label(
            self.root, text="", font=("Consolas", 18), 
            wraplength=600, fg="#555"
        )
        self.text_display.pack(pady=20)

        # 输入框
        self.entry = tk.Entry(self.root, font=("Consolas", 16), width=40)
        self.entry.pack(pady=10)
        self.entry.bind("<KeyRelease>", self.check_typing) # 绑定按键释放事件

        # 实时数据统计
        stats_frame = tk.Frame(self.root)
        stats_frame.pack(pady=20)

        self.wpm_label = tk.Label(stats_frame, text="速度: 0 WPM", font=("Arial", 12))
        self.wpm_label.pack(side=tk.LEFT, padx=20)

        self.acc_label = tk.Label(stats_frame, text="准确率: 100%", font=("Arial", 12))
        self.acc_label.pack(side=tk.LEFT, padx=20)

        # 按钮
        self.btn_reset = tk.Button(self.root, text="重新开始", command=self.reset_game, font=("Arial", 12))
        self.btn_reset.pack(pady=10)

        # 提示信息
        self.info_label = tk.Label(self.root, text="在输入框内输入上方显示的单词，按空格或回车继续", fg="gray")
        self.info_label.pack()

    def reset_game(self):
        """重置所有状态"""
        # 随机抽取10个单词组成练习句子
        self.target_text = " ".join(random.sample(WORDS, 8))
        self.text_display.config(text=self.target_text, fg="#555")
        self.entry.delete(0, tk.END)
        self.entry.config(state=tk.NORMAL)
        self.entry.focus()
        
        self.start_time = None
        self.running = False
        self.wpm_label.config(text="速度: 0 WPM")
        self.acc_label.config(text="准确率: 100%")

    def check_typing(self, event):
        """核心逻辑：检查输入并计算数据"""
        if not self.running:
            self.start_time = time.time()
            self.running = True

        user_input = self.entry.get()
        
        # 1. 实时颜色反馈
        # 如果当前输入的字符与目标文本开头不匹配，变红
        if not self.target_text.startswith(user_input):
            self.entry.config(fg="red")
        else:
            self.entry.config(fg="black")

        # 2. 计算准确率
        correct_chars = 0
        for i in range(min(len(user_input), len(self.target_text))):
            if user_input[i] == self.target_text[i]:
                correct_chars += 1
        
        accuracy = (correct_chars / len(user_input) * 100) if len(user_input) > 0 else 100
        self.acc_label.config(text=f"准确率: {int(accuracy)}%")

        # 3. 计算 WPM (Words Per Minute)
        # 公式：(正确字符数 / 5) / 分钟
        elapsed_time = (time.time() - self.start_time) / 60
        if elapsed_time > 0:
            wpm = (correct_chars / 5) / elapsed_time
            self.wpm_label.config(text=f"速度: {int(wpm)} WPM")

        # 4. 检查是否完成
        if user_input == self.target_text:
            self.running = False
            self.entry.config(state=tk.DISABLED)
            self.text_display.config(fg="green", text="太棒了！挑战完成！")

if __name__ == "__main__":
    root = tk.Tk()
    app = TypingTutor(root)
    root.mainloop()