import pygame
import random
import json
import os
import sys
from datetime import datetime

# 初始化pygame
pygame.init()

# 设置窗口尺寸
WIDTH, HEIGHT = 900, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("英语背诵小程序")

# 颜色定义
BACKGROUND = (240, 245, 255)  # 浅蓝色背景
PRIMARY = (70, 130, 180)      # 主色 - 钢蓝色
SECONDARY = (100, 149, 237)   # 辅色 - 矢车菊蓝
ACCENT = (255, 140, 0)        # 强调色 - 深橙色
TEXT = (50, 50, 50)           # 文本颜色
LIGHT_TEXT = (100, 100, 100)  # 浅文本颜色
WHITE = (255, 255, 255)       # 白色
GREEN = (50, 205, 50)         # 绿色 - 正确
RED = (220, 20, 60)           # 红色 - 错误
LIGHT_GREEN = (144, 238, 144) # 浅绿色
LIGHT_RED = (255, 182, 193)   # 浅红色
BUTTON_HOVER = (30, 144, 255) # 按钮悬停色

# 字体设置
title_font = pygame.font.SysFont(None, 48)
heading_font = pygame.font.SysFont(None, 36)
text_font = pygame.font.SysFont(None, 28)
small_font = pygame.font.SysFont(None, 24)

# 单词数据
class Word:
    def __init__(self, english, chinese, example=""):
        self.english = english
        self.chinese = chinese
        self.example = example
        self.mastery_level = 0  # 掌握程度 0-5
        self.last_reviewed = None
        self.review_count = 0
        self.correct_count = 0
        self.wrong_count = 0
    
    def to_dict(self):
        return {
            "english": self.english,
            "chinese": self.chinese,
            "example": self.example,
            "mastery_level": self.mastery_level,
            "last_reviewed": self.last_reviewed,
            "review_count": self.review_count,
            "correct_count": self.correct_count,
            "wrong_count": self.wrong_count
        }
    
    @classmethod
    def from_dict(cls, data):
        word = cls(data["english"], data["chinese"], data.get("example", ""))
        word.mastery_level = data.get("mastery_level", 0)
        word.last_reviewed = data.get("last_reviewed")
        word.review_count = data.get("review_count", 0)
        word.correct_count = data.get("correct_count", 0)
        word.wrong_count = data.get("wrong_count", 0)
        return word

# 默认单词库
default_words = [
    Word("abandon", "放弃，遗弃", "He decided to abandon his car and continue on foot."),
    Word("abundant", "丰富的，充裕的", "The region has abundant natural resources."),
    Word("accommodate", "容纳，提供住宿", "The hotel can accommodate up to 300 guests."),
    Word("accomplish", "完成，实现", "She accomplished all her goals before the deadline."),
    Word("accurate", "准确的，精确的", "The witness gave an accurate description of the suspect."),
    Word("acknowledge", "承认，确认", "He acknowledged that he had made a mistake."),
    Word("acquire", "获得，取得", "She acquired fluency in French after living in Paris for a year."),
    Word("adapt", "适应，调整", "Animals must adapt to their environment to survive."),
    Word("adequate", "足够的，适当的", "The food supplies are adequate for two weeks."),
    Word("adjacent", "邻近的，毗连的", "Our house is adjacent to the park."),
    Word("adjust", "调整，适应", "It took him a while to adjust to the new job."),
    Word("advantage", "优势，好处", "His height gives him an advantage in basketball."),
    Word("advocate", "提倡，主张", "She advocates for equal rights for all citizens."),
    Word("aesthetic", "美学的，审美的", "The building's aesthetic appeal attracts many tourists."),
    Word("affect", "影响", "The bad weather affected our travel plans."),
    Word("aggregate", "总计，合计", "The aggregate amount of donations exceeded expectations."),
    Word("allocate", "分配，分派", "The government will allocate funds for education."),
    Word("alternative", "可供选择的，替代的", "We need to find an alternative solution."),
    Word("ambiguous", "模棱两可的，不明确的", "His ambiguous answer confused everyone."),
    Word("ambitious", "有雄心的，有野心的", "She has ambitious plans for her career.")
]

# 学习进度管理
class LearningProgress:
    def __init__(self):
        self.words = []
        self.load_words()
        self.current_mode = "learn"  # 模式: learn, test, review
        self.current_word_index = 0
        self.test_words = []
        self.test_score = 0
        self.test_total = 0
        self.show_answer = False
        self.test_options = []
        self.selected_option = -1
        self.message = ""
        self.message_timer = 0
        
    def load_words(self):
        # 尝试从文件加载单词
        if os.path.exists("english_words.json"):
            try:
                with open("english_words.json", "r", encoding="utf-8") as f:
                    data = json.load(f)
                    self.words = [Word.from_dict(item) for item in data]
                print(f"从文件加载了 {len(self.words)} 个单词")
            except:
                self.words = default_words.copy()
                print("加载文件失败，使用默认单词")
        else:
            self.words = default_words.copy()
            print("使用默认单词库")
            
    def save_words(self):
        data = [word.to_dict() for word in self.words]
        with open("english_words.json", "w", encoding="utf-8") as f:
            json.dump(data, f, ensure_ascii=False, indent=2)
    
    def get_current_word(self):
        if self.current_mode == "learn":
            if 0 <= self.current_word_index < len(self.words):
                return self.words[self.current_word_index]
        elif self.current_mode == "test" and self.test_words:
            if 0 <= self.current_word_index < len(self.test_words):
                return self.test_words[self.current_word_index]
        return None
    
    def start_learning(self):
        self.current_mode = "learn"
        self.current_word_index = 0
        self.show_answer = False
        self.message = ""
    
    def start_test(self, num_questions=10):
        self.current_mode = "test"
        self.test_score = 0
        self.test_total = min(num_questions, len(self.words))
        
        # 选择测试单词（优先选择掌握程度低的）
        sorted_words = sorted(self.words, key=lambda w: w.mastery_level)
        self.test_words = sorted_words[:self.test_total]
        random.shuffle(self.test_words)
        
        self.current_word_index = 0
        self.show_answer = False
        self.selected_option = -1
        self.generate_test_options()
        self.message = f"测试开始！共{self.test_total}题"
        self.message_timer = 120
    
    def start_review(self):
        self.current_mode = "review"
        self.current_word_index = 0
        self.show_answer = False
        self.message = "复习模式：查看所有单词"
    
    def generate_test_options(self):
        current_word = self.get_current_word()
        if not current_word:
            return
        
        # 创建一个包含正确答案的选项列表
        self.test_options = [current_word.chinese]
        
        # 添加3个错误选项
        other_words = [w for w in self.words if w != current_word]
        if len(other_words) >= 3:
            wrong_options = random.sample(other_words, 3)
            self.test_options.extend([w.chinese for w in wrong_options])
        else:
            # 如果没有足够的单词，添加一些通用选项
            self.test_options.extend(["重要的", "困难的", "有趣的"])
        
        # 打乱选项顺序
        random.shuffle(self.test_options)
    
    def next_word(self):
        if self.current_mode == "learn":
            self.current_word_index = (self.current_word_index + 1) % len(self.words)
            self.show_answer = False
        elif self.current_mode == "test":
            if self.current_word_index < len(self.test_words) - 1:
                self.current_word_index += 1
                self.show_answer = False
                self.selected_option = -1
                self.generate_test_options()
            else:
                self.end_test()
    
    def prev_word(self):
        if self.current_mode == "learn":
            self.current_word_index = (self.current_word_index - 1) % len(self.words)
            self.show_answer = False
        elif self.current_mode == "test":
            if self.current_word_index > 0:
                self.current_word_index -= 1
                self.show_answer = False
                self.selected_option = -1
                self.generate_test_options()
    
    def mark_correct(self):
        word = self.get_current_word()
        if word:
            word.mastery_level = min(5, word.mastery_level + 1)
            word.last_reviewed = datetime.now().strftime("%Y-%m-%d %H:%M")
            word.review_count += 1
            word.correct_count += 1
            
            if self.current_mode == "learn":
                self.message = "正确！记忆程度+1"
                self.message_timer = 60
                self.next_word()
            elif self.current_mode == "test":
                self.test_score += 1
                self.message = "正确！"
                self.message_timer = 30
                # 测试模式下，不自动跳到下一题
    
    def mark_wrong(self):
        word = self.get_current_word()
        if word:
            word.mastery_level = max(0, word.mastery_level - 1)
            word.last_reviewed = datetime.now().strftime("%Y-%m-%d %H:%M")
            word.review_count += 1
            word.wrong_count += 1
            
            if self.current_mode == "learn":
                self.message = "错误！记忆程度-1"
                self.message_timer = 60
            elif self.current_mode == "test":
                self.message = "错误！"
                self.message_timer = 30
    
    def end_test(self):
        self.message = f"测试结束！得分: {self.test_score}/{self.test_total}"
        self.message_timer = 180
        self.save_words()
    
    def select_option(self, index):
        if 0 <= index < len(self.test_options):
            self.selected_option = index
            self.show_answer = True
            
            current_word = self.get_current_word()
            if current_word and self.test_options[index] == current_word.chinese:
                self.mark_correct()
            else:
                self.mark_wrong()
    
    def update(self):
        if self.message_timer > 0:
            self.message_timer -= 1
        else:
            self.message = ""

# 创建按钮类
class Button:
    def __init__(self, x, y, width, height, text, color=PRIMARY, hover_color=BUTTON_HOVER):
        self.rect = pygame.Rect(x, y, width, height)
        self.text = text
        self.color = color
        self.hover_color = hover_color
        self.current_color = color
        self.is_hovered = False
    
    def draw(self, surface):
        # 绘制按钮
        pygame.draw.rect(surface, self.current_color, self.rect, border_radius=8)
        pygame.draw.rect(surface, WHITE, self.rect, 2, border_radius=8)
        
        # 绘制文本
        text_surf = text_font.render(self.text, True, WHITE)
        text_rect = text_surf.get_rect(center=self.rect.center)
        surface.blit(text_surf, text_rect)
    
    def update(self, mouse_pos):
        self.is_hovered = self.rect.collidepoint(mouse_pos)
        self.current_color = self.hover_color if self.is_hovered else self.color
        return self.is_hovered
    
    def is_clicked(self, mouse_pos, mouse_clicked):
        return self.rect.collidepoint(mouse_pos) and mouse_clicked

# 创建进度条
def draw_progress_bar(surface, x, y, width, height, progress, color=PRIMARY, bg_color=(200, 200, 200)):
    # 绘制背景
    pygame.draw.rect(surface, bg_color, (x, y, width, height), border_radius=4)
    
    # 绘制进度
    if progress > 0:
        progress_width = int(width * progress)
        pygame.draw.rect(surface, color, (x, y, progress_width, height), border_radius=4)
    
    # 绘制边框
    pygame.draw.rect(surface, (150, 150, 150), (x, y, width, height), 1, border_radius=4)

# 创建应用程序
class EnglishLearningApp:
    def __init__(self):
        self.screen = screen
        self.clock = pygame.time.Clock()
        self.running = True
        self.progress = LearningProgress()
        
        # 创建按钮
        button_width, button_height = 150, 40
        button_spacing = 20
        
        # 模式选择按钮
        self.learn_button = Button(50, 100, button_width, button_height, "学习模式")
        self.test_button = Button(220, 100, button_width, button_height, "测试模式")
        self.review_button = Button(390, 100, button_width, button_height, "复习模式")
        
        # 导航按钮
        self.prev_button = Button(50, 500, 100, 40, "上一个")
        self.next_button = Button(160, 500, 100, 40, "下一个")
        self.show_button = Button(270, 500, 100, 40, "显示答案")
        
        # 掌握程度按钮
        self.correct_button = Button(380, 500, 100, 40, "认识", GREEN)
        self.wrong_button = Button(490, 500, 100, 40, "不认识", RED)
        
        # 测试选项按钮
        self.option_buttons = []
        for i in range(4):
            btn = Button(50, 300 + i * 60, 800, 50, f"选项 {i+1}")
            self.option_buttons.append(btn)
        
        # 返回主菜单按钮
        self.menu_button = Button(600, 500, 150, 40, "返回主菜单")
        
        # 测试设置按钮
        self.test_5_button = Button(560, 100, 80, 40, "5题")
        self.test_10_button = Button(650, 100, 80, 40, "10题")
        self.test_20_button = Button(740, 100, 80, 40, "20题")
    
    def draw_learning_mode(self):
        current_word = self.progress.get_current_word()
        
        # 绘制单词卡片
        pygame.draw.rect(self.screen, WHITE, (50, 150, 800, 200), border_radius=10)
        pygame.draw.rect(self.screen, PRIMARY, (50, 150, 800, 200), 3, border_radius=10)
        
        if current_word:
            # 显示英文单词
            word_text = heading_font.render(current_word.english, True, PRIMARY)
            self.screen.blit(word_text, (WIDTH//2 - word_text.get_width()//2, 180))
            
            # 显示音标（模拟）
            phonetic_text = small_font.render(f"/{current_word.english.lower()}/", True, LIGHT_TEXT)
            self.screen.blit(phonetic_text, (WIDTH//2 - phonetic_text.get_width()//2, 230))
            
            # 如果显示了答案，显示中文释义和例句
            if self.progress.show_answer:
                # 显示中文释义
                meaning_text = text_font.render(f"释义: {current_word.chinese}", True, TEXT)
                self.screen.blit(meaning_text, (WIDTH//2 - meaning_text.get_width()//2, 280))
                
                # 显示例句
                if current_word.example:
                    example_text = small_font.render(f"例句: {current_word.example}", True, LIGHT_TEXT)
                    # 处理长文本换行
                    words = current_word.example.split()
                    lines = []
                    current_line = ""
                    for word in words:
                        test_line = current_line + word + " "
                        if small_font.size(test_line)[0] < 700:
                            current_line = test_line
                        else:
                            lines.append(current_line)
                            current_line = word + " "
                    if current_line:
                        lines.append(current_line)
                    
                    for i, line in enumerate(lines):
                        line_surf = small_font.render(line, True, LIGHT_TEXT)
                        self.screen.blit(line_surf, (WIDTH//2 - line_surf.get_width()//2, 320 + i*25))
            else:
                # 提示点击显示答案
                hint_text = text_font.render("点击'显示答案'查看中文释义", True, ACCENT)
                self.screen.blit(hint_text, (WIDTH//2 - hint_text.get_width()//2, 320))
            
            # 显示掌握程度
            mastery_text = text_font.render(f"掌握程度: {current_word.mastery_level}/5", True, TEXT)
            self.screen.blit(mastery_text, (60, 370))
            
            # 绘制掌握程度进度条
            draw_progress_bar(self.screen, 180, 370, 200, 20, current_word.mastery_level/5)
            
            # 显示复习次数
            review_text = small_font.render(f"复习次数: {current_word.review_count}", True, LIGHT_TEXT)
            self.screen.blit(review_text, (60, 400))
            
            # 显示正确率
            total_attempts = current_word.correct_count + current_word.wrong_count
            if total_attempts > 0:
                accuracy = current_word.correct_count / total_attempts * 100
                accuracy_text = small_font.render(f"正确率: {accuracy:.1f}%", True, LIGHT_TEXT)
                self.screen.blit(accuracy_text, (60, 420))
            
            # 显示上次复习时间
            if current_word.last_reviewed:
                last_review_text = small_font.render(f"上次复习: {current_word.last_reviewed}", True, LIGHT_TEXT)
                self.screen.blit(last_review_text, (400, 400))
    
    def draw_test_mode(self):
        if not self.progress.test_words:
            return
        
        current_word = self.progress.get_current_word()
        
        if current_word:
            # 显示测试进度
            progress_text = text_font.render(f"题目: {self.progress.current_word_index + 1}/{len(self.progress.test_words)}", True, TEXT)
            self.screen.blit(progress_text, (WIDTH//2 - progress_text.get_width()//2, 150))
            
            # 显示当前分数
            score_text = text_font.render(f"当前得分: {self.progress.test_score}", True, TEXT)
            self.screen.blit(score_text, (700, 150))
            
            # 绘制问题卡片
            pygame.draw.rect(self.screen, WHITE, (50, 180, 800, 100), border_radius=10)
            pygame.draw.rect(self.screen, PRIMARY, (50, 180, 800, 100), 3, border_radius=10)
            
            # 显示英文单词
            word_text = heading_font.render(current_word.english, True, PRIMARY)
            self.screen.blit(word_text, (WIDTH//2 - word_text.get_width()//2, 210))
            
            # 显示选项
            for i, button in enumerate(self.option_buttons):
                if i < len(self.progress.test_options):
                    button.text = f"{i+1}. {self.progress.test_options[i]}"
                    
                    # 如果已经选择了答案，高亮显示正确/错误选项
                    if self.progress.show_answer:
                        if self.progress.test_options[i] == current_word.chinese:
                            button.color = GREEN
                        elif i == self.progress.selected_option and self.progress.test_options[i] != current_word.chinese:
                            button.color = RED
                        else:
                            button.color = PRIMARY
                    else:
                        button.color = PRIMARY
                
                button.draw(self.screen)
    
    def draw_review_mode(self):
        # 显示所有单词
        start_y = 150
        words_per_page = 10
        start_index = (self.progress.current_word_index // words_per_page) * words_per_page
        
        # 显示页码
        page_num = start_index // words_per_page + 1
        total_pages = (len(self.progress.words) + words_per_page - 1) // words_per_page
        page_text = text_font.render(f"第 {page_num} 页 / 共 {total_pages} 页", True, TEXT)
        self.screen.blit(page_text, (WIDTH//2 - page_text.get_width()//2, 120))
        
        for i in range(words_per_page):
            idx = start_index + i
            if idx >= len(self.progress.words):
                break
                
            word = self.progress.words[idx]
            y_pos = start_y + i * 40
            
            # 交替行背景色
            bg_color = WHITE if i % 2 == 0 else (245, 245, 255)
            pygame.draw.rect(self.screen, bg_color, (50, y_pos, 800, 40))
            
            # 绘制单词信息
            english_text = text_font.render(word.english, True, TEXT)
            self.screen.blit(english_text, (60, y_pos + 10))
            
            chinese_text = text_font.render(word.chinese, True, LIGHT_TEXT)
            self.screen.blit(chinese_text, (250, y_pos + 10))
            
            # 掌握程度
            mastery_color = RED if word.mastery_level <= 1 else ACCENT if word.mastery_level <= 3 else GREEN
            mastery_text = text_font.render(f"掌握: {word.mastery_level}/5", True, mastery_color)
            self.screen.blit(mastery_text, (500, y_pos + 10))
            
            # 复习次数
            review_text = small_font.render(f"复习: {word.review_count}次", True, LIGHT_TEXT)
            self.screen.blit(review_text, (600, y_pos + 10))
            
            # 正确率
            total_attempts = word.correct_count + word.wrong_count
            if total_attempts > 0:
                accuracy = word.correct_count / total_attempts * 100
                accuracy_text = small_font.render(f"正确率: {accuracy:.1f}%", True, LIGHT_TEXT)
                self.screen.blit(accuracy_text, (680, y_pos + 10))
    
    def draw_stats(self):
        # 计算统计数据
        total_words = len(self.progress.words)
        mastered_words = sum(1 for w in self.progress.words if w.mastery_level >= 4)
        need_review = sum(1 for w in self.progress.words if w.mastery_level <= 2)
        
        # 绘制统计区域
        pygame.draw.rect(self.screen, WHITE, (50, 40, 800, 50), border_radius=8)
        pygame.draw.rect(self.screen, PRIMARY, (50, 40, 800, 50), 2, border_radius=8)
        
        # 显示统计信息
        stats_text = text_font.render(f"单词总数: {total_words}  |  已掌握: {mastered_words}  |  需复习: {need_review}", True, TEXT)
        self.screen.blit(stats_text, (WIDTH//2 - stats_text.get_width()//2, 60))
    
    def draw_message(self):
        if self.progress.message:
            # 绘制消息框
            message_bg = pygame.Rect(WIDTH//2 - 200, 20, 400, 40)
            pygame.draw.rect(self.screen, (255, 255, 200), message_bg, border_radius=5)
            pygame.draw.rect(self.screen, ACCENT, message_bg, 2, border_radius=5)
            
            message_text = text_font.render(self.progress.message, True, TEXT)
            self.screen.blit(message_text, (WIDTH//2 - message_text.get_width()//2, 30))
    
    def run(self):
        while self.running:
            mouse_pos = pygame.mouse.get_pos()
            mouse_clicked = False
            
            # 处理事件
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    self.running = False
                    self.progress.save_words()
                elif event.type == pygame.MOUSEBUTTONDOWN:
                    mouse_clicked = True
                elif event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_ESCAPE:
                        self.running = False
                        self.progress.save_words()
                    elif event.key == pygame.K_RIGHT or event.key == pygame.K_SPACE:
                        self.progress.next_word()
                    elif event.key == pygame.K_LEFT:
                        self.progress.prev_word()
                    elif event.key == pygame.K_s:
                        self.progress.show_answer = not self.progress.show_answer
                    elif event.key == pygame.K_c and self.progress.current_mode == "learn":
                        self.progress.mark_correct()
                    elif event.key == pygame.K_w and self.progress.current_mode == "learn":
                        self.progress.mark_wrong()
            
            # 更新进度
            self.progress.update()
            
            # 绘制背景
            self.screen.fill(BACKGROUND)
            
            # 绘制标题
            title_text = title_font.render("英语背诵小程序", True, PRIMARY)
            self.screen.blit(title_text, (WIDTH//2 - title_text.get_width()//2, 10))
            
            # 绘制统计信息
            self.draw_stats()
            
            # 更新按钮状态
            self.learn_button.update(mouse_pos)
            self.test_button.update(mouse_pos)
            self.review_button.update(mouse_pos)
            self.prev_button.update(mouse_pos)
            self.next_button.update(mouse_pos)
            self.show_button.update(mouse_pos)
            self.correct_button.update(mouse_pos)
            self.wrong_button.update(mouse_pos)
            self.menu_button.update(mouse_pos)
            self.test_5_button.update(mouse_pos)
            self.test_10_button.update(mouse_pos)
            self.test_20_button.update(mouse_pos)
            
            # 绘制当前模式的内容
            if self.progress.current_mode == "learn":
                self.draw_learning_mode()
            elif self.progress.current_mode == "test":
                self.draw_test_mode()
            elif self.progress.current_mode == "review":
                self.draw_review_mode()
            
            # 绘制按钮
            self.learn_button.draw(self.screen)
            self.test_button.draw(self.screen)
            self.review_button.draw(self.screen)
            self.prev_button.draw(self.screen)
            self.next_button.draw(self.screen)
            self.show_button.draw(self.screen)
            self.correct_button.draw(self.screen)
            self.wrong_button.draw(self.screen)
            self.menu_button.draw(self.screen)
            
            # 只在测试模式显示测试设置按钮
            if self.progress.current_mode == "test":
                self.test_5_button.draw(self.screen)
                self.test_10_button.draw(self.screen)
                self.test_20_button.draw(self.screen)
            
            # 处理按钮点击
            if mouse_clicked:
                if self.learn_button.is_clicked(mouse_pos, mouse_clicked):
                    self.progress.start_learning()
                
                elif self.test_button.is_clicked(mouse_pos, mouse_clicked):
                    self.progress.start_test(10)
                
                elif self.review_button.is_clicked(mouse_pos, mouse_clicked):
                    self.progress.start_review()
                
                elif self.prev_button.is_clicked(mouse_pos, mouse_clicked):
                    self.progress.prev_word()
                
                elif self.next_button.is_clicked(mouse_pos, mouse_clicked):
                    self.progress.next_word()
                
                elif self.show_button.is_clicked(mouse_pos, mouse_clicked):
                    self.progress.show_answer = not self.progress.show_answer
                
                elif self.correct_button.is_clicked(mouse_pos, mouse_clicked):
                    if self.progress.current_mode == "learn":
                        self.progress.mark_correct()
                
                elif self.wrong_button.is_clicked(mouse_pos, mouse_clicked):
                    if self.progress.current_mode == "learn":
                        self.progress.mark_wrong()
                
                elif self.menu_button.is_clicked(mouse_pos, mouse_clicked):
                    self.progress.current_mode = "learn"
                    self.progress.current_word_index = 0
                    self.progress.show_answer = False
                
                elif self.test_5_button.is_clicked(mouse_pos, mouse_clicked):
                    self.progress.start_test(5)
                
                elif self.test_10_button.is_clicked(mouse_pos, mouse_clicked):
                    self.progress.start_test(10)
                
                elif self.test_20_button.is_clicked(mouse_pos, mouse_clicked):
                    self.progress.start_test(20)
                
                # 测试模式选项按钮
                if self.progress.current_mode == "test" and not self.progress.show_answer:
                    for i, button in enumerate(self.option_buttons):
                        if button.is_clicked(mouse_pos, mouse_clicked) and i < len(self.progress.test_options):
                            self.progress.select_option(i)
            
            # 绘制消息
            self.draw_message()
            
            # 显示当前模式
            mode_text = text_font.render(f"当前模式: {'学习' if self.progress.current_mode == 'learn' else '测试' if self.progress.current_mode == 'test' else '复习'}", True, PRIMARY)
            self.screen.blit(mode_text, (700, 550))
            
            # 显示快捷键提示
            if self.progress.current_mode == "learn":
                hint_text = small_font.render("快捷键: 左右方向键切换单词, S显示答案, C认识, W不认识", True, LIGHT_TEXT)
                self.screen.blit(hint_text, (WIDTH//2 - hint_text.get_width()//2, 570))
            
            # 更新显示
            pygame.display.flip()
            self.clock.tick(60)
        
        pygame.quit()
        sys.exit()

# 运行程序
if __name__ == "__main__":
    app = EnglishLearningApp()
    app.run()