import tkinter as tk
from tkinter import messagebox
import random
import time

class MathPracticeApp:
    def __init__(self, root):
        self.root = root
        self.root.title("数学题练习器")
        self.root.geometry("450x500")
        self.root.resizable(False, False)

        # 游戏状态变量
        self.score = 0
        self.total = 0
        self.correct_answer = 0
        self.start_time = 0
        self.game_active = False
        self.wrong_questions = []

        # 界面样式配置
        self.font_large = ("Microsoft YaHei", 24, "bold")
        self.font_medium = ("Microsoft YaHei", 14)
        self.font_small = ("Microsoft YaHei", 10)

        self.setup_ui()

    def setup_ui(self):
        # 顶部：分数与时间显示
        self.info_frame = tk.Frame(self.root)
        self.info_frame.pack(pady=20)
        self.score_label = tk.Label(self.info_frame, text="得分: 0", font=self.font_medium)
        self.score_label.pack(side=tk.LEFT, padx=20)
        self.time_label = tk.Label(self.info_frame, text="用时: 0s", font=self.font_medium)
        self.time_label.pack(side=tk.RIGHT, padx=20)

        # 中部：题目显示
        self.question_label = tk.Label(self.root, text="点击开始按钮答题", font=self.font_large, wraplength=400)
        self.question_label.pack(pady=40)

        # 输入框
        self.entry = tk.Entry(self.root, font=self.font_large, justify="center", width=10)
        self.entry.pack(pady=10)
        self.entry.bind("<Return>", lambda event: self.check_answer())  # 绑定回车键

        # 底部：按钮区
        self.btn_frame = tk.Frame(self.root)
        self.btn_frame.pack(pady=30)
        self.start_btn = tk.Button(self.btn_frame, text="开始练习", font=self.font_medium, command=self.start_game, width=10)
        self.start_btn.pack(side=tk.LEFT, padx=10)
        self.submit_btn = tk.Button(self.btn_frame, text="提交答案", font=self.font_medium, command=self.check_answer, width=10, state=tk.DISABLED)
        self.submit_btn.pack(side=tk.RIGHT, padx=10)

        # 错题提示
        self.feedback_label = tk.Label(self.root, text="", font=self.font_small, fg="red")
        self.feedback_label.pack(pady=10)

    def start_game(self):
        self.score = 0
        self.total = 0
        self.wrong_questions = []
        self.start_time = time.time()
        self.game_active = True
        
        self.score_label.config(text="得分: 0")
        self.feedback_label.config(text="")
        self.start_btn.config(state=tk.DISABLED)
        self.submit_btn.config(state=tk.NORMAL)
        self.entry.config(state=tk.NORMAL)
        self.entry.delete(0, tk.END)
        self.entry.focus_set()

        self.generate_question()
        self.update_timer()

    def generate_question(self):
        # 随机生成 100 以内的加减法
        num1 = random.randint(1, 99)
        num2 = random.randint(1, 99)
        op = random.choice(["+", "-"])
        
        # 保证减法结果不为负数
        if op == "-" and num1 < num2:
            num1, num2 = num2, num1
            
        self.question_label.config(text=f"{num1} {op} {num2} = ?")
        self.correct_answer = eval(f"{num1} {op} {num2}")
        self.current_question_str = f"{num1} {op} {num2}"

    def check_answer(self):
        if not self.game_active: return
        
        user_input = self.entry.get().strip()
        if not user_input.isdigit():
            self.feedback_label.config(text="请输入有效的数字！")
            return

        self.total += 1
        user_ans = int(user_input)

        if user_ans == self.correct_answer:
            self.score += 10
            self.feedback_label.config(text="回答正确！继续加油！", fg="green")
        else:
            self.feedback_label.config(text=f"回答错误！正确答案是 {self.correct_answer}", fg="red")
            self.wrong_questions.append(f"{self.current_question_str} = {self.correct_answer} (你答: {user_ans})")

        self.score_label.config(text=f"得分: {self.score}")
        self.entry.delete(0, tk.END)
        self.entry.focus_set()
        self.generate_question()

    def update_timer(self):
        if self.game_active:
            elapsed = int(time.time() - self.start_time)
            self.time_label.config(text=f"用时: {elapsed}s")
            self.root.after(1000, self.update_timer)  # 每秒刷新一次

    def stop_game(self, reason):
        self.game_active = False
        self.start_btn.config(state=tk.NORMAL)
        self.submit_btn.config(state=tk.DISABLED)
        self.entry.config(state=tk.DISABLED)
        
        elapsed = int(time.time() - self.start_time)
        msg = f"练习结束！\n总用时: {elapsed}秒\n答对题数: {self.score // 10}/{self.total}"
        
        if self.wrong_questions:
            msg += "\n\n错题回顾:\n" + "\n".join(self.wrong_questions[:5])  # 最多显示5条
            
        messagebox.showinfo(reason, msg)

# 启动应用
if __name__ == "__main__":
    root = tk.Tk()
    app = MathPracticeApp(root)
    root.mainloop()